Name: series-workflowcvhwq Phase: Succeeded StartedAt: 2026-09-14 08:26:56 +0000 UTC FinishedAt: 2026-09-14 12:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[0] Phase: Succeeded StartedAt: 2026-09-14 08:26:56 +0000 UTC FinishedAt: 2026-09-14 08:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 08:26:56 +0000 UTC FinishedAt: 2026-09-14 08:53:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2acabf7847fba2ebd0af7ea393fa0a7a35c46238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2acabf7847fba2ebd0af7ea393fa0a7a35c46238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "1d56ef4e-a1d3-470b-9428-82bc34270923" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "get_vlan", "nl80211_set_station", "nl80211_new_station" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "2acabf7847fba2ebd0af7ea393fa0a7a35c46238", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X3ZsYW4mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgZ2V0X3ZsYW4oKWAgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHRvIHRha2UgYW4gYWRkaXRpb25hbCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAgYXJndW1lbnQgYW5kIHZlcmlmaWVzIHRoYXQgYGRldmAgaXMgdmFsaWQgYW5kIHRoYXQgYHYtXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgYSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSB0YXJnZXQgQVAvUDJQX0dPIGludGVyZmFjZSB3aGVuIHNldHRpbmcgb3IgYWRkaW5nIGEgc3RhdGlvbiBpbiBubDgwMjExLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHJlcXVlc3QgaGFuZGxpbmcgaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsL3NpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDgwY2RlODNiMDg3MTEyZGRhYThkNDE4MjcxMjNmMTU1MmQyZDczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDg5OWI2Mzc0YzU1MDYuLjBmMzM4ODMxMmNjZDggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtODk2NiwxMCAmIzQzOzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4gXG4gLypcbi0gKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZyBhbmQgb24gdGhlIHJpZ2h0IHdpcGh5LlxuJiM0MzsgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZywgb24gdGhlIHJpZ2h0IHdpcGh5XG4mIzQzOyAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmxhdHRyICp2bGFuYXR0ciA9IGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICp2O1xuQEAgLTg5OTksNiAmIzQzOzkwMDEsMTIgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRnb3RvIGVycm9yO1xuIFx0fVxuIFxuJiM0MztcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cbiYjNDM7XHRpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LVx1MDAzZWRldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHY7XG4gIGVycm9yOlxuIFx0ZGV2X3B1dCh2KTtcbkBAIC05Mjk2LDcgJiM0Mzs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbiYjNDM7XHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XG4gXHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuIFxuQEAgLTk1OTcsNyAmIzQzOzk2MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFxuIFx0XHQvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi9cbi1cdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbiYjNDM7XHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbiBcdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuIFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF92bGFuJiMzNDssCiAgICAmIzM0O25sODAyMTFfc2V0X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgYSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSB0YXJnZXQgQVAvUDJQX0dPIGludGVyZmFjZSB3aGVuIHNldHRpbmcgb3IgYWRkaW5nIGEgc3RhdGlvbiBpbiBubDgwMjExLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHJlcXVlc3QgaGFuZGxpbmcgaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsL3NpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDgwY2RlODNiMDg3MTEyZGRhYThkNDE4MjcxMjNmMTU1MmQyZDczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDU6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA4OTliNjM3NGM1NTA2Li4wZjMzODgzMTJjY2Q4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTg5NjYsMTAgJiM0Mzs4OTY2LDEyIEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7CiAKIC8qCi0gKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZyBhbmQgb24gdGhlIHJpZ2h0IHdpcGh5LgomIzQzOyAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nLCBvbiB0aGUgcmlnaHQgd2lwaHkKJiM0MzsgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS4KICAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKJiM0MzsJCQkJICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdjsKQEAgLTg5OTksNiAmIzQzOzkwMDEsMTIgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogCQlnb3RvIGVycm9yOwogCX0KIAomIzQzOwkvKiBDaGVjayBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlICovCiYjNDM7CWlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtJmd0O2Rldl9hZGRyLCBkZXYtJmd0O2Rldl9hZGRyKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gdjsKICBlcnJvcjoKIAlkZXZfcHV0KHYpOwpAQCAtOTI5Niw3ICYjNDM7OTMwNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYpOwomIzQzOwlwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7CiAJaWYgKElTX0VSUihwYXJhbXMudmxhbikpCiAJCXJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTsKIApAQCAtOTU5Nyw3ICYjNDM7OTYwNSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAKIAkJLyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovCi0JCXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7CiYjNDM7CQlwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7CiAJCWlmIChJU19FUlIocGFyYW1zLnZsYW4pKQogCQkJcmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pOwogCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN0YXRpb24gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhlIGBnZXRfdmxhbmAgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuIFRoZSBjcml0aWNhbCBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayB3aXRoaW4gYGdldF92bGFuYCB0byBlbnN1cmUgdGhlIFZMQU4gaW50ZXJmYWNlIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlIHByb3ZpZGVkIEFQL1AyUF9HTyBpbnRlcmZhY2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgcmVsaWFibHkgdGVzdGVkPyBHaXZlbiB0aGUgZm9jdXMgb24gbmV0bGluayBubDgwMjExIGNvbW1hbmRzLCBJIHdvbmRlciBpZiB0aGUgZnV6emluZyBpbmZyYXN0cnVjdHVyZSBpcyBzZXQgdXAgdG8gYWRkcmVzcyB0aGlzIQoKQWgsIGl0IGlzISBtYWM4MDIxMV9od3NpbSBpcywgdGhhbmtmdWxseSwgYSBzdGFwbGUgaW4gc3l6a2FsbGVyLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSByZWFkaWx5IGF2YWlsYWJsZSBzb2Z0d2FyZS1zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlLCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHRlc3RpbmcgbGFuZHNjYXBlLiBOZXRsaW5rIGNvbW1hbmRzIGxpa2UgYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBhbmQgYE5MODAyMTFfQ01EX05FV19TVEFUSU9OYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gTm8gaGFyZHdhcmUgY29uc3RyYWludHMgdG8gd29ycnkgYWJvdXQgaGVyZSEgSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBmaWxlcyBhbmQgYEtjb25maWdgIGZvciB0aGUgc3BlY2lmaWNzLCBidXQgdGhlIGZhY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBpbiBzeXprYWxsZXIgaXMgZ3JlYXQgbmV3cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg5NjU6XHR9XG44OTY2Olx0RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG44OTY3Olx0XG44OTY4Olx0Lypcbjg5Njk6XHQgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZywgb24gdGhlIHJpZ2h0IHdpcGh5XG44OTcwOlx0ICogYW5kIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlIGdpdmVuIEFQL1AyUF9HTyBpbnRlcmZhY2UuXG44OTcxOlx0ICovXG44OTcyOlx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuODk3MzpcdFx0XHRcdFx0ICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuODk3NDpcdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjg5NzU6XHR7XG44OTc2Olx0XHRzdHJ1Y3QgbmxhdHRyICp2bGFuYXR0ciA9IGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTtcbjg5Nzc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICp2O1xuODk3ODpcdFx0aW50IHJldDtcbjg5Nzk6XHRcbjg5ODA6XHRcdGlmICghdmxhbmF0dHIpXG44OTgxOlx0XHRcdHJldHVybiBOVUxMO1xuODk4MjpcdFxuODk4MzpcdFx0diA9IGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChpbmZvKSwgbmxhX2dldF91MzIodmxhbmF0dHIpKTtcbjg5ODQ6XHRcdGlmICghdilcbjg5ODU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG44OTg2Olx0XG44OTg3Olx0XHRpZiAoIXYtXHUwMDNlaWVlZTgwMjExX3B0ciB8fCB2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkgIT0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeSkge1xuODk4ODpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuODk4OTpcdFx0XHRnb3RvIGVycm9yO1xuODk5MDpcdFx0fVxuODk5MTpcdFxuODk5MjpcdFx0aWYgKHYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiBcdTAwMjZcdTAwMjZcbjg5OTM6XHRcdCAgICB2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQIFx1MDAyNlx1MDAyNlxuODk5NDpcdFx0ICAgIHYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB7XG44OTk1Olx0XHRcdHJldCA9IC1FSU5WQUw7XG44OTk2Olx0XHRcdGdvdG8gZXJyb3I7XG44OTk3Olx0XHR9XG44OTk4Olx0XG44OTk5Olx0XHRpZiAoIW5ldGlmX3J1bm5pbmcodikpIHtcbjkwMDA6XHRcdFx0cmV0ID0gLUVORVRET1dOO1xuOTAwMTpcdFx0XHRnb3RvIGVycm9yO1xuOTAwMjpcdFx0fVxuOTAwMzpcdFxuOTAwNDpcdFx0LyogQ2hlY2sgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZSAqL1xuOTAwNTpcdFx0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuOTAwNjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuOTAwNzpcdFx0XHRnb3RvIGVycm9yO1xuOTAwODpcdFx0fVxuOTAwOTpcdFxuOTAxMDpcdFx0cmV0dXJuIHY7XG45MDExOlx0IGVycm9yOlxuOTAxMjpcdFx0ZGV2X3B1dCh2KTtcbjkwMTM6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG45MDE0Olx0fVxuOTAxNTpcdFxuOTAxNjpcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9zdGFfd21lKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG45MDE3Olx0XHRcdFx0XHQgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKVxuOTAxODpcdHtcbjkwMTk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfU1RBX1dNRV9NQVggJiM0MzsgMV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIERldmljZSBDb250ZXh0IGluIG5sODAyMTEuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCBhZ2Fpbi4gSSB3YW50IHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGhvdyB0aGUgYGRldmAgdmFyaWFibGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiBsaW5lcyA5Mjg1LTkzMjAgYW5kIDk1OTAtOTYyMC4gVGhpcyBzaG91bGQgY2xhcmlmeSBob3cgdGhlIGRldmljZSBjb250ZXh0IGlzIGVzdGFibGlzaGVkIGFuZCB1c2VkIHdoZW4gc2V0dGluZyB1cCBvciBtb2RpZnlpbmcgc3RhdGlvbiBjb25maWd1cmF0aW9ucyB2aWEgbmw4MDIxMS4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgdG8gZGVidWcgYSBwb3RlbnRpYWwgaXNzdWUsIG9yIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBuZXcgc3RhdGlvbiBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5Mjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkyODU6XHRcdH1cbjkyODY6XHRcbjkyODc6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pXG45Mjg4Olx0XHRcdHBhcmFtcy5haXJ0aW1lX3dlaWdodCA9XG45Mjg5Olx0XHRcdFx0bmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKTtcbjkyOTA6XHRcbjkyOTE6XHRcdGlmIChwYXJhbXMuYWlydGltZV93ZWlnaHQgXHUwMDI2XHUwMDI2XG45MjkyOlx0XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG45MjkzOlx0XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQUlSVElNRV9GQUlSTkVTUykpXG45Mjk0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjkyOTU6XHRcbjkyOTY6XHRcdGVyciA9IG5sODAyMTFfcGFyc2Vfc3RhX3R4cG93ZXJfc2V0dGluZyhpbmZvLFxuOTI5NzpcdFx0XHRcdFx0XHRcdFx1MDAyNnBhcmFtcy5saW5rX3N0YV9wYXJhbXMudHhwd3IsXG45Mjk4Olx0XHRcdFx0XHRcdFx0XHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cl9zZXQpO1xuOTI5OTpcdFx0aWYgKGVycilcbjkzMDA6XHRcdFx0cmV0dXJuIGVycjtcbjkzMDE6XHRcbjkzMDI6XHRcdC8qIEluY2x1ZGUgcGFyYW1ldGVycyBmb3IgVERMUyBwZWVyICh3aWxsIGNoZWNrIGxhdGVyKSAqL1xuOTMwMzpcdFx0ZXJyID0gbmw4MDIxMV9zZXRfc3RhdGlvbl90ZGxzKGluZm8sIFx1MDAyNnBhcmFtcyk7XG45MzA0Olx0XHRpZiAoZXJyKVxuOTMwNTpcdFx0XHRyZXR1cm4gZXJyO1xuOTMwNjpcdFxuOTMwNzpcdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuOTMwODpcdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG45MzA5Olx0XHRcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcbjkzMTA6XHRcbjkzMTE6XHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbjkzMTI6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG45MzEzOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XG45MzE0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzpcbjkzMTU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcbjkzMTY6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbjkzMTc6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG45MzE4Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG45MzE5Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbjkzMjA6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEE6XG45MzIxOlx0XHRcdGJyZWFrO1xuOTMyMjpcdFx0ZGVmYXVsdDpcbjkzMjM6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG45MzI0Olx0XHRcdGdvdG8gb3V0X3B1dF92bGFuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgYGRldmAgaW4gYG5sODAyMTFfc2V0X3N0YXRpb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBgZGV2YCB2YXJpYWJsZSBjb21lcyBmcm9tIHdpdGhpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgb3IgbW9kaWZ5aW5nIHNvbWUgd2lyZWxlc3MgYmVoYXZpb3IgSSYjMzk7bSB3b3JraW5nIHdpdGguIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB0cmFjZSB0aGUgY2FsbCBzdGFjayBvciBjb2RlIGZsb3cgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgYGRldmAgaXMgaW5pdGlhbGl6ZWQgb3IgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBhIHBvaW50ZXIgdG8gYSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUsIHByb2JhYmx5IGEgYHN0cnVjdCBuZXRfZGV2aWNlICpgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyBiZWluZyB1c2VkLiBJcyBpdCBiZWluZyBwYXNzZWQgZGlyZWN0bHkgZnJvbSBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgcGVyaGFwcyBgY2ZnODAyMTFgIG9yIHNvbWUgb3RoZXIgbmV0bGluayBoYW5kbGVyPyBPciBpcyBpdCBwb3NzaWJseSBiZWluZyBsb29rZWQgdXAgYmFzZWQgb24gc29tZSBvdGhlciBpZGVudGlmaWVyIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZXMgdG8gZmluZCB3aGVyZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgaXMgY2FsbGVkLCBhbmQgdGhlbiB3b3JrIG15IHdheSBiYWNrd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgYW5kIGFueSBpbnRlcm1lZGlhdGUgc3RlcHMgdGhhdCBtaWdodCBpbnZvbHZlIGRldmljZSBsb29rdXAgb3IgaW5pdGlhbGl6YXRpb24uIEhvcGVmdWxseSwgaXQmIzM5O3Mgbm90IGJ1cmllZCB0b28gZGVlcCBpbiBzb21lIG1hY3JvcyBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0X2RldmljZWAgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMgdXRpbGl6ZWQgd2l0aGluIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTE4MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG45MTgxOlx0XG45MTgyOlx0XHQvKlxuOTE4MzpcdFx0ICogQUlEIGFuZCBsaXN0ZW5faW50ZXJ2YWwgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHVuYXNzb2NpYXRlZFxuOTE4NDpcdFx0ICogc3RhdGlvbi4gSW5jbHVkZSB0aGVzZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIHdpbGwgY2hlY2sgdGhlbSBpblxuOTE4NTpcdFx0ICogY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UoKS5cbjkxODY6XHRcdCAqL1xuOTE4NzpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKVxuOTE4ODpcdFx0XHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pO1xuOTE4OTpcdFxuOTE5MDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKVxuOTE5MTpcdFx0XHRwYXJhbXMudmxhbl9pZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKTtcbjkxOTI6XHRcbjkxOTM6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSlcbjkxOTQ6XHRcdFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9XG45MTk1Olx0XHRcdCAgICAgbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pO1xuOTE5NjpcdFx0ZWxzZVxuOTE5NzpcdFx0XHRwYXJhbXMubGlzdGVuX2ludGVydmFsID0gLTE7XG45MTk4Olx0XG45MTk5Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRfUDJQX1BTXSlcbjkyMDA6XHRcdFx0cGFyYW1zLnN1cHBvcnRfcDJwX3BzID1cbjkyMDE6XHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JUX1AyUF9QU10pO1xuOTIwMjpcdFx0ZWxzZVxuOTIwMzpcdFx0XHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPSAtMTtcbjkyMDQ6XHRcbjkyMDU6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcbjkyMDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MjA3Olx0XG45MjA4Olx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuOTIwOTpcdFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbjkyMTA6XHRcbjkyMTE6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcbjkyMTI6XHRcdFx0LyogSWYgTUxEX0FERFIgYXR0cmlidXRlIGlzIHNldCB0aGVuIHRoaXMgaXMgYW4gTUxEIHN0YXRpb25cbjkyMTM6XHRcdFx0ICogYW5kIHRoZSBNTERfQUREUiBhdHRyaWJ1dGUgaG9sZHMgdGhlIE1MRCBhZGRyZXNzIGFuZCB0aGVcbjkyMTQ6XHRcdFx0ICogTUFDIGF0dHJpYnV0ZSBob2xkcyBmb3IgdGhlIExJTksgYWRkcmVzcy5cbjkyMTU6XHRcdFx0ICogSW4gdGhhdCBjYXNlLCB0aGUgbGlua19pZCBpcyBhbHNvIGV4cGVjdGVkIHRvIGJlIHZhbGlkLlxuOTIxNjpcdFx0XHQgKi9cbjkyMTc6XHRcdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMClcbjkyMTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZvY3VzaW5nIG9uIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB1cG9uIHNlZWluZyB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgYG5sODAyMTFfc2V0X3N0YXRpb25gOgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIG5sODAyMTFfc2V0X3N0YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBzdGFydGluZyBwb2ludCBmb3IgYG5sODAyMTFfc2V0X3N0YXRpb25g4oCmIHJpZ2h0LCB0aGlzIGlzIHdoZXJlIHdlIGJlZ2luIHRvIGNvbmZpZ3VyZSBzdGF0aW9uIHBhcmFtZXRlcnMgdGhyb3VnaCB0aGUgbmw4MDIxMSBpbnRlcmZhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBoaWdoLWxldmVsIGNvbnRleHQgaGVyZS4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cyBiZWluZyBzZXQ/IFdoYXQga2luZCBvZiBjb250cm9sIGZsb3cgYW0gSSBsb29raW5nIGF0PyBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgZW5jb3VudGVyZWQgYXQgdGhpcyBlbnRyeSBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBhbnkgcHJlbGltaW5hcnkgY2hlY2tzIGFuZCBzYW5pdHkgdmFsaWRhdGlvbnMgdGhhdCBtYXkgdGFrZSBwbGFjZSBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljLiBJIGFudGljaXBhdGUgc29tZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB3aXJlbGVzcyBkZXZpY2UmIzM5O3MgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgdGhlIG5ldGxpbmsgbWVzc2FnZSBpcyBwYXJzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gc29tZXRoaW5nIHRoZSBkcml2ZXIgY2FuIHdvcmsgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkxNTA6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tpZHhdKVxuOTE1MTpcdFx0XHRcdFx0dHhwd3ItXHUwMDNlcG93ZXIgPSBubGFfZ2V0X3MxNihpbmZvLVx1MDAzZWF0dHJzW2lkeF0pO1xuOTE1MjpcdFx0XHRcdGVsc2VcbjkxNTM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTE1NDpcdFx0XHR9XG45MTU1Olx0XG45MTU2Olx0XHRcdCp0eHB3cl9zZXQgPSB0cnVlO1xuOTE1NzpcdFx0fSBlbHNlIHtcbjkxNTg6XHRcdFx0KnR4cHdyX3NldCA9IGZhbHNlO1xuOTE1OTpcdFx0fVxuOTE2MDpcdFxuOTE2MTpcdFx0cmV0dXJuIDA7XG45MTYyOlx0fVxuOTE2MzpcdFxuOTE2NDpcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuOTE2NTpcdHtcbjkxNjY6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG45MTY3Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjkxNjg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVx1MDAzZW5ldGRldjtcbjkxNjk6XHRcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xuOTE3MDpcdFx0dTggKm1hY19hZGRyO1xuOTE3MTpcdFx0aW50IGVycjtcbjkxNzI6XHRcbjkxNzM6XHRcdG1lbXNldChcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcbjkxNzQ6XHRcbjkxNzU6XHRcdGlmICghZGV2IFx1MDAyNlx1MDAyNiB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gXHUwMDI2XHUwMDI2XG45MTc2Olx0XHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXG45MTc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTE3ODpcdFxuOTE3OTpcdFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2Vfc3RhdGlvbilcbjkxODA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTE4MTpcdFxuOTE4MjpcdFx0LypcbjkxODM6XHRcdCAqIEFJRCBhbmQgbGlzdGVuX2ludGVydmFsIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvbmx5IGZvciB1bmFzc29jaWF0ZWRcbjkxODQ6XHRcdCAqIHN0YXRpb24uIEluY2x1ZGUgdGhlc2UgcGFyYW1ldGVycyBoZXJlIGFuZCB3aWxsIGNoZWNrIHRoZW0gaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgYGRldmAgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGdvdGNoYSB3aXRoIHRoZSBgZGV2YCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBgZGV2YCBjb3VsZCBiZSBhIE5VTEwgcG9pbnRlciB1bmRlciB0d28gc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgd2Rldi0mZ3Q7aWZ0eXBlYCBpcyBgTkw4MDIxMV9JRlRZUEVfTkFOYCBvciBpZiBpdCYjMzk7cyBgTkFOX0RBVEFgLiBUaGlzIGlzIGEgcHJldHR5IGltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBrZWVwIGluIG1pbmQsIGJlY2F1c2UgZG93bnN0cmVhbSBjaGVja3MgYXJlIGdvaW5nIHRvIG5lZWQgdG8gYWNjb21tb2RhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGBkZXZgIGJlaW5nIE5VTEwgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGBnZXRfdmxhbmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhpcyBibG9jazoKCmBgYGMKCS8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi8KCWlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtJmd0O2Rldl9hZGRyLCBkZXYtJmd0O2Rldl9hZGRyKSkgewoJCXJldCA9IC1FSU5WQUw7CgkJZ290byBlcnJvcjsKCX0KYGBgCgpUaGUgY29kZSBjaGVja3MgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZS4gVGhlIHRlc3QgZm9yIGAhZGV2YCBpcyB0aGUgY3J1Y2lhbCBwaWVjZSBoZXJlLCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBwb3RlbnRpYWwgTlVMTCBjaGVjayBJIHdhcyBqdXN0IGNvbnNpZGVyaW5nLiBJZiBgZGV2YCBpcyBOVUxMLCBkdWUgdG8gdGhlIGNvbmRpdGlvbnMgSSBub3RlZCBhYm92ZSwgdGhlIGNoZWNrIHdpbGwgcGFzcyBhbmQgbGVhZCB0byBgLUVJTlZBTGAuIFRoaXMgbWFrZXMgc2Vuc2UsIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUuIElmIHdlICpkb24mIzM5O3QqIGhhdmUgYSB2YWxpZCAmIzM5O2RldiYjMzk7IHdlIHNob3VsZG4mIzM5O3QgY29udGludWUuCgpTbywgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBgZ2V0X3ZsYW5gIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGJlIHZlcnkgc3VyZSB0aGF0IGBkZXZgIGlzIHZhbGlkIGJlZm9yZSB3ZSBldmVuIGdldCB0byB0aGUgYGV0aGVyX2FkZHJfZXF1YWxgIGNhbGwuIE90aGVyd2lzZSwgd2UgY291bGQgYmUgcnVubmluZyBpbnRvIHNvbWUgbmFzdHkgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYWxsIG9mIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGF0IGFyZWEgbm93LCBhcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVkxBTiBpbnRlcmZhY2UgaXMgc3RhcnRpbmcgdG8gYmUgY2xlYXJlciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTUzMDpcdFx0LyogSFQvVkhUIHJlcXVpcmVzIFFvUywgYnV0IGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRoYXQganVzdCBpZ25vcmUgSFQvVkhUXG45NTMxOlx0XHQgKiBhcyB1c2Vyc3BhY2UgbWlnaHQganVzdCBwYXNzIHRocm91Z2ggdGhlIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBJRXNcbjk1MzI6XHRcdCAqIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBlbmZvcmNpbmcgdGhpcyByZXN0cmljdGlvbiBhbmQgcmV0dXJuaW5nIGFuXG45NTMzOlx0XHQgKiBlcnJvciBpbiB0aGlzIGNhc2UuXG45NTM0Olx0XHQgKi9cbjk1MzU6XHRcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpKSkge1xuOTUzNjpcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmh0X2NhcGEgPSBOVUxMO1xuOTUzNzpcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLnZodF9jYXBhID0gTlVMTDtcbjk1Mzg6XHRcbjk1Mzk6XHRcdFx0LyogSEUsIEVIVCBhbmQgVUhSIHJlcXVpcmUgV01FICovXG45NTQwOlx0XHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlX2NhcGFfbGVuIHx8XG45NTQxOlx0XHRcdCAgICBwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSB8fFxuOTU0MjpcdFx0XHQgICAgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYV9sZW4gfHxcbjk1NDM6XHRcdFx0ICAgIHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudWhyX2NhcGFfbGVuKVxuOTU0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTU0NTpcdFx0fVxuOTU0NjpcdFxuOTU0NzpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuOTU0ODpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45NTQ5Olx0XHRcdGlmIChwYXJhbXMuc3RhX21vZGlmeV9tYXNrIFx1MDAyNiBTVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEKVxuOTU1MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTU1MTpcdFx0XHQvKiBOQU4gTk1JIHN0YXRpb24gbXVzdCBiZSBhZGRlZCBpbiBhc3NvY2lhdGVkIG9yIGF1dGhvcml6ZWQgc3RhdGUgKi9cbjk1NTI6XHRcdFx0aWYgKCEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IChCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKSB8XG45NTUzOlx0XHRcdFx0XHRcdCAgICAgIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpKSkpXG45NTU0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45NTU1Olx0XHR9XG45NTU2Olx0XG45NTU3Olx0XHQvKiBFbnN1cmUgdGhhdCBIVC9WSFQgY2FwYWJpbGl0aWVzIGFyZSBub3Qgc2V0IGZvciA2IEdIeiBIRSBTVEEgKi9cbjk1NTg6XHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSBcdTAwMjZcdTAwMjZcbjk1NTk6XHRcdCAgICAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5odF9jYXBhIHx8IHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEpKVxuOTU2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk1NjE6XHRcbjk1NjI6XHRcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXG45NTYzOlx0XHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOCk7XG45NTY0Olx0XG45NTY1Olx0XHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG45NTY2Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuOTU2NzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuOTU2ODpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG45NTY5Olx0XHRcdC8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi9cbjk1NzA6XHRcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcbjk1NzE6XHRcdFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxuOTU3MjpcdFx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcbjk1NzM6XHRcbjk1NzQ6XHRcdFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZSBzdGFydCBvZiBgbmw4MDIxMV9uZXdfc3RhdGlvbmAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGl2aW5nIGludG8gYG5sODAyMTFfbmV3X3N0YXRpb25gIOKAkyBJbml0aWFsIFRob3VnaHRzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgKmJlZ2lucyogd2hlbiBhIG5ldyBzdGF0aW9uIGNvbm5lY3RzIOKAkyB0aGUgcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyB3aXJlbGVzcyBzdWJzeXN0ZW0gZ2V0cyBpdHMgaG9va3MgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCBhbmQgaG93IHRoaXMgY29ubmVjdGlvbiBpcyBiZWluZyByZXByZXNlbnRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBjb25jZXJucyBhcmUgYWx3YXlzIGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG1ha2luZyBzdXJlIHRoaXMgbmV3IHN0YXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuCgpJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlvbiYjMzk7cyBjb25maWd1cmF0aW9uIGRhdGEsIGxpa2UgaXRzIE1BQyBhZGRyZXNzLCBhc3NvY2lhdGVkIEJTU0lELCBhbmQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBpcyBiZWluZyBwYXNzZWQgaW4uIEFyZSB3ZSB2YWxpZGF0aW5nIHRoaXMgZGF0YSBwcm9wZXJseT8gSXMgdGhlcmUgYW55IG9wcG9ydHVuaXR5IGZvciBpbmplY3Rpb24gb2YgbWFsaWNpb3VzIGRhdGEgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBmb3IgY2hlY2tzIG9uIGxlbmd0aHMsIHZhbGlkIE1BQyBhZGRyZXNzZXMsIGFuZCBhbnkgb3RoZXIgc2FuaXR5IGNoZWNrcyB0aGUgZGV2ZWxvcGVycyBoYXZlIGltcGxlbWVudGVkLgoKTmV4dCwgSSYjMzk7bSBnb2luZyB0byBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbmV3IHN0YXRpb24gaXMgYmVpbmcgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gSG93IGFyZSB0aGV5IGxpbmtlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0/IElzIGl0IGEgc2luZ2xlIGFsbG9jYXRpb24sIG9yIGFyZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBJJiMzOTtsbCBiZSBrZWVwaW5nIGEga2VlbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3Mg4oCTIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gTWVtb3J5IG1hbmFnZW1lbnQgd2lsbCBiZSBjcml0aWNhbCDigJMgSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga21hbGxvY2Agb3Igc2ltaWxhciwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRob3NlIGFsbG9jYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBhbmQgdGhhdCBkZWFsbG9jYXRpb24gaGFwcGVucyBpbiB0aGUgY29ycmVjdCBzaXR1YXRpb25zLCBhdm9pZGluZyBtZW1vcnkgbGVha3MuCgpGaW5hbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXZlbnQgb3IgY2FsbGJhY2sgcmVnaXN0cmF0aW9uLiBEb2VzIHRoaXMgZnVuY3Rpb24gdHJpZ2dlciBvdGhlciBhY3Rpb25zIG9yIHNldCB1cCBmdXR1cmUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN0YXRpb24/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3RhdGlvbiYjMzk7cyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgbWFuYWdlZCwgYW5kIGhvdyB0aGF0IGluZm9ybWF0aW9uIGlzIG1hZGUgYWNjZXNzaWJsZSB0byBvdGhlciBzdWJzeXN0ZW1zLCBsaWtlIHRoZSBuZXR3b3JraW5nIHN0YWNrIG9yIGFueSB1c2Vyc3BhY2UgbW9uaXRvcmluZyB0b29scy4gSSB3aWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gZW5zdXJlIGFsbCBpbml0aWFsaXNhdGlvbiByb3V0aW5lcyBhcmUgY2FsbGVkIGFuZCB0aGF0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHN0YXRpb24gaXMgaW5pdGlhbGl6ZWQgdG8gYSB2YWxpZCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NDUwOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pIHtcbjk0NTE6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhID1cbjk0NTI6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSk7XG45NDUzOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYV9sZW4gPVxuOTQ1NDpcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xuOTQ1NTpcdFxuOTQ1NjpcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKSB7XG45NDU3Olx0XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSA9XG45NDU4Olx0XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FSFRfQ0FQQUJJTElUWV0pO1xuOTQ1OTpcdFx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuID1cbjk0NjA6XHRcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKTtcbjk0NjE6XHRcbjk0NjI6XHRcdFx0XHRpZiAoIWllZWU4MDIxMV9laHRfY2FwYV9zaXplX29rKChjb25zdCB1OCAqKXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYSxcbjk0NjM6XHRcdFx0XHRcdFx0XHRcdChjb25zdCB1OCAqKXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGEsXG45NDY0Olx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmVodF9jYXBhX2xlbixcbjk0NjU6XHRcdFx0XHRcdFx0XHRcdGZhbHNlKSlcbjk0NjY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTQ2NzpcdFx0XHR9XG45NDY4Olx0XHR9XG45NDY5Olx0XG45NDcwOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKSB7XG45NDcxOlx0XHRcdGlmICghcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSlcbjk0NzI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk0NzM6XHRcbjk0NzQ6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy51aHJfY2FwYSA9XG45NDc1Olx0XHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKTtcbjk0NzY6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy51aHJfY2FwYV9sZW4gPVxuOTQ3NzpcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKTtcbjk0Nzg6XHRcdH1cbjk0Nzk6XHRcbjk0ODA6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pIHtcbjk0ODE6XHRcdFx0cGFyYW1zLmVtbF9jYXBfcHJlc2VudCA9IHRydWU7XG45NDgyOlx0XHRcdHBhcmFtcy5lbWxfY2FwID1cbjk0ODM6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuOTQ4NDpcdFx0fVxuOTQ4NTpcdFxuOTQ4NjpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pXG45NDg3Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfNmdoel9jYXBhID1cbjk0ODg6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTtcbjk0ODk6XHRcbjk0OTA6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TMUdfQ0FQQUJJTElUWV0pXG45NDkxOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuczFnX2NhcGEgPVxuOTQ5MjpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1MxR19DQVBBQklMSVRZXSk7XG45NDkzOlx0XG45NDk0Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gZGVhbGluZyB3aXRoIGBubDgwMjExX25ld19zdGF0aW9uYCBhbmQgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIEZ1bmN0aW9uJiMzOTtzIEhpc3RvcnkqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgaXRzIGxpbmVhZ2UsIHRvIHNlZSB0aGUgY2FsbHMgdGhhdCBsZWFkIHVwIHRvIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIHBhcmFtb3VudCBoZXJlLiBTbyBJ4oCZbSBtZW50YWxseSBzY2FubmluZyBiYWNrIHRocm91Z2ggdGhlIGVhcmxpZXIgbGluZXMsIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQuLi4gd2hhdCB0cmlnZ2VycyB0aGlzIGBuZXdfc3RhdGlvbmAgZXZlbnQ/IElzIGl0IGEgYmVhY29uLCBhIHByb2JlIHJlcXVlc3QsIGEgbWFuYWdlbWVudCBmcmFtZT8gS25vd2luZyB0aGF0IHdpbGwgZGVmaW5lIHRoZSBwb3RlbnRpYWwgc2lnbmlmaWNhbmNlIG9mIGFueSBpc3N1ZXMgSSBmaW5kLiBJJiMzOTttIGVzc2VudGlhbGx5IHJldmVyc2UgZW5naW5lZXJpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLCBtZW50YWxseSBidWlsZGluZyBhIG1lbnRhbCBzdGFjayBvZiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjZWRpbmcgY29uZGl0aW9ucy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjbHVlcyB0byBzdXJmYWNlIHNvb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTM2NTpcdFxuOTM2NjpcdFx0XHRcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cbjkzNjc6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcbjkzNjg6XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XG45MzY5Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxuOTM3MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzcxOlx0XHRcdH1cbjkzNzI6XHRcdH0gZWxzZSB7XG45MzczOlx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45Mzc0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc1Olx0XG45Mzc2Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXG45Mzc3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc4Olx0XG45Mzc5Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXHUwMDI2XHUwMDI2XG45MzgwOlx0XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxuOTM4MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM4MjpcdFx0fVxuOTM4MzpcdFxuOTM4NDpcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cbjkzODU6XHRcdFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycyk7XG45Mzg2Olx0XG45Mzg3Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG45Mzg4Olx0XHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcbjkzODk6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XG45MzkwOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19tYWMgPVxuOTM5MTpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5MjpcdFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYykpXG45MzkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzk0Olx0XHR9IGVsc2Uge1xuOTM5NTpcdFx0XHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5NjpcdFx0fVxuOTM5NzpcdFxuOTM5ODpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKSB7XG45Mzk5Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzID1cbjk0MDA6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAxOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzX2xlbiA9XG45NDAyOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAzOlx0XHR9XG45NDA0Olx0XG45NDA1Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45NDA2Olx0XHRcdHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPVxuOTQwNzpcdFx0XHRcdG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKTtcbjk0MDg6XHRcbjk0MDk6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZSBiZWdpbm5pbmcgb2YgYG5sODAyMTFfbmV3X3N0YXRpb25gLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5sODAyMTFfbmV3X3N0YXRpb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24gYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gRmlyc3QgdGhpbmcgSSYjMzk7bSBleHBlY3RpbmcgaXMgdGhlIHVzdWFsIHNldHVwOiBzb21lIHByZWxpbWluYXJ5IGNoZWNrcyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGV2ZW4gYWxsb3dlZCB0byBkbyB0aGlzIOKAkyBhcmUgd2Ugcm9vdD8gSXMgdGhpcyBuZXRsaW5rIG1lc3NhZ2Ugd2VsbC1mb3JtZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbW90ZWx5IHNhbmU/IEkgbmVlZCB0byB2ZXJpZnkgYWxsIHRoZSBpbnB1dHM6IHRoZSBpbnRlcmZhY2UgKG9idmlvdXNseSEpLCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5ldyBzdGF0aW9uLCBhbmQgYW55IGluaXRpYWwgcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9uIGhpbnRzLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIG9wZXJhdGlvbjsgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBpcyBhIGJpZyBkZWFsIGluIHRoZSA4MDIuMTEgd29ybGQsIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayBpZiBhbGwgdGhlIHBhcmFtZXRlcnMgYXJlIGFjY2VwdGFibGUsIGJlY2F1c2UgdGhlIHdyb25nIHZhbHVlcyBjYW4gZGFtYWdlIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsuCgpOZXh0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uLiBXZSYjMzk7cmUgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBlbnRyeSwgc28gd2UgbmVlZCBtZW1vcnkgZm9yIHRoYXQgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGxpa2VseSB3ZSYjMzk7bGwgYmUgYWxsb2NhdGluZyBhIG5ldyBgY2ZnODAyMTFfc3RhdGlvbmAgc3RydWN0dXJlIG9yIHNpbWlsYXIsIHByb2JhYmx5IGxpbmtpbmcgaXQgaW50byBzb21lIGdsb2JhbCBkYXRhIHN0cnVjdHVyZSBvciBhIHBlci1pbnRlcmZhY2UgbGlzdC4gV2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIHRoaXMgbmV3IHN0YXRpb24uIE5vdyBpcyB0aGUgdGltZSB0byBjaGVjayB0aGUgcmVzb3VyY2VzIGF2YWlsYWJsZS4gSXMgdGhlcmUgbWVtb3J5IGF2YWlsYWJsZT8KCk9uY2Ugd2UgaGF2ZSBvdXIgbWVtb3J5LCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHNldHRpbmcgdXAgdGhlIHN0YXRpb24mIzM5O3MgaW5pdGlhbCBzdGF0ZS4gQXJlIHdlIHVzaW5nIGRlZmF1bHQgdmFsdWVzIGZvciBldmVyeXRoaW5nIG9yLCBtb3JlIGxpa2VseSwgYXJlIHdlIGdyYWJiaW5nIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSB0aGUgbmV0bGluayBtZXNzYWdlPyBXZSYjMzk7bGwgbmVlZCB0byBpbml0aWFsaXplIGl0cyBNQUMgYWRkcmVzcywgaXRzIGNvbm5lY3Rpb24gc3RhdGUgKGFzc29jaWF0ZWQsIGF1dGhlbnRpY2F0ZWQsIGV0Yy4pLCBpdHMgY2FwYWJpbGl0aWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHZhbHVlcyBiZWluZyBzZXQgYXJlIHZhbGlkLiBBcmUgd2UgY3JlYXRpbmcgYSBzdGF0aW9uIGZvciBhIHN1cHBvcnRlZCByYWRpbz8gSXMgdGhpcyBhIHN0YW5kYXJkIGFzc29jaWF0aW9uPwoKVGhlIHdob2xlIHByb2Nlc3MgcHJvYmFibHkgaW5jbHVkZXMgc29tZSBsb2NraW5nLiBDcmVhdGluZyBhIG5ldyBzdGF0aW9uIGlzIGEgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YXRlLiBJIGV4cGVjdCBhIG11dGV4IG9yIHJlYWQvd3JpdGUgbG9jayB3aWxsIGJlIGludm9sdmVkLCB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZSBuZXRsaW5rIHJlcXVlc3RzIGRvbiYjMzk7dCBzdG9tcCBvbiBlYWNoIG90aGVyIHdoaWxlIG1lc3Npbmcgd2l0aCB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIGNhbGxiYWNrcyB0byB0aGUgaGFyZHdhcmUgZHJpdmVyIGludm9sdmVkIGF0IHRoaXMgc3RhZ2Ug4oCTIHRlbGxpbmcgdGhlIHdpcmVsZXNzIGNhcmQgdGhhdCBhIG5ldyBzdGF0aW9uIGlzIGNvbWluZyBvbiBib2FyZC4KCkFuZCBmaW5hbGx5LCBvZiBjb3Vyc2UsIGF0IHRoZSBlbmQsIGlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCB0aGVyZSYjMzk7bGwgYmUgc29tZSBuZXRsaW5rIHJlc3BvbnNlLiBFaXRoZXIgYW4gQUNLIHRvIHNheSwgJiMzNDtZZXAsIHN0YXRpb24gY3JlYXRlZCwmIzM0OyBvciBzb21lIGtpbmQgb2YgZXJyb3IgY29kZSBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4gV2UgYXJlIGV4cGVydHMsIGFuZCB3ZSBrbm93IGhvdyB0byBjaGVjayB0aGUgY29kZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGV4cGVjdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkzMzA6XHQgb3V0X3B1dF92bGFuOlxuOTMzMTpcdFx0ZGV2X3B1dChwYXJhbXMudmxhbik7XG45MzMyOlx0XG45MzMzOlx0XHRyZXR1cm4gZXJyO1xuOTMzNDpcdH1cbjkzMzU6XHRcbjkzMzY6XHRzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjkzMzc6XHR7XG45MzM4Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuOTMzOTpcdFx0aW50IGVycjtcbjkzNDA6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuOTM0MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXHUwMDNlbmV0ZGV2O1xuOTM0MjpcdFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XG45MzQzOlx0XHR1OCAqbWFjX2FkZHIgPSBOVUxMO1xuOTM0NDpcdFx0dTMyIGF1dGhfYXNzb2MgPSBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8XG45MzQ1Olx0XHRcdFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xuOTM0NjpcdFxuOTM0NzpcdFx0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuOTM0ODpcdFxuOTM0OTpcdFx0aWYgKCFkZXYgXHUwMDI2XHUwMDI2IHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjkzNTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzUxOlx0XG45MzUyOlx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWFkZF9zdGF0aW9uKVxuOTM1MzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG45MzU0Olx0XG45MzU1Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pXG45MzU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM1NzpcdFxuOTM1ODpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuOTM1OTpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MzYwOlx0XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcbjkzNjE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzNjI6XHRcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MzYzOlx0XHRcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXG45MzY0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzNjU6XHRcbjkzNjY6XHRcdFx0XHQvKiBPbmx5IE5NSSBzdGF0aW9ucyByZWNlaXZlIHRoZSBIVC9WSFQvSEUgY2FwYWJpbGl0aWVzICovXG45MzY3Olx0XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldIHx8XG45MzY4Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSB8fFxuOTM2OTpcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMDAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYDoKCioqRGlzc2VjdGluZyBubDgwMjExLmMmIzM5O3MgQ29yZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA5NTk1LTk2MjUgd2l0aGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBjb250ZXh0IOKAkyB3aGF0IHNwZWNpZmljIGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgaW4gdGhhdCBzZWN0aW9uPyBXaXRob3V0IGtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0JiMzOTtzIGhhcmQgdG8gYmUgcHJlY2lzZSwgYnV0IGJhc2VkIG9uIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgSSYjMzk7ZCB3YWdlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbmV0bGluayBtZXNzYWdlIGhhbmRsZXIsIHF1aXRlIHBvc3NpYmx5IHJlbGF0ZWQgdG8gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvciBzdGF0dXMgdXBkYXRlcy4KCk15IGd1dCB0ZWxscyBtZSB0aGlzIHNlZ21lbnQgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIE5MODAyMTEgYXR0cmlidXRlIG9yIGNvbW1hbmQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IG5ldGxpbmsgbWVzc2FnZSB0eXBlIHRoaXMgc2VjdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggKGUuZy4sIGBOTDgwMjExX0NNRF9TRVRfV0lQSFlgLCBgTkw4MDIxMV9DTURfR0VUX1NUQVRJT05gLCBvciBzb21ldGhpbmcgc2ltaWxhcikuCgpHaXZlbiB0aGUgcmFuZ2Ugb2YgbGluZXMsIGl0IG1pZ2h0IGJlIHBhcnNpbmcgc29tZSB1c2VyLXByb3ZpZGVkIGlucHV0LCB2YWxpZGF0aW5nIGl0LCBhbmQgdGhlbiBwb3NzaWJseSBpbnZva2luZyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIChtYXliZSBpbiB0aGUgbWFjODAyMTEgc3RhY2spIHRvIGVmZmVjdCBhIGNoYW5nZSBpbiB0aGUgd2lyZWxlc3MgZGV2aWNlJiMzOTtzIHN0YXRlLiBJJiMzOTttIGtlZXBpbmcgbXkgZXllIG91dCBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipBdHRyaWJ1dGUgUGFyc2luZzoqKiBBcmUgdGhlcmUgYW55IGNhbGxzIHRvIGBubGFfZ2V0XyooKWAgZnVuY3Rpb25zIHRvIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBuZXRsaW5rIG1lc3NhZ2U/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaW50ZWdlcnMsIHN0cmluZ3MsIG5lc3RlZCBhdHRyaWJ1dGVzPwoqICAgKipWYWxpZGF0aW9uOioqIFdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQgb24gdGhlIGluY29taW5nIGRhdGE/IEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIG9uIHJhbmdlcywgbGVuZ3RocywgYW5kIHZhbGlkIHZhbHVlcz8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGFyZSBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGhhbmRsZWQ/IEFyZSB0aGVyZSBlcnJvciBjb2RlcyBiZWluZyByZXR1cm5lZCB0byB0aGUgdXNlcj8KKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBhcmUgdXNlZCB0byBzdG9yZSB0aGUgcGFyc2VkIGRhdGEgKGUuZy4sIGBjZmc4MDIxMV93aXBoeWAsIGBpZWVlODAyMTFfdmlmYCwgZXRjLik/IEFyZSBhbnkgb2YgdGhvc2Ugc3RydWN0dXJlcyBiZWluZyB1cGRhdGVkPwoqICAgKipGdW5jdGlvbiBDYWxsczoqKiBJcyB0aGlzIHNlY3Rpb24gYSB3cmFwcGVyPyBXaGF0IGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiBkb2luZyB0aGUgaGVhdnkgbGlmdGluZyB0byBjaGFuZ2Ugc3RhdGUgb3IgY29uZmlndXJlIHRoZSBkZXZpY2U/IEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBgY2ZnODAyMTFfKmAgb3IgYGllZWU4MDIxMV8qYCBmdW5jdGlvbiBjYWxscy4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXNlIGxpbmVzIG9mZmVyIG1lIGFueSBpbnNpZ2h0IGludG8gcmVjZW50IGNoYW5nZXMsIGJ1Z3MsIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXTigJlzIGFsc28gcG9zc2libGUgaXTigJlzIHBhcnQgb2YgYSBuZXcgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHNlY3Rpb24gaXMgZG9pbmcuIERlcGVuZGluZyBvbiB3aGF0IGl0IGlzLCBpdCBjb3VsZCBiZSBhIGNsdWUgdG93YXJkIHNvbWUgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NTk1Olx0XHRcdCAqIGFkZGVkIGFzIGFzc29jaWF0ZWQgYW55d2F5IHNpbmNlIHRoaXMgd2FzIHRoZSByZXF1aXJlZCBkcml2ZXJcbjk1OTY6XHRcdFx0ICogYmVoYXZpb3VyIGJlZm9yZSBOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUgd2FzXG45NTk3Olx0XHRcdCAqIGludHJvZHVjZWQuXG45NTk4Olx0XHRcdCAqIEluIG9yZGVyIHRvIG5vdCBib3RoZXIgZHJpdmVycyB3aXRoIHRoaXMgcXVpcmsgaW4gdGhlIEFQSVxuOTU5OTpcdFx0XHQgKiBzZXQgdGhlIGZsYWdzIGluIGJvdGggdGhlIG1hc2sgYW5kIHNldCBmb3IgbmV3IHN0YXRpb25zIGluXG45NjAwOlx0XHRcdCAqIHRoaXMgY2FzZS5cbjk2MDE6XHRcdFx0ICovXG45NjAyOlx0XHRcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgYXV0aF9hc3NvYykpIHtcbjk2MDM6XHRcdFx0XHRwYXJhbXMuc3RhX2ZsYWdzX21hc2sgfD0gYXV0aF9hc3NvYztcbjk2MDQ6XHRcdFx0XHRwYXJhbXMuc3RhX2ZsYWdzX3NldCB8PSBhdXRoX2Fzc29jO1xuOTYwNTpcdFx0XHR9XG45NjA2Olx0XG45NjA3Olx0XHRcdC8qIG11c3QgYmUgbGFzdCBpbiBoZXJlIGZvciBlcnJvciBoYW5kbGluZyAqL1xuOTYwODpcdFx0XHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XG45NjA5Olx0XHRcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxuOTYxMDpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcbjk2MTE6XHRcdFx0YnJlYWs7XG45NjEyOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG45NjEzOlx0XHRcdC8qIGlnbm9yZSB1QVBTRCBkYXRhICovXG45NjE0Olx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcbjk2MTU6XHRcbjk2MTY6XHRcdFx0LyogYXNzb2NpYXRlZCBpcyBkaXNhbGxvd2VkICovXG45NjE3Olx0XHRcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpKVxuOTYxODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTYxOTpcdFx0XHQvKiBURExTIHBlZXJzIGNhbm5vdCBiZSBhZGRlZCAqL1xuOTYyMDpcdFx0XHRpZiAoKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIpKSB8fFxuOTYyMTpcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxuOTYyMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTYyMzpcdFx0XHRicmVhaztcbjk2MjQ6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbjk2MjU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcbjk2MjY6XHRcdFx0LyogaWdub3JlIHVBUFNEIGRhdGEgKi9cbjk2Mjc6XHRcdFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayBcdTAwMjY9IH5TVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEO1xuOTYyODpcdFxuOTYyOTpcdFx0XHQvKiB0aGVzZSBhcmUgZGlzYWxsb3dlZCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogVkxBTiBJbnRlcmZhY2UgQ2hlY2sgaW4gbmw4MDIxMSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBnZXRfdmxhbmAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gdmVyaWZ5IGlmIGEgVkxBTiBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBUCBpbnRlcmZhY2UuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY29tcGFyaW5nIHRoZSBWTEFOJiMzOTtzIGRldmljZSBhZGRyZXNzIChgdi0mZ3Q7ZGV2X2FkZHJgKSB3aXRoIHRoZSBBUCYjMzk7cyBkZXZpY2UgYWRkcmVzcyAoYGRldi0mZ3Q7ZGV2X2FkZHJgKSwgYW5kIGlmIHRoZXkgZG9uJiMzOTt0IG1hdGNoLCBpdCByZXR1cm5zIGFuIGVycm9yIChgLUVJTlZBTGApLiBJdCBzZWVtcyB0aGUgYGRldmAgdmFyaWFibGUgaXMgcGFzc2VkIGludG8gdGhlIGBnZXRfdmxhbigpYCBjYWxsLgoKVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGUgY29kZSB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBjb25zdWx0IHRoZSBndWlkZWxpbmVzLgoKUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGU6IGNhbiBpdCBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBubDgwMjExYCwgd2hpY2ggaXMgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBJIGtub3cgU3l6a2FsbGVyIGdlbmVyYXRlcyBuZXRsaW5rIG1lc3NhZ2VzIGV4dGVuc2l2ZWx5IGZvciBubDgwMjExLiBTcGVjaWZpY2FsbHkgdXNpbmcgYHN5el84MDIxMV9qb2luX2lic3NgLCB3aGljaCBpcyBhIG5ldGxpbmsgc29ja2V0IGNvbW1hbmQuIEFsc28sIGBtYWM4MDIxMV9od3NpbWAgY3JlYXRlcyB3aXBoeS9uZXRkZXYgaW5zdGFuY2VzIGZvciB3aXJlbGVzcy4gVGhpcyBjb25maXJtcyB0aGF0IG5sODAyMTEgaXMgcGVyZmVjdGx5IHJlYWNoYWJsZSBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgoKTm93LCBwb3NpdGl2ZSBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nOiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgdGhpcyBkZWZpbml0ZWx5IGRvZXMuIEl04oCZcyBjb3JlIG5ldHdvcmtpbmcuIEl0IGFsc28gY291bnRzIGFzIGEgZGVmZW5zaXZlIGNoZWNrICh0aGUgVkxBTiBpbnRlcmZhY2UgY2hlY2sgaXRzZWxmKS4gQWxzbywgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gdHJpZ2dlciBpdCB2aWEgYSBuZXRsaW5rIHNvY2tldCBjb21tYW5kLgoKTmVnYXRpdmUgY3JpdGVyaWE6IFRoaXMgaXNuJiMzOTt0IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBvciBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gVGhpcyBpcyBjbGVhcmx5IGFjY2Vzc2libGUgdmlhIHRoZSBuZXRsaW5rIHN1YnN5c3RlbS4gU28gdGhhdCYjMzk7cyBnb29kLgoKU28sICpJKiBjb25jbHVkZTogVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgZm9yIGBubDgwMjExLmNgIHRvIGVuc3VyZSBpdCYjMzk7cyBjb21waWxlZCwgYW5kIHRoZW4gSSYjMzk7bSBzZXQhIFRpbWUgdG8gc2VhcmNoIHRob3NlIE1ha2VmaWxlcyBhbmQgS2NvbmZpZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzA3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxubmV0L3dpcmVsZXNzL0tjb25maWc6Mzk6XHRib29sIFwmIzM0O25sODAyMTEgdGVzdG1vZGUgY29tbWFuZFwmIzM0O1xubmV0L3dpcmVsZXNzL0tjb25maWctNDAtXHRoZWxwXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo0MTpcdCAgVGhlIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZCBoZWxwcyBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2Vcbm5ldC93aXJlbGVzcy9LY29uZmlnLTQyLVx0ICBmYWN0b3J5IGNhbGlicmF0aW9uIG9yIHZhbGlkYXRpb24gdG9vbHMgZm9yIHdpcmVsZXNzIGNoaXBzLlxuLS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19XRVhUX1BSSVYpICYjNDM7PSB3ZXh0LXByaXYub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTgtXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6OTpjZmc4MDIxMS15ICYjNDM7PSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTAtY2ZnODAyMTEteSAmIzQzOz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cbi0tXG5uZXQvd2lyZWxlc3MvYXAuYy04LSNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxMS5oXHUwMDNlXG5uZXQvd2lyZWxlc3MvYXAuYzo5OiNpbmNsdWRlIFwmIzM0O25sODAyMTEuaFwmIzM0O1xubmV0L3dpcmVsZXNzL2FwLmMtMTAtI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL2FwLmM9MTQ9c3RhdGljIGludCBfX19jZmc4MDIxMV9zdG9wX2FwKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvYXAuYy00MS1cdFx0aWYgKG5vdGlmeSlcbm5ldC93aXJlbGVzcy9hcC5jOjQyOlx0XHRcdG5sODAyMTFfc2VuZF9hcF9zdG9wcGVkKHdkZXYsIGxpbmtfaWQpO1xubmV0L3dpcmVsZXNzL2FwLmMtNDMtXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0yMz12b2lkIGNmZzgwMjExX2NoYW5kZWZfY3JlYXRlKHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjQtXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjI1Olx0XHRcdCAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGUpXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTI2LXtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE3OD1zdGF0aWMgYm9vbCBjZmc4MDIxMV9lZG1nX2NoYW5kZWZfdmFsaWQoY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmMtMjYyLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoyNjM6aW50IG5sODAyMTFfY2hhbl93aWR0aF90b19taHooZW51bSBubDgwMjExX2NoYW5fd2lkdGggY2hhbl93aWR0aClcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjY0LXtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMwNS19XG5uZXQvd2lyZWxlc3MvY2hhbi5jOjMwNjpFWFBPUlRfU1lNQk9MKG5sODAyMTFfY2hhbl93aWR0aF90b19taHopO1xubmV0L3dpcmVsZXNzL2NoYW4uYy0zMDctXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTMwOD1zdGF0aWMgYm9vbCBjZmc4MDIxMV92YWxpZF9jZW50ZXJfZnJlcSh1MzIgY2VudGVyLFxubmV0L3dpcmVsZXNzL2NoYW4uYzozMDk6XHRcdFx0XHQgICAgICAgZW51bSBubDgwMjExX2NoYW5fd2lkdGggd2lkdGgpXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMxMC17XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMTctXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjMxODpcdGJ3ID0gbmw4MDIxMV9jaGFuX3dpZHRoX3RvX21oeih3aWR0aCk7XG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMxOS1cdGlmIChidyBcdTAwM2MgMClcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTQ4OT1pbnQgY2ZnODAyMTFfY2hhbmRlZl9wcmltYXJ5KGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqYyxcbm5ldC93aXJlbGVzcy9jaGFuLmM6NDkwOlx0XHRcdCAgICAgZW51bSBubDgwMjExX2NoYW5fd2lkdGggcHJpbWFyeV9jaGFuX3dpZHRoLFxubmV0L3dpcmVsZXNzL2NoYW4uYy00OTEtXHRcdFx0ICAgICB1MTYgKnB1bmN0dXJlZClcbm5ldC93aXJlbGVzcy9jaGFuLmMtNDkyLXtcbm5ldC93aXJlbGVzcy9jaGFuLmM6NDkzOlx0aW50IHByaV93aWR0aCA9IG5sODAyMTFfY2hhbl93aWR0aF90b19taHoocHJpbWFyeV9jaGFuX3dpZHRoKTtcbm5ldC93aXJlbGVzcy9jaGFuLmMtNDk0LVx0aW50IHdpZHRoID0gY2ZnODAyMTFfY2hhbmRlZl9nZXRfd2lkdGgoYyk7XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz03NDM9Y2hlY2tfY2hhbmRlZl9wcmltYXJ5X2NvbXBhdChjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMxLFxubmV0L3dpcmVsZXNzL2NoYW4uYy03NDQtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMyLFxubmV0L3dpcmVsZXNzL2NoYW4uYzo3NDU6XHRcdFx0ICAgICBlbnVtIG5sODAyMTFfY2hhbl93aWR0aCBwcmltYXJ5X2NoYW5fd2lkdGgpXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc0Ni17XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz04Njc9dm9pZCBjZmc4MDIxMV9zZXRfZGZzX3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTg2OC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL2NoYW4uYzo4Njk6XHRcdFx0ICAgIGVudW0gbmw4MDIxMV9kZnNfc3RhdGUgZGZzX3N0YXRlKVxubmV0L3dpcmVsZXNzL2NoYW4uYy04NzAte1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmM9OTE5PWNmZzgwMjExX2Rmc19wZXJtaXNzaXZlX2NoZWNrX3dkZXYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NoYW4uYzo5MjA6XHRcdFx0XHQgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSxcbm5ldC93aXJlbGVzcy9jaGFuLmMtOTIxLVx0XHRcdFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTk2MD1zdGF0aWMgYm9vbCBjZmc4MDIxMV9kZnNfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjk2MTpcdFx0XHRcdFx0IGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxubmV0L3dpcmVsZXNzL2NoYW4uYy05NjItXHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz05OTE9c3RhdGljIGludCBjZmc4MDIxMV9nZXRfY2hhbnNfZGZzX3JlcXVpcmVkKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTk5Mi1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL2NoYW4uYzo5OTM6XHRcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKVxubmV0L3dpcmVsZXNzL2NoYW4uYy05OTQte1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmM9MTAxNT1pbnQgY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTAxNi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL2NoYW4uYzoxMDE3Olx0XHRcdFx0ICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSlcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTAxOC17XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNjIyPUVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2hhbmRlZl91c2FibGUpO1xubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjIzLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNjI0OnN0YXRpYyBib29sIGNmZzgwMjExX2lyX3Blcm1pc3NpdmVfY2hlY2tfd2RldihlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTYyNS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTU9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE2OTY6XHRcdFx0XHRcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjk3LVx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNzM5PXN0YXRpYyBib29sIF9jZmc4MDIxMV9yZWdfY2FuX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzQwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE3NDE6XHRcdFx0XHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzQyLVx0XHRcdFx0ICAgICB1MzIgcHJvaGliaXRlZF9mbGFncyxcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxODojaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNi0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzojaW5jbHVkZSBcJiMzNDtubDgwMjExLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjk9aW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUwLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTE6XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTItXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzE9c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXHRcdFx0XHRjb250aW51ZTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTk1Olx0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5OC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTk5Olx0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDAtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDgtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIwOTpcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjEwLVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjEzLVx0XHRcdFx0Y29udGludWU7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxNDpcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTUtXHRcdFx0XHRcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz04Nzg9aW50IHdpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy04ODEtXHRpbnQgcmVzO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo4ODI6XHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xubmV0L3dpcmVsZXNzL2NvcmUuYy04ODMtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEyMTAtXHRjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHJkZXYpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoxMjExOlx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIxMi1cdHdpcGh5X3VubG9jayhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEyMjQtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjEyMjU6XHRcdG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KFx1MDAyNnJlcXVlc3QpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xMjI2LVx0fVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTMxNT12b2lkIHdpcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEzMzAtXHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoxMzMxOlx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMzMi1cdHJkZXYtXHUwMDNld2lwaHkucmVnaXN0ZXJlZCA9IGZhbHNlO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQzND1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQzLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQ0Olx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDUtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDc5LVx0d2lwaHlfd29ya19jYW5jZWwod2Rldi1cdTAwM2V3aXBoeSwgXHUwMDI2d2Rldi1cdTAwM2VjcW1fcnNzaV93b3JrKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ4MDpcdC8qIGRlbGV0ZWQgZnJvbSB0aGUgbGlzdCwgc28gY2FuJiMzOTt0IGJlIGZvdW5kIGZyb20gbmw4MDIxMSBhbnkgbW9yZSAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDgxLVx0Y3FtX2NvbmZpZyA9IHJjdV9hY2Nlc3NfcG9pbnRlcih3ZGV2LVx1MDAzZWNxbV9jb25maWcpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTUxOT12b2lkIGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTIwOlx0XHRcdCAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgaW50IG51bSlcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyMS17XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjc0PXZvaWQgY2ZnODAyMTFfcmVnaXN0ZXJfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjk3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjk4Olx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTktfVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MjA2Mz1zdGF0aWMgaW50IF9faW5pdCBjZmc4MDIxMV9pbml0KHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDc4LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMDc5Olx0ZXJyID0gbmw4MDIxMV9pbml0KCk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwODAtXHRpZiAoZXJyKVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMDgxOlx0XHRnb3RvIG91dF9mYWlsX25sODAyMTE7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwODItXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTAwLVx0ZGVidWdmc19yZW1vdmUoaWVlZTgwMjExX2RlYnVnZnNfZGlyKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjEwMTpcdG5sODAyMTFfZXhpdCgpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTAyOm91dF9mYWlsX25sODAyMTE6XG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMDMtXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MjExMz1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZnODAyMTFfZXhpdCh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjExNS1cdGRlYnVnZnNfcmVtb3ZlKGllZWU4MDIxMV9kZWJ1Z2ZzX2Rpcik7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxMTY6XHRubDgwMjExX2V4aXQoKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjExNy1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmNmZzgwMjExX25ldGRldl9ub3RpZmllcik7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD0zMTc9c3RydWN0IGNmZzgwMjExX2NxbV9jb25maWcge1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtMzIwLVx0czMyIGxhc3RfcnNzaV9ldmVudF92YWx1ZTtcbm5ldC93aXJlbGVzcy9jb3JlLmg6MzIxOlx0ZW51bSBubDgwMjExX2NxbV9yc3NpX3RocmVzaG9sZF9ldmVudCBsYXN0X3Jzc2lfZXZlbnRfdHlwZTtcbm5ldC93aXJlbGVzcy9jb3JlLmgtMzIyLVx0Ym9vbCB1c2VfcmFuZ2VfYXBpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NDc3PWludCBjZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaDo0Nzg6XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIG50eXBlLFxubmV0L3dpcmVsZXNzL2NvcmUuaC00NzktXHRcdFx0ICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTQ5NT12b2lkIGNmZzgwMjExX3NldF9kZnNfc3RhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDk2LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXG5uZXQvd2lyZWxlc3MvY29yZS5oOjQ5NzpcdFx0XHQgICAgZW51bSBubDgwMjExX2Rmc19zdGF0ZSBkZnNfc3RhdGUpO1xubmV0L3dpcmVsZXNzL2NvcmUuaC00OTgtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD01NTM9aW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NTQ6XHRcdFx0XHQgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsIHUzMiBiZWFjb25faW50KTtcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTU1LVxubmV0L3dpcmVsZXNzL2NvcmUuaD01NTY9dm9pZCBjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTU3Olx0XHRcdCAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgaW50IG51bSk7XG5uZXQvd2lyZWxlc3MvY29yZS5oLTU1OC1cbi0tXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5jPTg0PXN0YXRpYyBzc2l6ZV90IGh0NDBhbGxvd19tYXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5jLTkwLVx0dW5zaWduZWQgaW50IG9mZnNldCA9IDAsIGJ1Zl9zaXplID0gUEFHRV9TSVpFLCBpO1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuYzo5MTpcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XG5uZXQvd2lyZWxlc3MvZGVidWdmcy5jLTkyLVx0c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNC0jaW5jbHVkZSBcJiMzNDt3ZXh0LWNvbXBhdC5oXCYjMzQ7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE1OiNpbmNsdWRlIFwmIzM0O25sODAyMTEuaFwmIzM0O1xubmV0L3dpcmVsZXNzL2lic3MuYy0xNi0jaW5jbHVkZSBcJiMzNDtyZGV2LW9wcy5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xOT12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtNDItXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjQzOlx0bmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LVx1MDAzZXdpcGh5KSwgZGV2LCBic3MtXHUwMDNlYnNzaWQsXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTQ0LVx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz05MT1pbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMTEzLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTE0Olx0XHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xubmV0L3dpcmVsZXNzL2lic3MuYy0xMTUtXHRcdHUzMiBmbGFnO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MjE5PWludCBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0yMjItXHRzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNrID0gTlVMTDtcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjIzOlx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjI0LVx0aW50IGksIGVycjtcbi0tXG5uZXQvd2lyZWxlc3MvbWVzaC5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9tZXNoLmM6OTojaW5jbHVkZSBcJiMzNDtubDgwMjExLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9tZXNoLmMtMTAtI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL21lc2guYz0xMDI9aW50IF9fY2ZnODAyMTFfam9pbl9tZXNoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWVzaC5jLTEzOS1cdFx0LyogaWYgd2UgZG9uJiMzOTt0IGhhdmUgdGhhdCBlaXRoZXIsIHVzZSB0aGUgZmlyc3QgdXNhYmxlIGNoYW5uZWwgKi9cbm5ldC93aXJlbGVzcy9tZXNoLmM6MTQwOlx0XHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xubmV0L3dpcmVsZXNzL21lc2guYy0xNDEtXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxubmV0L3dpcmVsZXNzL21sbWUuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0xOS0jaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjA6I2luY2x1ZGUgXCYjMzQ7bmw4MDIxMS5oXCYjMzQ7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIxLSNpbmNsdWRlIFwmIzM0O3JkZXYtb3BzLmhcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI0PXZvaWQgY2ZnODAyMTFfcnhfYXNzb2NfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtOTYtXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjk3Olx0bmw4MDIxMV9zZW5kX3J4X2Fzc29jKHJkZXYsIGRldiwgZGF0YSk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTk4LVx0LyogdXBkYXRlIGN1cnJlbnRfYnNzIGV0Yy4sIGNvbnN1bWVzIHRoZSBic3MgcmVmZXJlbmNlICovXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU9c3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc19hdXRoKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTktXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMDpcdG5sODAyMTFfc2VuZF9yeF9hdXRoKHJkZXYsIHdkZXYtXHUwMDNlbmV0ZGV2LCBidWYsIGxlbiwgR0ZQX0tFUk5FTCk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMS1cdGNmZzgwMjExX3NtZV9yeF9hdXRoKHdkZXYsIGJ1ZiwgbGVuKTtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEyND1zdGF0aWMgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX2RlYXV0aChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTMzLVxubmV0L3dpcmVsZXNzL21sbWUuYzoxMzQ6XHRubDgwMjExX3NlbmRfZGVhdXRoKHJkZXYsIHdkZXYtXHUwMDNlbmV0ZGV2LCBidWYsIGxlbiwgcmVjb25uZWN0LCBHRlBfS0VSTkVMKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM1LVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MTQzPXN0YXRpYyB2b2lkIGNmZzgwMjExX3Byb2Nlc3NfZGlzYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE1Mi1cbm5ldC93aXJlbGVzcy9tbG1lLmM6MTUzOlx0bmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHJkZXYsIHdkZXYtXHUwMDNlbmV0ZGV2LCBidWYsIGxlbiwgcmVjb25uZWN0LFxubmV0L3dpcmVsZXNzL21sbWUuYy0xNTQtXHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0yMDE9dm9pZCBjZmc4MDIxMV9hdXRoX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yMDgtXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjIwOTpcdG5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQocmRldiwgZGV2LCBhZGRyLCBHRlBfS0VSTkVMKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjEwLVx0Y2ZnODAyMTFfc21lX2F1dGhfdGltZW91dCh3ZGV2KTtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTIxND12b2lkIGNmZzgwMjExX2Fzc29jX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIyNS1cdGlmIChkYXRhLVx1MDAzZXRpbWVvdXQpIHtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjI2Olx0XHRubDgwMjExX3NlbmRfYXNzb2NfdGltZW91dChyZGV2LCBkZXYsIGFkZHIsIEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL21sbWUuYy0yMjctXHRcdGNmZzgwMjExX3NtZV9hc3NvY190aW1lb3V0KHdkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbm5ldC93aXJlbGVzcy9tbG1lLmM6Mjc4Olx0XHRcdFx0ICBlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUsIGludCBrZXlfaWQsXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI3OS1cdFx0XHRcdCAgY29uc3QgdTggKnRzYywgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMjk5LVx0dHJhY2VfY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYyk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jOjMwMDpcdG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShyZGV2LCBkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYywgZ2ZwKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMzAxLX1cbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwMTA9Ym9vbCBjZmc4MDIxMV9yeF9tZ210X2V4dChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTA1MS1cdFx0LyogSW5kaWNhdGUgdGhlIHJlY2VpdmVkIEFjdGlvbiBmcmFtZSB0byB1c2VyIHNwYWNlICovXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEwNTI6XHRcdGlmIChubDgwMjExX3NlbmRfbWdtdChyZGV2LCB3ZGV2LCByZWctXHUwMDNlbmxwb3J0aWQsIGluZm8sXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEwNTMtXHRcdFx0XHQgICAgICBHRlBfQVRPTUlDKSlcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwNzM9dm9pZCBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTA4My1cdHVuc2lnbmVkIGxvbmcgdGltZV9kZnNfdXBkYXRlO1xubmV0L3dpcmVsZXNzL21sbWUuYzoxMDg0Olx0ZW51bSBubDgwMjExX3JhZGFyX2V2ZW50IHJhZGFyX2V2ZW50O1xubmV0L3dpcmVsZXNzL21sbWUuYy0xMDg1LVx0aW50IGJhbmRpZCwgaTtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExMjgtXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjExMjk6XHRcdFx0XHRubDgwMjExX3JhZGFyX25vdGlmeShyZGV2LCBcdTAwMjZjaGFuZGVmLFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTMwLVx0XHRcdFx0XHRcdCAgICAgcmFkYXJfZXZlbnQsIE5VTEwsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU1PXZvaWQgX19jZmc4MDIxMV9yYWRhcl9ldmVudChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE3NS1cbm5ldC93aXJlbGVzcy9tbG1lLmM6MTE3NjpcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIGNoYW5kZWYsIE5MODAyMTFfUkFEQVJfREVURUNURUQsIE5VTEwsIGdmcCk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExNzctXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTgzPXZvaWQgY2ZnODAyMTFfY2FjX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExODQtXHRcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMTg1Olx0XHRcdGVudW0gbmw4MDIxMV9yYWRhcl9ldmVudCBldmVudCwgZ2ZwX3QgZ2ZwLFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTg2LVx0XHRcdHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTIyNi1cbm5ldC93aXJlbGVzcy9tbG1lLmM6MTIyNzpcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIGNoYW5kZWYsIGV2ZW50LCBuZXRkZXYsIGdmcCk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMjgtfVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MTIzMj1fX2NmZzgwMjExX2JhY2tncm91bmRfY2FjX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMzQtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMzU6XHRcdFx0XHRlbnVtIG5sODAyMTFfcmFkYXJfZXZlbnQgZXZlbnQpXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMzYte1xuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTI2NS1cdG5ldGRldiA9IHdkZXYgPyB3ZGV2LVx1MDAzZW5ldGRldiA6IE5VTEw7XG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyNjY6XHRubDgwMjExX3JhZGFyX25vdGlmeShyZGV2LCBjaGFuZGVmLCBldmVudCwgbmV0ZGV2LCBHRlBfS0VSTkVMKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTI2Ny19XG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMzUzPXZvaWQgY2ZnODAyMTFfc3RvcF9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEzNjgtXHRcdGNmZzgwMjExX3NldF9jYWNfc3RhdGUod2lwaHksIFx1MDAyNmNoYW5kZWYsIGZhbHNlKTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTM2OTpcdFx0bmw4MDIxMV9yYWRhcl9ub3RpZnkocmRldiwgXHUwMDI2Y2hhbmRlZiwgTkw4MDIxMV9SQURBUl9DQUNfQUJPUlRFRCxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM3MC1cdFx0XHRcdCAgICAgd2Rldi1cdTAwM2VuZXRkZXYsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MTQxOT12b2lkIGNmZzgwMjExX21sb19yZWNvbmZfYWRkX2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE0NzQtXHR3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIHw9IGRhdGEtXHUwMDNlYWRkZWRfbGlua3M7XG5uZXQvd2lyZWxlc3MvbWxtZS5jOjE0NzU6XHRubDgwMjExX21sb19yZWNvbmZfYWRkX2RvbmUoZGV2LCBkYXRhKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTQ3Ni19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9pZWVlODAyMTEuaFx1MDAzZVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODojaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwLSNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMTojaW5jbHVkZSBcJiMzNDtubDgwMjExLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzItI2luY2x1ZGUgXCYjMzQ7cmVnLmhcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTM0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozNTpzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzYtXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDAtLyogdGhlIG5ldGxpbmsgZmFtaWx5ICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQxOnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmw4MDIxMV9mYW07XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00My0vKiBtdWx0aWNhc3QgZ3JvdXBzICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ0OmVudW0gbmw4MDIxMV9tdWx0aWNhc3RfZ3JvdXBzIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDUtXHROTDgwMjExX01DR1JQX0NPTkZJRyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NDpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWNncnBzW10gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1LVx0W05MODAyMTFfTUNHUlBfQ09ORklHXSA9IHsgLm5hbWUgPSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9DT05GSUcgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQzOD1zdGF0aWMgaW50IHZhbGlkYXRlX3Vocl9vcGVyYXRpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ0OS0vKiBwb2xpY3kgZm9yIHRoZSBhdHRyaWJ1dGVzICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ1MDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl07XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ1MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NTM6bmw4MDIxMV9mdG1fcmVzcG9uZGVyX3BvbGljeVtOTDgwMjExX0ZUTV9SRVNQX0FUVFJfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy00NTQtXHRbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0VOQUJMRURdID0geyAudHlwZSA9IE5MQV9GTEFHLCB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NjI6bmw4MDIxMV9wbXNyX2Z0bV9yZXFfYXR0cl9wb2xpY3lbTkw4MDIxMV9QTVNSX0ZUTV9SRVFfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2My1cdFtOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0FTQVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz00OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ5NjpubDgwMjExX3Btc3JfcmVxX2RhdGFfcG9saWN5W05MODAyMTFfUE1TUl9UWVBFX01BWCAmIzQzOyAxXSA9IHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDk3LVx0W05MODAyMTFfUE1TUl9UWVBFX0ZUTV0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0OTg6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9mdG1fcmVxX2F0dHJfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDk5LX07XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUwMjpubDgwMjExX3Btc3JfcmVxX2F0dHJfcG9saWN5W05MODAyMTFfUE1TUl9SRVFfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUwMy1cdFtOTDgwMjExX1BNU1JfUkVRX0FUVFJfREFUQV0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MDQ6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9yZXFfZGF0YV9wb2xpY3kpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MDUtXHRbTkw4MDIxMV9QTVNSX1JFUV9BVFRSX0dFVF9BUF9UU0ZdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUwOTpubDgwMjExX3Btc3JfcGVlcl9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEwLVx0W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfQUREUl0gPSBOTEFfUE9MSUNZX0VUSF9BRERSLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MTE6XHRbTkw4MDIxMV9QTVNSX1BFRVJfQVRUUl9DSEFOXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEyLVx0W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfUkVRXSA9XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUxMzpcdFx0TkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9wbXNyX3JlcV9hdHRyX3BvbGljeSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUxNC1cdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX1JFU1BdID0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTUxOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTIwOm5sODAyMTFfcG1zcl9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyMS1cdFtOTDgwMjExX1BNU1JfQVRUUl9NQVhfUEVFUlNdID0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyNS1cdFtOTDgwMjExX1BNU1JfQVRUUl9QRUVSU10gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MjY6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEX0FSUkFZKG5sODAyMTFfcG1zcl9wZWVyX2F0dHJfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTI3LX07XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDU9aGVfYnNzX2NvbG9yX3BvbGljeVtOTDgwMjExX0hFX0JTU19DT0xPUl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3R4YXR0cl9wb2xpY3lbTkw4MDIxMV9UWFJBVEVfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTItXHRbTkw4MDIxMV9UWFJBVEVfTEVHQUNZXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTU1LVx0XHRcdFx0LmxlbiA9IE5MODAyMTFfTUFYX1NVUFBfSFRfUkFURVMgfSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTU2Olx0W05MODAyMTFfVFhSQVRFX1ZIVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV90eHJhdGVfdmh0KSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1Ny1cdFtOTDgwMjExX1RYUkFURV9HSV0gPSB7IC50eXBlID0gTkxBX1U4IH0sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1ODpcdFtOTDgwMjExX1RYUkFURV9IRV0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG5sODAyMTFfdHhyYXRlX2hlKSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1OS1cdFtOTDgwMjExX1RYUkFURV9IRV9HSV0gPSAgTkxBX1BPTElDWV9SQU5HRShOTEFfVTgsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NjQtXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9SQVRFX0lORk9fSEVfNFhMVEYpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjU6XHRbTkw4MDIxMV9UWFJBVEVfRUhUXSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV90eHJhdGVfZWh0KSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2Ni1cdFtOTDgwMjExX1RYUkFURV9FSFRfR0ldID0gIE5MQV9QT0xJQ1lfUkFOR0UoTkxBX1U4LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NzY6bmw4MDIxMV90aWRfY29uZmlnX2F0dHJfcG9saWN5W05MODAyMTFfVElEX0NPTkZJR19BVFRSX01BWCAmIzQzOyAxXSA9IHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTc3LVx0W05MODAyMTFfVElEX0NPTkZJR19BVFRSX1ZJRl9TVVBQXSA9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTMtXHRbTkw4MDIxMV9USURfQ09ORklHX0FUVFJfVFhfUkFURV0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1OTQ6XHRcdFx0TkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV90eGF0dHJfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTk1LX07XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU5ODpubDgwMjExX2ZpbHNfZGlzY292ZXJ5X3BvbGljeVtOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTktXHRbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX0lOVF9NSU5dID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMTAwMDApLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2MDg6bmw4MDIxMV91bnNvbF9iY2FzdF9wcm9iZV9yZXNwX3BvbGljeVtOTDgwMjExX1VOU09MX0JDQVNUX1BST0JFX1JFU1BfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTYwOS1cdFtOTDgwMjExX1VOU09MX0JDQVNUX1BST0JFX1JFU1BfQVRUUl9JTlRdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMjApLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Mjc6bmw4MDIxMV9tYnNzaWRfY29uZmlnX3BvbGljeVtOTDgwMjExX01CU1NJRF9DT05GSUdfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTYyOC1cdFtOTDgwMjExX01CU1NJRF9DT05GSUdfQVRUUl9NQVhfSU5URVJGQUNFU10gPSBOTEFfUE9MSUNZX01JTihOTEFfVTgsIDIpLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Mzk6bmw4MDIxMV9zdGFfd21lX3BvbGljeVtOTDgwMjExX1NUQV9XTUVfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NDAtXHRbTkw4MDIxMV9TVEFfV01FX1VBUFNEX1FVRVVFU10gPSB7IC50eXBlID0gTkxBX1U4IH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY0NTpubDgwMjExX3MxZ19zaG9ydF9iZWFjb25bTkw4MDIxMV9TMUdfU0hPUlRfQkVBQ09OX0FUVFJfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NDYtXHRbTkw4MDIxMV9TMUdfU0hPUlRfQkVBQ09OX0FUVFJfSEVBRF0gPVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2NTU6bmw4MDIxMV9uYW5fYmFuZF9jb25mX3BvbGljeVtOTDgwMjExX05BTl9CQU5EX0NPTkZfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY1Ni1cdFtOTDgwMjExX05BTl9CQU5EX0NPTkZfQkFORF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTgsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY2NjpubDgwMjExX25hbl9wZWVyX21hcF9wb2xpY3lbTkw4MDIxMV9OQU5fUEVFUl9NQVBfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY2Ny1cdFtOTDgwMjExX05BTl9QRUVSX01BUF9BVFRSX01BUF9JRF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDE1KSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjczOm5sODAyMTFfbmFuX2NvbmZfcG9saWN5W05MODAyMTFfTkFOX0NPTkZfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY3NC1cdFtOTDgwMjExX05BTl9DT05GX0NMVVNURVJfSURdID1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY4Mi1cdFtOTDgwMjExX05BTl9DT05GX0JBTkRfQ09ORklHU10gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2ODM6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEX0FSUkFZKG5sODAyMTFfbmFuX2JhbmRfY29uZl9wb2xpY3kpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02ODQtXHRbTkw4MDIxMV9OQU5fQ09ORl9TQ0FOX1BFUklPRF0gPSB7IC50eXBlID0gTkxBX1UxNiB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjkwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2OTE6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmw4MDIxMV9wdW5jdF9iaXRtYXBfcmFuZ2UgPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY5Mi1cdC5taW4gPSAwLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9Njk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHFfcmFuZ2UgPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02OTktXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjcwMDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTcwMS1cdFswXSA9IHsgLnN0cmljdF9zdGFydF90eXBlID0gTkw4MDIxMV9BVFRSX0hFX09CU1NfUEQgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgwNC1cdFtOTDgwMjExX0FUVFJfU1RBX0ZMQUdTMl0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4MDU6XHRcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOX1dBUk4oc2l6ZW9mKHN0cnVjdCBubDgwMjExX3N0YV9mbGFnX3VwZGF0ZSkpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04MDYtXHRbTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg2MS1cdFtOTDgwMjExX0FUVFJfUk9BTV9TVVBQT1JUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4NjI6XHRbTkw4MDIxMV9BVFRSX1NUQV9XTUVdID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9zdGFfd21lX3BvbGljeSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg2My1cdFtOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9NQVRDSF0gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTU5LVx0W05MODAyMTFfQVRUUl9CQU5EU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5NjA6XHRbTkw4MDIxMV9BVFRSX05BTl9DT05GSUddID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9uYW5fY29uZl9wb2xpY3kpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05NjEtXHRbTkw4MDIxMV9BVFRSX05BTl9GVU5DXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05NjgtXHRbTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fUlNTSV9BREpVU1RdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5Njk6XHRcdC5sZW4gPSBzaXplb2Yoc3RydWN0IG5sODAyMTFfYnNzX3NlbGVjdF9yc3NpX2FkanVzdClcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTcwLVx0fSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk5MS1cdFtOTDgwMjExX0FUVFJfRlRNX1JFU1BPTkRFUl0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5OTI6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfZnRtX3Jlc3BvbmRlcl9wb2xpY3kpLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGNmZzgwMjExIEtjb25maWcqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBjZmc4MDIxMWAgS2NvbmZpZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGljdGF0ZSB0aGUgY2FwYWJpbGl0aWVzIGFuZCBmZWF0dXJlcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBkYXRhYmFzZSBhbmQgZHJpdmVyIG1vZGVsLCBlbnN1cmluZyB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIG92ZXJseSByZXN0cmljdGl2ZSBkZWZhdWx0cy4gQXJlIHRoZXJlIGFueSBuZXcgYWRkaXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZmVhdHVyZSBzZXRzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgd2lyZWxlc3Mgc3RhbmRhcmRzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIGlzIGFibGUgdG8gY3VzdG9taXplIHRoZSB3aXJlbGVzcyBlbnZpcm9ubWVudCBpbiB0aGUga2VybmVsIHdpdGggdGhlc2UgY29uZmlndXJhdGlvbnMuIEVzc2VudGlhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBhbnl0aGluZyB0aGF0JiMzOTtzIGNoYW5nZWQgZnVuZGFtZW50YWxseSwgYnJva2VuLCBvciBuZWVkcyBvcHRpbWl6YXRpb24uIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgcG9zc2liaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgdGhhdCB0aGUgS2NvbmZpZyBpbXBvc2VzIG9uIHRoZSBjb3JlIG9mIG91ciB3aXJlbGVzcyBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1vZHVsZSBDb25zdHJ1Y3Rpb24gLSBDRkc4MDIxMSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgY2ZnODAyMTFgIGdldHMgYnVpbHQgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBDRkc4MDIxMWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIHRoYXQmIzM5O3Mgd2hhdCBjb250cm9scyB0aGUgY3JlYXRpb24gb2YgYG5ldC93aXJlbGVzcy9jZmc4MDIxMS5rb2AsIG9yLCBvZiBjb3Vyc2UsIGlmIGl0JiMzOTtzIGJha2VkIGludG8gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcywgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL01ha2VmaWxlYC4KClllcCwgdGhlcmUgaXQgaXMuIFRoZSBNYWtlZmlsZSBzaG93cyBgY2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub2AsIHByb3ZpbmcgdGhhdCBgbmw4MDIxMS5vYCBpcyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBvZiB0aGUgYGNmZzgwMjExYCBtb2R1bGUuIEFuZCwgYXMgZXhwZWN0ZWQsIGBvYmotJChDT05GSUdfQ0ZHODAyMTEpICYjNDM7PSBjZmc4MDIxMS5vYCBjb25maXJtcyB0aGF0IHRoZSB3aG9sZSBgY2ZnODAyMTEub2Agb2JqZWN0IGlzIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ0ZHODAyMTFgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gTm90aGluZyBzdXJwcmlzaW5nIGhlcmUsIGJ1dCBnb29kIHRvIGhhdmUgYSBzb2xpZCB2ZXJpZmljYXRpb24gb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbiAgIDM6XHRvYmoteSAmIzQzOz0gdGVzdHMvXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgJiM0Mzs9IHdleHQtY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgJiM0Mzs9IHdleHQtcHJpdi5vXG4gICA4Olx0XG4gICA5Olx0Y2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xuICAxMDpcdGNmZzgwMjExLXkgJiM0Mzs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXG4gIDExOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWljaGFlbC1taWMubyBwbXNyLm9cbiAgMTI6XHRjZmc4MDIxMS0kKENPTkZJR19PRikgJiM0Mzs9IG9mLm9cbiAgMTM6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG4gIDE0Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xuICAxNTpcdFxuICAxNjpcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG4gIDE3Olx0XG4gIDE4Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5vXG4gIDE5Olx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxuICAyMDpcdGNmZzgwMjExLXkgJiM0Mzs9IGV4dHJhLWNlcnRzLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdFxuICAyMzpcdCQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4gIDI0Olx0XHRAJChrZWNobykgXCYjMzQ7ICBHRU4gICAgICRAXCYjMzQ7XG4gIDI1Olx0XHQkKFEpKGVjaG8gJiMzOTsjaW5jbHVkZSBcJiMzNDtyZWcuaFwmIzM0OyYjMzk7OyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE0NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBpZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwaWVjZSBoZXJlIGlzIGBDRkc4MDIxMWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuIE5vdywgaWYgSSYjMzk7bSBzaW11bGF0aW5nIHdpcmVsZXNzIGRldmljZXMsIHdoaWNoIEkgb2Z0ZW4gZG8gZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LCB0aGUgcmVhbCBkcml2ZXIgbGlrZWx5IGJlY29tZXMgZWl0aGVyIGBNQUM4MDIxMV9IV1NJTWAgb3IgcG90ZW50aWFsbHkganVzdCB1c2luZyBgTkw4MDIxMWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhpcyBieSBkaWdnaW5nIGRlZXBlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFfSFdTSU1gLCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IEtjb25maWcgZmlsZToKCioqSW52ZXN0aWdhdGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCBJIG1pZ2h0IGZpbmQgd2l0aGluIGEgS2NvbmZpZyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LiBJdCYjMzk7cyBsaWtlbHkgZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXJzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkZlYXR1cmUgRmxhZ3M6KiogQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBmb3IgdmlydHVhbCB3aXJlbGVzcyBpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgYnVpbGQgdGltZT8gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBvcHRpb24uCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZXNlIHZpcnR1YWwgZHJpdmVycz8gV2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgdGhlc2UgZHJpdmVycyBiZWNvbWUgYXZhaWxhYmxlPyBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcyBvbiBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUgb3IgcGVyaGFwcyBzcGVjaWZpYyBoYXJkd2FyZS4KKiAgICoqRGVmYXVsdHM6KiogV2hhdCBhcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZXNlIG9wdGlvbnM/IEFyZSB0aGV5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBieSBkZWZhdWx0LCBvciBhcmUgdGhleSBtb2R1bGFyaXplZD8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIG91dCBvZiB0aGUgYm94LgoqICAgKipIZWxwIFRleHQ6KiogSSBob3BlIHRoZSBLY29uZmlnIGZpbGUgaGFzIHdlbGwtd3JpdHRlbiBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBvcHRpb25zIGFuZCBleHBsYWluIHRoZWlyIHB1cnBvc2UuIFRoZSBjbGFyaXR5IG9mIHRoZSBoZWxwIHRleHQgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZy4KKiAgICoqQXJjaGl0ZWN0dXJlLVNwZWNpZmljIE9wdGlvbnM6KiogSXMgdGhlcmUgYW55dGhpbmcgY29uZGl0aW9uYWw/IEFyZSBhbnkgb2YgdGhlIG9wdGlvbnMgdGllZCB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIGhhcmR3YXJlIHBsYXRmb3Jtcz8gSSB3aWxsIGFsc28gbG9vayBmb3IgaGludHMgb2YgaG93IGl0IGRpZmZlcnMuCiogICAqKkRvY3VtZW50YXRpb246KiogTXkgaG9wZSBpcyB0aGF0IGl0IHJlZmVyZW5jZXMgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3Igb3RoZXIgcmVsYXRlZCBmaWxlcy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIHRoaXMgaW4gdGhlIHdpZGVyIGNvbnRleHQgb2YgdGhpcyB3aXJlbGVzcyBjb25maWd1cmF0aW9uLgoKRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBjdXN0b21pemF0aW9uLCBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjIwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBnb2VzIGxpa2UgdGhpczogZmlyc3QsIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBnZXRfdmxhbmAsIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgYSBzdGF0aWMgZnVuY3Rpb24gcmVzaWRpbmcgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBHb29kLCBnb3QgdGhhdC4gTm93LCBhbG9uZ3NpZGUgdGhhdCwgSSBzZWUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYXJlIGFsc28gaW52b2x2ZWQuCgpNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgaW5kZWVkIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBubDgwMjExLmNgIGFzIEkgc3VzcGVjdC4gQWZ0ZXIgdGhpcywgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLiBTbyBJJiMzOTtsbCBpbW1lZGlhdGVseSBzaGlmdCB0byB0cmFjaW5nIHRoZWlyIHJlZmVyZW5jZXMgd2l0aGluIHRoZSBzYW1lIGZpbGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gVGhpcyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluc2lnaHRzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCB3aWxsIGJyZWFrIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX3NldF9zdGF0aW9ufG5sODAyMTFfbmV3X3N0YXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9OTA1MT1zdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX2NoYW5uZWxfaW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTA3Ni1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTA3NzpzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb25fdGRscyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MDc4LVx0XHRcdFx0ICAgIHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxMzE9c3RhdGljIGludCBubDgwMjExX3BhcnNlX3N0YV90eHBvd2VyX3NldHRpbmcoc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNjMtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjkxNjQ6c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNjUte1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMwMi1cdC8qIEluY2x1ZGUgcGFyYW1ldGVycyBmb3IgVERMUyBwZWVyICh3aWxsIGNoZWNrIGxhdGVyKSAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzAzOlx0ZXJyID0gbmw4MDIxMV9zZXRfc3RhdGlvbl90ZGxzKGluZm8sIFx1MDAyNnBhcmFtcyk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDQtXHRpZiAoZXJyKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMzNS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTMzNjpzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMzNy17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTczOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzNy1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTgzODpcdFx0LmRvaXQgPSBubDgwMjExX3NldF9zdGF0aW9uLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzOS1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5ODQ0LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5ODQ1Olx0XHQuZG9pdCA9IG5sODAyMTFfbmV3X3N0YXRpb24sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5ODQ2LVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM5OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBWaXNpYmlsaXR5IGluIGNmZzgwMjExKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGNmZzgwMjExYCBoYW5kbGVzIHN0YXRpb24gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBhbmQgYE5MODAyMTFfQ01EX05FV19TVEFUSU9OYC4gSSBzZWUgdGhhdCBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucywgdGhlIGBkb2l0YCBtZXRob2RzIHdpdGhpbiBgZ2VubF9vcHNgLCBmb3IgdGhlc2UgY29tbWFuZHMuIFRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuCgpBbmQgY3J1Y2lhbGx5LCBgZ2V0X3ZsYW5gIGlzIGRpcmVjdGx5IGNhbGxlZCBmcm9tICpib3RoKiBvZiB0aG9zZSBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHNvIGBnZXRfdmxhbmAgaXMgaW1tZWRpYXRlbHkgcmVsYXRlZC4KCk5vdywgdGhvc2UgYG5sODAyMTFfKmAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBgc3RhdGljYCBpbiBgbmw4MDIxMS5jYCwgSSBiZWxpZXZlLCB3aGljaCB1c3VhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIGxvY2FsIHRvIHRoYXQgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgYmVjYXVzZSB0aGV5IGFyZSBleHBvc2VkIHRocm91Z2ggdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UsIHRoZXkgKmFyZSogZW50cnkgcG9pbnRzLiBUaGVyZWZvcmUsIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFyZSBkZWZpbml0ZWx5IHByZXNlbnQgYW5kIHZpc2libGUgaW4gdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUsIHdoZXRoZXIgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHZtbGludXhgIG9yIGBjZmc4MDIxMS5rb2AuIEkmIzM5O20gY2VydGFpbiBvZiB0aGF0LgoKVGhlIGludGVyZXN0aW5nIHF1ZXN0aW9uIGlzIGBnZXRfdmxhbmAuIEl0ICptaWdodCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIHdoaWNoIHdvdWxkIG1lYW4gaXQgd291bGRuJiMzOTt0IGhhdmUgaXRzIG93biBzeW1ib2wuIFNvLCBpbmNsdWRpbmcgYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGEgdmVyeSBwcmVjaXNlIHdheSB0byBpZGVudGlmeSByZWxhdGVkIGNvZGUuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdG8gc2VlIGlmIGBnZXRfdmxhbmAgaXMgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBHb3R0YSBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcYmdldF92bGFuXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTg5NjY9RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTcxLSAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTcyOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3Olx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA4LVx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz05MzM2PXN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwNy1cdFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk2MDg6XHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwOS1cdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTQ0CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDk0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVkxBTiBJbnRlcmZhY2UgVmFsaWRhdGlvbiBpbiBubDgwMjExIFN0YXRpb24gTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW4gYGdldF92bGFuKClgLCBhbmQgaXQmIzM5O3MgYSBuZXcgY2hlY2s6IGVuc3VyaW5nIHRoZSBWTEFOIGludGVyZmFjZSBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgYnkgY29tcGFyaW5nIEV0aGVybmV0IGFkZHJlc3Nlcy4gUHJldmlvdXNseSwgaXQgb25seSBjaGVja2VkIGlmIGl0IHdhcyBhbiBBUC1yZWxhdGVkIGludGVyZmFjZSBhbmQgaWYgaXQgd2FzIHJ1bm5pbmcuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGFkZGl0aW9uIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IHdpdGhpbiB0aGUgYG5sODAyMTFgIGNvbnRleHQuCgpOb3csIGNvbnNpZGVyaW5nIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgYG5sODAyMTFgIG5ldGxpbmsgaGFuZGxlcnMgKGBubDgwMjExX3NldF9zdGF0aW9uYCwgYG5sODAyMTFfbmV3X3N0YXRpb25gKSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB0aGV5IHBhc3MgdGhlIGBkZXZgIHBhcmFtZXRlciB0byBgZ2V0X3ZsYW4oKWAuIEJlY2F1c2UgdGhlIHZhbGlkYXRpb24gbG9naWMgYW5kIGVycm9yIGhhbmRsaW5nIGhhdmUgY2hhbmdlZCBpbiBob3cgVkxBTiBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsuCgpUbyBwcmVwYXJlIGZvciBmdXp6aW5nLCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gQmFzZWQgb24gbXkgcXVpY2sgYW5hbHlzaXMsIGl0IGFwcGVhcnMgdGhhdCB0aGUgYENGRzgwMjExYCBjb25maWd1cmF0aW9uLCB3aGljaCBjb21waWxlcyBgbmw4MDIxMS5jYCwgaXMgZnVuZGFtZW50YWwuIEl0IGxvb2tzIGxpa2UgYE1BQzgwMjExX0hXU0lNYCB3aWxsIGFsc28gYmUgcmVxdWlyZWQgYmVjYXVzZSBpdCBlbmFibGVzIHZpcnR1YWwgV2ktRmkgZGV2aWNlcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyB2aXRhbCBmb3IgcmVhY2hpbmcgdGhlIHN0YXRpb24gb3BlcmF0aW9ucy4KCk15IGZvY3VzIHN5bWJvbHMgYXJlIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZDogYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIC0gdGhvc2UgYXJlIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMuCgpJbiBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUuCiogICAqKkZvY3VzIFN5bWJvbHM6KiogYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuCiogICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLgoqICAgKipSZWFzb25pbmc6KiogVGhpcyBwYXRjaCBtb2RpZmllcyBWTEFOIGludGVyZmFjZSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgd2lyZWxlc3MgbmV0bGluayBpbnRlcmZhY2UgKGBubDgwMjExYCkuIEl0IGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHVzZXIgc3BhY2UgbmV0bGluayBzb2NrZXRzLCBlc3BlY2lhbGx5IHdpdGggYG1hYzgwMjExX2h3c2ltYC4gRnV6emluZyB0aGlzIG5ldyB2YWxpZGF0aW9uIHN0ZXAgY291bGQgaGVscCBpZGVudGlmeSBwb3RlbnRpYWwgaW52YWxpZCBzdGF0ZSBoYW5kbGluZyBvciByZWdyZXNzaW9ucyBpbiBWTEFOIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF92bGFuJiMzNDssCiAgICAmIzM0O25sODAyMTFfc2V0X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgYSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSB0YXJnZXQgQVAvUDJQX0dPIGludGVyZmFjZSB3aGVuIHNldHRpbmcgb3IgYWRkaW5nIGEgc3RhdGlvbiBpbiBubDgwMjExLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHJlcXVlc3QgaGFuZGxpbmcgaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsL3NpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X3ZsYW4mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIHRhcmdldCBBUC9QMlBfR08gaW50ZXJmYWNlIHdoZW4gc2V0dGluZyBvciBhZGRpbmcgYSBzdGF0aW9uIGluIG5sODAyMTEuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgcmVxdWVzdCBoYW5kbGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwvc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVx1MDAzZWRldl9hZGRyYCBtYXRjaGVzIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHVzaW5nIGBldGhlcl9hZGRyX2VxdWFsKClgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgbGVuZ3RocyBvciBidWZmZXIgYm91bmRzLiBUaGUgYGRldl9hZGRyYCBmaWVsZHMgYmVpbmcgY29tcGFyZWQgYmVsb25nIHRvIGV4aXN0aW5nLCByZWdpc3RlcmVkIG5ldHdvcmsgZGV2aWNlcyAoYG5ldF9kZXZpY2VgKSB3aGljaCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgcG9pbnRlciBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIE5VTEwgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0ODBjZGU4M2IwODcxMTJkZGFhOGQ0MTgyNzEyM2YxNTUyZDJkNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwODo0NToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDg5OWI2Mzc0YzU1MDYuLjBmMzM4ODMxMmNjZDggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtODk2NiwxMCAmIzQzOzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksCiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTsKIAogLyoKLSAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nIGFuZCBvbiB0aGUgcmlnaHQgd2lwaHkuCiYjNDM7ICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeQomIzQzOyAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLgogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQomIzQzOwkJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dOwogCXN0cnVjdCBuZXRfZGV2aWNlICp2OwpAQCAtODk5OSw2ICYjNDM7OTAwMSwxMiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3I7CiAJfQogCiYjNDM7CS8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi8KJiM0MzsJaWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi0mZ3Q7ZGV2X2FkZHIsIGRldi0mZ3Q7ZGV2X2FkZHIpKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwogCXJldHVybiB2OwogIGVycm9yOgogCWRldl9wdXQodik7CkBAIC05Mjk2LDcgJiM0Mzs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7CiYjNDM7CXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTsKIAlpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSkKIAkJcmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pOwogCkBAIC05NTk3LDcgJiM0Mzs5NjA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAogCQkvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi8KLQkJcGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTsKJiM0MzsJCXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTsKIAkJaWYgKElTX0VSUihwYXJhbXMudmxhbikpCiAJCQlyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7CiAJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdpcmVsZXNzIFN1YnN5c3RlbSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLCB3aGljaCwgYXMgd2Uga25vdywgaXMgdGhlIGNvcmUgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiBWTEFOIG1hbmFnZW1lbnQgaW4gdGhlIHdpcmVsZXNzIGNvbnRleHQuIFRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgZ2V0X3ZsYW4oKWAgZnVuY3Rpb24uIEkmIzM5O20gc2VlaW5nIGEgbmV3IHBhcmFtZXRlciwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgLCBiZWluZyBhZGRlZCB0byBgZ2V0X3ZsYW4oKWAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBhc3NvY2lhdGUgVkxBTnMgd2l0aCBzcGVjaWZpYyBuZXR3b3JrIGRldmljZXMsIGEgY29tbW9uIGFwcHJvYWNoIGZvciB3aXJlbGVzcyBBUCBjb25maWd1cmF0aW9ucy4KCkRpdmluZyBpbnRvIHRoZSBjb2RlIHNuaXBwZXQsIHRoYXQgYGlmYCBzdGF0ZW1lbnQgd2l0aGluIGBnZXRfdmxhbigpYCBpcyBrZXk6IGl0JiMzOTtzIHBlcmZvcm1pbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIFZMQU4gaW50ZXJmYWNlIChgdi0mZ3Q7ZGV2X2FkZHJgKSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKGBkZXYtJmd0O2Rldl9hZGRyYCkuIElmIGl0IGRvZXNuJiMzOTt0IG1hdGNoLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHN0ZXAuIEl0IG1ha2VzIHNlbnNlOyB3ZSB3b3VsZG4mIzM5O3Qgd2FudCB0byBhbGxvdyBWTEFOcyB0byBiZSBpbmNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIHdyb25nIHdpcmVsZXNzIGludGVyZmFjZS4gVGhpcyBpcyBhIGNvbW1vbiBzZWN1cml0eSBtZWFzdXJlIGZvciBzZXBhcmF0aW5nIHVzZXIgbmV0d29ya3Mgb24gdGhlIHNhbWUgcmFkaW8uCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIHRoZSBjYWxscyB0byBgZ2V0X3ZsYW4oKWAgd2l0aGluIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBUaGV5JiMzOTtyZSBub3cgcGFzc2luZyB0aGUgbmV0d29yayBkZXZpY2UgKGBkZXZgKSBhcyBhbiBhcmd1bWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aG9zZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiB0aGUgYnJvYWRlciB3aXJlbGVzcyBzdGFjay4gVGhleSBhcmUgcHJvYmFibHkgcmVsYXRlZCB0byBzZXR0aW5nIHVwIGFuZCBhZGRpbmcgd2lyZWxlc3Mgc3RhdGlvbnMuIEdldHRpbmcgdGhlIFZMQU4gaW5mb3JtYXRpb24gaXMgbW9zdCBsaWtlbHkgYWJvdXQgYXNzb2NpYXRpbmcgdGhlIHN0YXRpb24gd2l0aCBhIFZMQU4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBkZXZgIHBhcmFtZXRlciBnZXRzIHBvcHVsYXRlZCBpbiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4OTY1Olx0fVxuODk2NjpcdEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UpO1xuODk2NzpcdFxuODk2ODpcdC8qXG44OTY5Olx0ICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeVxuODk3MDpcdCAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxuODk3MTpcdCAqL1xuODk3MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbjg5NzM6XHRcdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbjg5NzQ6XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG44OTc1Olx0e1xuODk3NjpcdFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl07XG44OTc3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqdjtcbjg5Nzg6XHRcdGludCByZXQ7XG44OTc5Olx0XG44OTgwOlx0XHRpZiAoIXZsYW5hdHRyKVxuODk4MTpcdFx0XHRyZXR1cm4gTlVMTDtcbjg5ODI6XHRcbjg5ODM6XHRcdHYgPSBkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksIG5sYV9nZXRfdTMyKHZsYW5hdHRyKSk7XG44OTg0Olx0XHRpZiAoIXYpXG44OTg1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuODk4NjpcdFxuODk4NzpcdFx0aWYgKCF2LVx1MDAzZWllZWU4MDIxMV9wdHIgfHwgdi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZXdpcGh5ICE9IFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpIHtcbjg5ODg6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjg5ODk6XHRcdFx0Z290byBlcnJvcjtcbjg5OTA6XHRcdH1cbjg5OTE6XHRcbjg5OTI6XHRcdGlmICh2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gXHUwMDI2XHUwMDI2XG44OTkzOlx0XHQgICAgdi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCBcdTAwMjZcdTAwMjZcbjg5OTQ6XHRcdCAgICB2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykge1xuODk5NTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuODk5NjpcdFx0XHRnb3RvIGVycm9yO1xuODk5NzpcdFx0fVxuODk5ODpcdFxuODk5OTpcdFx0aWYgKCFuZXRpZl9ydW5uaW5nKHYpKSB7XG45MDAwOlx0XHRcdHJldCA9IC1FTkVURE9XTjtcbjkwMDE6XHRcdFx0Z290byBlcnJvcjtcbjkwMDI6XHRcdH1cbjkwMDM6XHRcbjkwMDQ6XHRcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cbjkwMDU6XHRcdGlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbjkwMDY6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjkwMDc6XHRcdFx0Z290byBlcnJvcjtcbjkwMDg6XHRcdH1cbjkwMDk6XHRcbjkwMTA6XHRcdHJldHVybiB2O1xuOTAxMTpcdCBlcnJvcjpcbjkwMTI6XHRcdGRldl9wdXQodik7XG45MDEzOlx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuOTAxNDpcdH1cbjkwMTU6XHRcbjkwMTY6XHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX3dtZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuOTAxNzpcdFx0XHRcdFx0IHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcbjkwMTg6XHR7XG45MDE5Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX1NUQV9XTUVfTUFYICYjNDM7IDFdO1xuOTAyMDpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuOTAyMTpcdFx0aW50IGVycjtcbjkwMjI6XHRcbjkwMjM6XHRcdC8qIHBhcnNlIFdNRSBhdHRyaWJ1dGVzIGlmIHByZXNlbnQgKi9cbjkwMjQ6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1dNRV0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gd2hlcmUgSSYjMzk7ZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgYGRldmAgaW4gbmw4MDIxMSBTdGF0aW9uIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCB1c2FnZSBvZiB0aGUgYGRldmAgdmFyaWFibGUgd2l0aGluIHRoZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbnMuIEJvdGggYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIHN0YXRpb24gZW50cmllcyBpbiBubDgwMjExLiBUaGlzIG1lYW5zIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcG9pbnRzIHdoZXJlIGNoYW5nZXMgdG8gc3RhdGlvbnMgZ2V0IHJlZ2lzdGVyZWQsIGFkZGVkLCBhbmQgbWFuaXB1bGF0ZWQuCgpNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZm9sbG93IHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4gSXMgaXQgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50PyBJcyBpdCBhbGxvY2F0ZWQsIG9yIGRlcml2ZWQgZnJvbSBhbm90aGVyIHN0cnVjdHVyZT8gQXJlIHRoZXJlIGdsb2JhbCB2YXJpYWJsZXM/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSB3aGVyZSBgZGV2YCBpcyBpbml0aWFsbHkgaW50cm9kdWNlZCBpbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBhbmQgdGhlbiB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBkZWJ1Z2dpbmcgb3IgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIOKAkyBwcm9iYWJseSBgZ3JlcGAsIGBjc2NvcGVgLCBgY3RhZ3NgLCBhbmQvb3IgbXkgSURFJiMzOTtzICYjMzQ7ZmluZCBkZWZpbml0aW9uJiMzNDsgb3IgJiMzNDtmaW5kIHVzYWdlcyYjMzQ7IGZlYXR1cmVzIOKAkyB0byBlZmZpY2llbnRseSB0cmFjayBpdHMgcHJvdmVuYW5jZS4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgYGRldmAgaXMgYmVpbmcgdXNlZCBhbmQgbW9kaWZpZWQsIGFuZCBieSB3aGF0LiBBcmUgdGhlIGNhbGxzIHVzaW5nIGBkZXZgIHB1cmVseSByZWFkaW5nIGl0cyB2YWx1ZSwgb3IgaXMgYGRldmAgYmVpbmcgd3JpdHRlbiB0bz8gSWYgd3JpdGVzLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIG1pZ2h0IGFsc28gYmUgbG9va2luZyBhdCBhc3NvY2lhdGVkIHN0cnVjdHMgb3IgZGF0YSBidWZmZXJzIHRoYXQgYXJlIG1vZGlmaWVkIHdoZW4gYGRldmAgY2hhbmdlcy4gSXMgaXQgYSBwb2ludGVyIHRvIGEgZGV2aWNlIHN0cnVjdHVyZSwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldGxpbmsgc29ja2V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCkRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgYGRldmAgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHBvaW50ZXIgdG8gYSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUsIHRvIGFuIGluZGV4IGludG8gYW4gYXJyYXksIHRvIGFuIGlkZW50aWZpZXIgZm9yIGFuIHVuZGVybHlpbmcgaGFyZHdhcmUgaW50ZXJmYWNlLiBJZGVudGlmeWluZyB0aGUgc3RydWN0dXJlIG9mIGRldiwgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlLCB3aWxsIGJlIGVzc2VudGlhbCwgYnV0IGl0IHdvbiYjMzk7dCBiZSBlbm91Z2guIEkmIzM5O2xsIGFsc28gbG9vayBhdCB0aGUgdHlwZXMgb2Ygb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYGRldmAuIEFyZSB3ZSBhY2Nlc3NpbmcgZGV2aWNlIGF0dHJpYnV0ZXMsIG1hbmlwdWxhdGluZyBpbnRlcm5hbCBmbGFncywgb3IgY29uZmlndXJpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzPwoKT25jZSBJIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYGRldmAgd2l0aGluIHRob3NlIGZ1bmN0aW9ucywgSSBjYW4gZXhwYW5kIG91dHdhcmQsIGZvbGxvd2luZyBob3cgaXRzIHZhbHVlIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgY2FsbHMgYW5kIHNlZSB3aG8gaXMgY2FsbGluZyB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgdGhhdCBoZWxwIG1lIGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyB2YXJpYWJsZS4KCkkgZXhwZWN0IHRvIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaXRzIGZsb3cgd2l0aGluIHRoZSBzeXN0ZW0gd2l0aCBhIGNvbWJpbmF0aW9uIG9mIHN0YXRpYyBhbmFseXNpcyBhbmQgdGFyZ2V0ZWQgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkyODA6XHRcbjkyODE6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pIHtcbjkyODI6XHRcdFx0cGFyYW1zLmVtbF9jYXBfcHJlc2VudCA9IHRydWU7XG45MjgzOlx0XHRcdHBhcmFtcy5lbWxfY2FwID1cbjkyODQ6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuOTI4NTpcdFx0fVxuOTI4NjpcdFxuOTI4NzpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSlcbjkyODg6XHRcdFx0cGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID1cbjkyODk6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pO1xuOTI5MDpcdFxuOTI5MTpcdFx0aWYgKHBhcmFtcy5haXJ0aW1lX3dlaWdodCBcdTAwMjZcdTAwMjZcbjkyOTI6XHRcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbjkyOTM6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSlcbjkyOTQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTI5NTpcdFxuOTI5NjpcdFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9zdGFfdHhwb3dlcl9zZXR0aW5nKGluZm8sXG45Mjk3Olx0XHRcdFx0XHRcdFx0XHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cixcbjkyOTg6XHRcdFx0XHRcdFx0XHRcdTAwMjZwYXJhbXMubGlua19zdGFfcGFyYW1zLnR4cHdyX3NldCk7XG45Mjk5Olx0XHRpZiAoZXJyKVxuOTMwMDpcdFx0XHRyZXR1cm4gZXJyO1xuOTMwMTpcdFxuOTMwMjpcdFx0LyogSW5jbHVkZSBwYXJhbWV0ZXJzIGZvciBURExTIHBlZXIgKHdpbGwgY2hlY2sgbGF0ZXIpICovXG45MzAzOlx0XHRlcnIgPSBubDgwMjExX3NldF9zdGF0aW9uX3RkbHMoaW5mbywgXHUwMDI2cGFyYW1zKTtcbjkzMDQ6XHRcdGlmIChlcnIpXG45MzA1Olx0XHRcdHJldHVybiBlcnI7XG45MzA2Olx0XG45MzA3Olx0XHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XG45MzA4Olx0XHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbjkzMDk6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuOTMxMDpcdFxuOTMxMTpcdFx0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xuOTMxMjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbjkzMTM6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcbjkzMTQ6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxuOTMxNTpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxuOTMxNjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxuOTMxNzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbjkzMTg6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbjkzMTk6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQ0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gYG5sODAyMTFfc2V0X3N0YXRpb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkZXZgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBubDgwMjExX3NldF9zdGF0aW9uYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSByZXZlcnNlIGVuZ2luZWVyaW5nIGNvZGUgb3IgZGVidWdnaW5nIGEgbmV0d29yayBkcml2ZXIgaXNzdWUgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgYGRldmAgaXMgbGlrZWx5IGEgcG9pbnRlciB0byBhIG5ldF9kZXZpY2Ugc3RydWN0dXJlIG9yIGEgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZSDigJMgcGVyaGFwcyBhIGRldmljZS1zcGVjaWZpYyBjb250ZXh0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgZ2V0cyBpdHMgdmFsdWUuIFRoZSB1bHRpbWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIGhhbmRsZXMgc3RhdGlvbiBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUgbmw4MDIxMSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkxODA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTE4MTpcdFxuOTE4MjpcdFx0LypcbjkxODM6XHRcdCAqIEFJRCBhbmQgbGlzdGVuX2ludGVydmFsIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvbmx5IGZvciB1bmFzc29jaWF0ZWRcbjkxODQ6XHRcdCAqIHN0YXRpb24uIEluY2x1ZGUgdGhlc2UgcGFyYW1ldGVycyBoZXJlIGFuZCB3aWxsIGNoZWNrIHRoZW0gaW5cbjkxODU6XHRcdCAqIGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKCkuXG45MTg2Olx0XHQgKi9cbjkxODc6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSlcbjkxODg6XHRcdFx0cGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcbjkxODk6XHRcbjkxOTA6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSlcbjkxOTE6XHRcdFx0cGFyYW1zLnZsYW5faWQgPSBubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSk7XG45MTkyOlx0XG45MTkzOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45MTk0Olx0XHRcdHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPVxuOTE5NTpcdFx0XHQgICAgIG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKTtcbjkxOTY6XHRcdGVsc2VcbjkxOTc6XHRcdFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9IC0xO1xuOTE5ODpcdFxuOTE5OTpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JUX1AyUF9QU10pXG45MjAwOlx0XHRcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9XG45MjAxOlx0XHRcdFx0bmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVF9QMlBfUFNdKTtcbjkyMDI6XHRcdGVsc2VcbjkyMDM6XHRcdFx0cGFyYW1zLnN1cHBvcnRfcDJwX3BzID0gLTE7XG45MjA0Olx0XG45MjA1Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pXG45MjA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIwNzpcdFxuOTIwODpcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cbjkyMDk6XHRcdFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycyk7XG45MjEwOlx0XG45MjExOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG45MjEyOlx0XHRcdC8qIElmIE1MRF9BRERSIGF0dHJpYnV0ZSBpcyBzZXQgdGhlbiB0aGlzIGlzIGFuIE1MRCBzdGF0aW9uXG45MjEzOlx0XHRcdCAqIGFuZCB0aGUgTUxEX0FERFIgYXR0cmlidXRlIGhvbGRzIHRoZSBNTEQgYWRkcmVzcyBhbmQgdGhlXG45MjE0Olx0XHRcdCAqIE1BQyBhdHRyaWJ1dGUgaG9sZHMgZm9yIHRoZSBMSU5LIGFkZHJlc3MuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHVwb24gc2VlaW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmA6CgoqKkluaXRpYWwgRXhhbWluYXRpb24gb2Ygbmw4MDIxMV9zZXRfc3RhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBgbmw4MDIxMV9zZXRfc3RhdGlvbmDigKYgcmlnaHQsIHRoaXMgaXMgd2hlcmUgd2UgYmVnaW4gdG8gY29uZmlndXJlIHN0YXRpb24gcGFyYW1ldGVycyB0aHJvdWdoIHRoZSBubDgwMjExIGludGVyZmFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGhpZ2gtbGV2ZWwgY29udGV4dCBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzIGJlaW5nIHNldD8gV2hhdCBraW5kIG9mIGNvbnRyb2wgZmxvdyBhbSBJIGxvb2tpbmcgYXQ/IE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBlbmNvdW50ZXJlZCBhdCB0aGlzIGVudHJ5IHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgZm9yIGFueSBwcmVsaW1pbmFyeSBjaGVja3MgYW5kIHNhbml0eSB2YWxpZGF0aW9ucyB0aGF0IG1heSB0YWtlIHBsYWNlIGJlZm9yZSB3ZSBnZXQgdG9vIGRlZXAgaW50byB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuIEkgYW50aWNpcGF0ZSBzb21lIHNpZ25pZmljYW50IGludGVyYWN0aW9uIHdpdGggdGhlIHdpcmVsZXNzIGRldmljZSYjMzk7cyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBtZXNzYWdlIGlzIHBhcnNlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBzb21ldGhpbmcgdGhlIGRyaXZlciBjYW4gd29yayB3aXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTE0MDpcdFx0XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG45MTQxOlx0XHRcdFx0XHRcdCBOTDgwMjExX0VYVF9GRUFUVVJFX1NUQV9UWF9QV1IpKVxuOTE0MjpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjkxNDM6XHRcbjkxNDQ6XHRcdFx0aWR4ID0gTkw4MDIxMV9BVFRSX1NUQV9UWF9QT1dFUl9TRVRUSU5HO1xuOTE0NTpcdFx0XHR0eHB3ci1cdTAwM2V0eXBlID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW2lkeF0pO1xuOTE0NjpcdFxuOTE0NzpcdFx0XHRpZiAodHhwd3ItXHUwMDNldHlwZSA9PSBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQpIHtcbjkxNDg6XHRcdFx0XHRpZHggPSBOTDgwMjExX0FUVFJfU1RBX1RYX1BPV0VSO1xuOTE0OTpcdFxuOTE1MDpcdFx0XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW2lkeF0pXG45MTUxOlx0XHRcdFx0XHR0eHB3ci1cdTAwM2Vwb3dlciA9IG5sYV9nZXRfczE2KGluZm8tXHUwMDNlYXR0cnNbaWR4XSk7XG45MTUyOlx0XHRcdFx0ZWxzZVxuOTE1MzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MTU0Olx0XHRcdH1cbjkxNTU6XHRcbjkxNTY6XHRcdFx0KnR4cHdyX3NldCA9IHRydWU7XG45MTU3Olx0XHR9IGVsc2Uge1xuOTE1ODpcdFx0XHQqdHhwd3Jfc2V0ID0gZmFsc2U7XG45MTU5Olx0XHR9XG45MTYwOlx0XG45MTYxOlx0XHRyZXR1cm4gMDtcbjkxNjI6XHR9XG45MTYzOlx0XG45MTY0Olx0c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG45MTY1Olx0e1xuOTE2NjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjkxNjc6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuOTE2ODpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXHUwMDNlbmV0ZGV2O1xuOTE2OTpcdFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XG45MTcwOlx0XHR1OCAqbWFjX2FkZHI7XG45MTcxOlx0XHRpbnQgZXJyO1xuOTE3MjpcdFxuOTE3MzpcdFx0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuOTE3NDpcdFxuOTE3NTpcdFx0aWYgKCFkZXYgXHUwMDI2XHUwMDI2IHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiBcdTAwMjZcdTAwMjZcbjkxNzY6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSlcbjkxNzc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MTc4Olx0XG45MTc5Olx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWNoYW5nZV9zdGF0aW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBubDgwMjExX25ld19zdGF0aW9uYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBubDgwMjExX25ld19zdGF0aW9uYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBzdGF0aW9uIGVudHJ5IHdpdGhpbiB0aGUgbmw4MDIxMSBmcmFtZXdvcmssIHJpZ2h0PyBTbywgdGhpcyBpcyAqdGhlKiBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgaW5zdGFudGlhdGluZyBhIG5ldyBTVEEsIGFzc29jaWF0aW5nIGl0IHdpdGggYW4gaW50ZXJmYWNlLCBhbmQgZXNzZW50aWFsbHksIGdpdmluZyBpdCBhIHByZXNlbmNlIG9uIHRoZSB3aXJlbGVzcyBtZWRpdW0uIE15IG1pbmQmIzM5O3MgcnVubmluZyB0aHJvdWdoIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgYG5ldF9kZXZpY2VgLCB0aGUgYGNmZzgwMjExX3N0YXRpb25gLCBsaWtlbHkgc29tZSByZWxhdGVkIHN0cnVjdHVyZXMgaW4gdGhlIG1hYzgwMjExIGxheWVyLi4uIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGxvY2tpbmcgaW52b2x2ZWQ7IGl0JiMzOTtzIGNyaXRpY2FsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIG1hbmlwdWxhdGluZyB0aGlzIHNoYXJlZCBzdGF0ZS4gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gQXJlIHRoZXkgcHJvcGVybHkgY2hlY2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBUaGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eTsgYW55IG1pc3NlZCBlcnJvciBoYW5kbGluZyBoZXJlIHdpbGwgYmUgYSBkaXNhc3Rlci4gSSBuZWVkIHRvIGxvb2sgZm9yIHRoYXQuIEFsc28sIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMga2V5LiBXaGF0IGFyZ3VtZW50cyBhcmUgd2UgZXhwZWN0aW5nPyBXaGF0IGluZm9ybWF0aW9uIGlzIHBhc3NlZCBmcm9tIHVzZXIgc3BhY2UsIGFuZCBob3cgaXMgaXQgdmFsaWRhdGVkPyBBbnkgdW5jaGVja2VkIHVzZXItcHJvdmlkZWQgZGF0YSBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBJJiMzOTttIGV4cGVjdGluZyBjaGVja3Mgb24gdGhlIE1BQyBhZGRyZXNzLCB0aGUgaW50ZXJmYWNlIGluZGV4LCBsaWtlbHkgc29tZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbi4gSXMgdGhlcmUgYW55IGlucHV0IHNhbml0aXphdGlvbiBnb2luZyBvbiwgb3IgYXJlIHdlIGp1c3QgdHJ1c3Rpbmcgd2hhdCYjMzk7cyBjb21pbmcgaW4gZnJvbSB0aGUgdXNlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBuZWVkcyBhIHRob3JvdWdoIHJldmlldy4gRmluYWxseSwgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3Jvbmc7IGRvZXMgaXQgZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgbmw4MDIxMSBldmVudCB0byBub3RpZnkgdXNlciBzcGFjZSBvZiB0aGUgZmFpbHVyZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NDIwOlx0XHRcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9XG45NDIxOlx0XHRcdFx0d2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPO1xuOTQyMjpcdFx0fVxuOTQyMzpcdFxuOTQyNDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcbjk0MjU6XHRcdFx0cGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSk7XG45NDI2Olx0XHRlbHNlIGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSlcbjk0Mjc6XHRcdFx0cGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcbjk0Mjg6XHRcbjk0Mjk6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQ0FQQUJJTElUWV0pIHtcbjk0MzA6XHRcdFx0cGFyYW1zLmNhcGFiaWxpdHkgPVxuOTQzMTpcdFx0XHRcdG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9DQVBBQklMSVRZXSk7XG45NDMyOlx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgfD0gU1RBVElPTl9QQVJBTV9BUFBMWV9DQVBBQklMSVRZO1xuOTQzMzpcdFx0fVxuOTQzNDpcdFxuOTQzNTpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9FWFRfQ0FQQUJJTElUWV0pIHtcbjk0MzY6XHRcdFx0cGFyYW1zLmV4dF9jYXBhYiA9XG45NDM3Olx0XHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0VYVF9DQVBBQklMSVRZXSk7XG45NDM4Olx0XHRcdHBhcmFtcy5leHRfY2FwYWJfbGVuID1cbjk0Mzk6XHRcdFx0XHRubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9FWFRfQ0FQQUJJTElUWV0pO1xuOTQ0MDpcdFx0fVxuOTQ0MTpcdFxuOTQ0MjpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldKVxuOTQ0MzpcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmh0X2NhcGEgPVxuOTQ0NDpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldKTtcbjk0NDU6XHRcbjk0NDY6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WSFRfQ0FQQUJJTElUWV0pXG45NDQ3Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEgPVxuOTQ0ODpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSk7XG45NDQ5Olx0XG45NDUwOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pIHtcbjk0NTE6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhID1cbjk0NTI6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSk7XG45NDUzOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYV9sZW4gPVxuOTQ1NDpcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xuOTQ1NTpcdFxuOTQ1NjpcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKSB7XG45NDU3Olx0XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSA9XG45NDU4Olx0XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FSFRfQ0FQQUJJTElUWV0pO1xuOTQ1OTpcdFx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIHN0YXJ0IG9mIGBubDgwMjExX25ld19zdGF0aW9uYCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAg4oCTIEluaXRpYWwgVGhvdWdodHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSAqYmVnaW5zKiB3aGVuIGEgbmV3IHN0YXRpb24gY29ubmVjdHMg4oCTIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsJiMzOTtzIHdpcmVsZXNzIHN1YnN5c3RlbSBnZXRzIGl0cyBob29rcyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBob3cgdGhpcyBjb25uZWN0aW9uIGlzIGJlaW5nIHJlcHJlc2VudGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGNvbmNlcm5zIGFyZSBhbHdheXMgYXJvdW5kIHJlc291cmNlIGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgbWFraW5nIHN1cmUgdGhpcyBuZXcgc3RhdGlvbiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCkkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaG93IHRoZSBzdGF0aW9uJiMzOTtzIGNvbmZpZ3VyYXRpb24gZGF0YSwgbGlrZSBpdHMgTUFDIGFkZHJlc3MsIGFzc29jaWF0ZWQgQlNTSUQsIGFuZCB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24sIGlzIGJlaW5nIHBhc3NlZCBpbi4gQXJlIHdlIHZhbGlkYXRpbmcgdGhpcyBkYXRhIHByb3Blcmx5PyBJcyB0aGVyZSBhbnkgb3Bwb3J0dW5pdHkgZm9yIGluamVjdGlvbiBvZiBtYWxpY2lvdXMgZGF0YSBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGZvciBjaGVja3Mgb24gbGVuZ3RocywgdmFsaWQgTUFDIGFkZHJlc3NlcywgYW5kIGFueSBvdGhlciBzYW5pdHkgY2hlY2tzIHRoZSBkZXZlbG9wZXJzIGhhdmUgaW1wbGVtZW50ZWQuCgpOZXh0LCBJJiMzOTttIGdvaW5nIHRvIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBuZXcgc3RhdGlvbiBpcyBiZWluZyByZXByZXNlbnRlZCBpbnRlcm5hbGx5LiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1c2VkPyBIb3cgYXJlIHRoZXkgbGlua2VkIGludG8gdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbT8gSXMgaXQgYSBzaW5nbGUgYWxsb2NhdGlvbiwgb3IgYXJlIG11bHRpcGxlIHN0cnVjdHVyZXMgaW52b2x2ZWQ/IEkmIzM5O2xsIGJlIGtlZXBpbmcgYSBrZWVuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyDigJMgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBNZW1vcnkgbWFuYWdlbWVudCB3aWxsIGJlIGNyaXRpY2FsIOKAkyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgYWxsb2NhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGF0IGRlYWxsb2NhdGlvbiBoYXBwZW5zIGluIHRoZSBjb3JyZWN0IHNpdHVhdGlvbnMsIGF2b2lkaW5nIG1lbW9yeSBsZWFrcy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBldmVudCBvciBjYWxsYmFjayByZWdpc3RyYXRpb24uIERvZXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyIG90aGVyIGFjdGlvbnMgb3Igc2V0IHVwIGZ1dHVyZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3RhdGlvbj8gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdGF0aW9uJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoYXQgaW5mb3JtYXRpb24gaXMgbWFkZSBhY2Nlc3NpYmxlIHRvIG90aGVyIHN1YnN5c3RlbXMsIGxpa2UgdGhlIG5ldHdvcmtpbmcgc3RhY2sgb3IgYW55IHVzZXJzcGFjZSBtb25pdG9yaW5nIHRvb2xzLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgYWxsIGluaXRpYWxpc2F0aW9uIHJvdXRpbmVzIGFyZSBjYWxsZWQgYW5kIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3RhdGlvbiBpcyBpbml0aWFsaXplZCB0byBhIHZhbGlkIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkzNjA6XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxuOTM2MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM2MjpcdFx0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpIHtcbjkzNjM6XHRcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9OTUlfTUFDXSlcbjkzNjQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM2NTpcdFxuOTM2NjpcdFx0XHRcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cbjkzNjc6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcbjkzNjg6XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XG45MzY5Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxuOTM3MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzcxOlx0XHRcdH1cbjkzNzI6XHRcdH0gZWxzZSB7XG45MzczOlx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45Mzc0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc1Olx0XG45Mzc2Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXG45Mzc3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc4Olx0XG45Mzc5Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXHUwMDI2XHUwMDI2XG45MzgwOlx0XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxuOTM4MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM4MjpcdFx0fVxuOTM4MzpcdFxuOTM4NDpcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cbjkzODU6XHRcdFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycyk7XG45Mzg2Olx0XG45Mzg3Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG45Mzg4Olx0XHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcbjkzODk6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XG45MzkwOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19tYWMgPVxuOTM5MTpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5MjpcdFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYykpXG45MzkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzk0Olx0XHR9IGVsc2Uge1xuOTM5NTpcdFx0XHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5NjpcdFx0fVxuOTM5NzpcdFxuOTM5ODpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKSB7XG45Mzk5Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzID1cbjk0MDA6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAxOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzX2xlbiA9XG45NDAyOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAzOlx0XHR9XG45NDA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBkZWFsaW5nIHdpdGggYG5sODAyMTFfbmV3X3N0YXRpb25gIGFuZCBJJiMzOTttIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgRnVuY3Rpb24mIzM5O3MgSGlzdG9yeSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgbGluZWFnZSwgdG8gc2VlIHRoZSBjYWxscyB0aGF0IGxlYWQgdXAgdG8gaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMgcGFyYW1vdW50IGhlcmUuIFNvIEnigJltIG1lbnRhbGx5IHNjYW5uaW5nIGJhY2sgdGhyb3VnaCB0aGUgZWFybGllciBsaW5lcywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZC4uLiB3aGF0IHRyaWdnZXJzIHRoaXMgYG5ld19zdGF0aW9uYCBldmVudD8gSXMgaXQgYSBiZWFjb24sIGEgcHJvYmUgcmVxdWVzdCwgYSBtYW5hZ2VtZW50IGZyYW1lPyBLbm93aW5nIHRoYXQgd2lsbCBkZWZpbmUgdGhlIHBvdGVudGlhbCBzaWduaWZpY2FuY2Ugb2YgYW55IGlzc3VlcyBJIGZpbmQuIEkmIzM5O20gZXNzZW50aWFsbHkgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgZXhlY3V0aW9uIHBhdGgsIG1lbnRhbGx5IGJ1aWxkaW5nIGEgbWVudGFsIHN0YWNrIG9mIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNlZGluZyBjb25kaXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNsdWVzIHRvIHN1cmZhY2Ugc29vbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5MzMwOlx0IG91dF9wdXRfdmxhbjpcbjkzMzE6XHRcdGRldl9wdXQocGFyYW1zLnZsYW4pO1xuOTMzMjpcdFxuOTMzMzpcdFx0cmV0dXJuIGVycjtcbjkzMzQ6XHR9XG45MzM1Olx0XG45MzM2Olx0c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG45MzM3Olx0e1xuOTMzODpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjkzMzk6XHRcdGludCBlcnI7XG45MzQwOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjkzNDE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVx1MDAzZW5ldGRldjtcbjkzNDI6XHRcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xuOTM0MzpcdFx0dTggKm1hY19hZGRyID0gTlVMTDtcbjkzNDQ6XHRcdHUzMiBhdXRoX2Fzc29jID0gQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkgfFxuOTM0NTpcdFx0XHRcdCBCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKTtcbjkzNDY6XHRcbjkzNDc6XHRcdG1lbXNldChcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcbjkzNDg6XHRcbjkzNDk6XHRcdGlmICghZGV2IFx1MDAyNlx1MDAyNiB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pXG45MzUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM1MTpcdFxuOTM1MjpcdFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfc3RhdGlvbilcbjkzNTM6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTM1NDpcdFxuOTM1NTpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKVxuOTM1NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzNTc6XHRcbjkzNTg6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4gfHxcbjkzNTk6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xuOTM2MDpcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXG45MzYxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzYyOlx0XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xuOTM2MzpcdFx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX05NSV9NQUNdKVxuOTM2NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAg4oCTIFdoYXQmIzM5O3MgTmV4dD8qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBXZSYjMzk7dmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIG5vdyBJIG5lZWQgdG8gc2VlIHRoZSByZXN0IG9mIGl0LiBXaGF0IGFyZSB3ZSBsb29raW5nIGF0IGhlcmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG5leHQgc2VjdGlvbnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IHRoYXQgd2lsbCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gSXMgdGhlcmUgYSByZWFzb24gd2h5IHdlIGFyZSBsb29raW5nIGhlcmU/IFdoYXQgaXMgdGhlIGJpZ2dlciBwaWN0dXJlPyBPa2F5LCBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk1OTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk1OTE6XHRcbjk1OTI6XHRcdFx0LyogT2xkZXIgdXNlcnNwYWNlLCBvciB1c2Vyc3BhY2Ugd2FudGluZyB0byBiZSBjb21wYXRpYmxlIHdpdGhcbjk1OTM6XHRcdFx0ICogIU5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSwgd2lsbCBub3Qgc2V0IHRoZSBhdXRoXG45NTk0Olx0XHRcdCAqIGFuZCBhc3NvYyBmbGFncyBpbiB0aGUgbWFzaywgYnV0IGFzc3VtZXMgdGhlIHN0YXRpb24gd2lsbCBiZVxuOTU5NTpcdFx0XHQgKiBhZGRlZCBhcyBhc3NvY2lhdGVkIGFueXdheSBzaW5jZSB0aGlzIHdhcyB0aGUgcmVxdWlyZWQgZHJpdmVyXG45NTk2Olx0XHRcdCAqIGJlaGF2aW91ciBiZWZvcmUgTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHdhc1xuOTU5NzpcdFx0XHQgKiBpbnRyb2R1Y2VkLlxuOTU5ODpcdFx0XHQgKiBJbiBvcmRlciB0byBub3QgYm90aGVyIGRyaXZlcnMgd2l0aCB0aGlzIHF1aXJrIGluIHRoZSBBUElcbjk1OTk6XHRcdFx0ICogc2V0IHRoZSBmbGFncyBpbiBib3RoIHRoZSBtYXNrIGFuZCBzZXQgZm9yIG5ldyBzdGF0aW9ucyBpblxuOTYwMDpcdFx0XHQgKiB0aGlzIGNhc2UuXG45NjAxOlx0XHRcdCAqL1xuOTYwMjpcdFx0XHRpZiAoIShwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IGF1dGhfYXNzb2MpKSB7XG45NjAzOlx0XHRcdFx0cGFyYW1zLnN0YV9mbGFnc19tYXNrIHw9IGF1dGhfYXNzb2M7XG45NjA0Olx0XHRcdFx0cGFyYW1zLnN0YV9mbGFnc19zZXQgfD0gYXV0aF9hc3NvYztcbjk2MDU6XHRcdFx0fVxuOTYwNjpcdFxuOTYwNzpcdFx0XHQvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi9cbjk2MDg6XHRcdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuOTYwOTpcdFx0XHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbjk2MTA6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XG45NjExOlx0XHRcdGJyZWFrO1xuOTYxMjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuOTYxMzpcdFx0XHQvKiBpZ25vcmUgdUFQU0QgZGF0YSAqL1xuOTYxNDpcdFx0XHRwYXJhbXMuc3RhX21vZGlmeV9tYXNrIFx1MDAyNj0gflNUQVRJT05fUEFSQU1fQVBQTFlfVUFQU0Q7XG45NjE1Olx0XG45NjE2Olx0XHRcdC8qIGFzc29jaWF0ZWQgaXMgZGlzYWxsb3dlZCAqL1xuOTYxNzpcdFx0XHRpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrIFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKSlcbjk2MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk2MTk6XHRcdFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cbjk2MjA6XHRcdFx0aWYgKChwYXJhbXMuc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSKSkgfHxcbjk2MjE6XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcbjk2MjI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk2MjM6XHRcdFx0YnJlYWs7XG45NjI0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG45NjI1Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XG45NjI2Olx0XHRcdC8qIGlnbm9yZSB1QVBTRCBkYXRhICovXG45NjI3Olx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcbjk2Mjg6XHRcbjk2Mjk6XHRcdFx0LyogdGhlc2UgYXJlIGRpc2FsbG93ZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIGBnZXRfdmxhbmAgaGFzIGJlZW4gbW9kaWZpZWQuIFNwZWNpZmljYWxseSwgaXQgbm93IGxvb2tzIGxpa2U6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKCQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmBgYAoKVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBUaGUgdGhpcmQgcGFyYW1ldGVyLCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAsIGlzIHRoZSBuZXcgYWRkaXRpb24uIE5vdywgdGhlIGNvZGUgaW5jbHVkZXMgYSB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgZ2V0X3ZsYW5gLiBJdCYjMzk7cyBlbnN1cmluZyB0aGF0IHRoZSBWTEFOIGludGVyZmFjZSBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBpbnRlbmRlZCBBUCBpbnRlcmZhY2UuCgpgYGBjCgkvKiBDaGVjayBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlICovCglpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LSZndDtkZXZfYWRkciwgZGV2LSZndDtkZXZfYWRkcikpIHsKCQlyZXQgPSAtRUlOVkFMOwoJCWdvdG8gZXJyb3I7Cgl9CmBgYAoKR29vZCwgdGhhdCYjMzk7cyBzb3VuZCBsb2dpYyDigJMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBtaXNjb25maWd1cmF0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIE5vdywgdGhlIGBkZXZgIHBhcmFtZXRlciBpcyBiZWluZyBwYXNzZWQgdG8gYGdldF92bGFuYCBpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHNlbnNlIGNvbnNpZGVyaW5nIHRoZSBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlLiBJIHdvdWxkIGV4cGVjdCB0aGVzZSB0byBiZSB0aGUgbGlrZWx5IGNhbGxpbmcgc2l0ZXMgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgVkxBTiBtYW5pcHVsYXRpb24gaW4gc3RhdGlvbiBjb25maWd1cmF0aW9uLgoKSG9sZCBvbiBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBUaGlzIGNoYW5nZSB0byBgZ2V0X3ZsYW5gIGNvdWxkIGFmZmVjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggdG8gY29uZmlybSB0aGF0IGBnZXRfdmxhbmAgaGFzIG5vIG90aGVyIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF92bGFuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTg5NjY9RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTcxLSAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTcyOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3Olx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA4LVx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz05MzM2PXN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwNy1cdFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk2MDg6XHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwOS1cdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdldF92bGFuYCBDYWxsZXJzIGFuZCBEZXZpY2UgQWRkcmVzcyBDb21wYXJpc29uKioKCk9rYXksIHNvIG9ubHkgdHdvIGNhbGxlcnMgYXJlIGhpdHRpbmcgdGhpcyBgZ2V0X3ZsYW5gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGtlZXBzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIG1hbmFnZWFibGUuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBhc3N1bXB0aW9uOiBjYW4gYGRldl9hZGRyYCDigJMgdGhlIGRldmljZSBhZGRyZXNzIOKAkyBvZiBlaXRoZXIgdGhlIGBkZXZgIG9yIGB2YCB2YXJpYWJsZXMgd2l0aGluIHRoZSBmdW5jdGlvbiBiZSB1bmluaXRpYWxpemVkPwoKTGV0JiMzOTtzIGJyZWFrIGRvd24gd2hlcmUgdGhlc2UgdmFyaWFibGVzIGNvbWUgZnJvbS4gYHZgIGlzIGEgYG5ldF9kZXZpY2VgIG9idGFpbmVkIHRocm91Z2ggYGRldl9nZXRfYnlfaW5kZXgoLi4uKWAuIEFuZCBgZGV2YCBpcyBhY2Nlc3NlZCB2aWEgYHdkZXYtJmd0O25ldGRldmAuIFRoZXNlIGFyZSBib3RoIG5ldHdvcmsgZGV2aWNlcywgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBUaGF0IG1lYW5zLCBieSBkZWZpbml0aW9uLCB0aGVpciBFdGhlcm5ldCBhZGRyZXNzZXMgKGBkZXZfYWRkcmApIHNob3VsZCBiZSBzdGFuZGFyZCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgTUFDIGFkZHJlc3NlcyDigJMgdGhleSBnZXQgc2V0IGR1cmluZyB0aGUgbmV0ZGV2IGNyZWF0aW9uIGFuZCByZWdpc3RyYXRpb24gcHJvY2Vzc2VzLiBTbywgdGhlIGNoYW5jZXMgb2YgdGhlbSBiZWluZyB1bmluaXRpYWxpemVkIGFyZSB2ZXJ5LCB2ZXJ5IGxvdywgaWYgdGhlIG5ldHdvcmsgc3RhY2sgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuCgpUaGUgY29yZSBvZiB0aGUgbG9naWMgaGluZ2VzIG9uIGBldGhlcl9hZGRyX2VxdWFsKHYtJmd0O2Rldl9hZGRyLCBkZXYtJmd0O2Rldl9hZGRyKWAuIFRoaXMgY29tcGFyZXMgc2l4IGJ5dGVzLiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IHZlcmlmeSB0aGF0IGBldGhlcl9hZGRyX2VxdWFsYCBpcyBiZWhhdmluZyBhcyBJIGV4cGVjdCBpdCB0by4gVGhlIGNvZGUgaXMgbGlrZWx5IG9wdGltaXplZCBmb3Igc3BlZWQsIGJ1dCBJIHNob3VsZCBzYW5pdHkgY2hlY2sgdGhhdCBpdCYjMzk7cyBkb2luZyBhIHByb3BlciwgYnl0ZS1ieS1ieXRlIGNvbXBhcmlzb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaD0zMzc9c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX2luaGVyaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRzdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzUyLSAqL1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjM1MzpzdGF0aWMgaW5saW5lIGJvb2wgZXRoZXJfYWRkcl9lcXVhbChjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNTQte1xuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zODEtXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6MzgyOnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zODMte1xuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MDUtICovXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NDA2OnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsX3VuYWxpZ25lZChjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MDcte1xuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MjQtICovXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NDI1OnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsX21hc2tlZChjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMixcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MjYtXHRcdFx0XHRcdCAgIGNvbnN0IHU4ICptYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MQoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBleHBvc2VzIHJpc2tzIGRldGVjdGFibGUgKm9ubHkqIGJ5IEtNU0FOLiBJJiMzOTttIGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4KCkZpcnN0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBwYXRjaCYjMzk7cyBhY3Rpb25zOiBpdCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIHRoZSBgZ2V0X3ZsYW4oKWAgZnVuY3Rpb24gaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBUaGlzIGNoZWNrIHZlcmlmaWVzIHRoYXQgdGhlIFZMQU4gZGV2aWNlIChgdmApIGhhcyB0aGUgc2FtZSBNQUMgYWRkcmVzcyBhcyB0aGUgcGFyZW50IEFQL1AyUF9HTyBkZXZpY2UgKGBkZXZgKS4gQ3J1Y2lhbGx5LCB0aGlzIGlzIGEgdmFsaWRhdGlvbiwgYW4gKmlucHV0IGNoZWNrKi4gVGhlIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGBkZXZgIGFuZCB0aGUgY2FsbGVyIHNldHMgYGRldmAgdG8gdGhlIHByb3BlciBuZXRfZGV2aWNlLiBUaGUgdmFsaWRhdGlvbiBsb2dpYyBub3cgY29tcGFyZXMgYHYtJmd0O2Rldl9hZGRyYCBhbmQgYGRldi0mZ3Q7ZGV2X2FkZHJgIHVzaW5nIGBldGhlcl9hZGRyX2VxdWFsYCwgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGUgYWRkcmVzc2VzIGRvbiYjMzk7dCBtYXRjaC4KCk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGVzZSBxdWVzdGlvbnM6CgoxLiAgKipEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGRhdGEgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGFuZCBzZW50IHRvIHVzZXJzcGFjZT8qKiBOby4gSXQgZG9lcyBub3Qgc2VuZCBhbnl0aGluZyB0byB1c2VyIHNwYWNlLgoyLiAgKipEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogIE5vLCBgZGV2YCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBhIHdlbGwtZGVmaW5lZCBgZGV2YCBhbmQgYSBgdmAgYWNxdWlyZWQgdGhyb3VnaCBgZGV2X2dldF9ieV9pbmRleGAgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZC4KMy4gICoqQXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGV4aXN0aW5nIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/KiogTm8sIHRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQuCjQuICAqKkFyZSB0aGVyZSBwb3RlbnRpYWwgYm91bmRzIGNoZWNrcyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8qKiBOby4gVGhlIHBhdGNoIGltcG9zZXMgYSBzdHJpY3RlciByZXN0cmljdGlvbi4gSXTigJlzIGEgdmFsaWRhdGlvbiB0aGF0IGd1YXJhbnRlZXMgYWxpZ25tZW50IG9mIFZMQU4gdG8gdGhlIHBhcmVudCBkZXZpY2UuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYXJlIGFscmVhZHkgZW5hYmxlZC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMqLiBUaGUgY3JpdGljYWwgcnVsZSBpcywgaWYgS0FTQU4gKG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzKSBjYW4gY2F0Y2ggYSBidWcsIEtNU0FOIGlzICpub3QqIG5lY2Vzc2FyeS4gS01TQU4gZnV6emluZyBpcyBleHBlbnNpdmUuCgpJbiB0aGlzIHNwZWNpZmljIGNhc2UsIGJvdGggYHZgIGFuZCBgZGV2YCBhcmUsIGF0IHRoZSBwb2ludCBvZiBhY2Nlc3MsIHZhbGlkLCByZWdpc3RlcmVkIGBuZXRfZGV2aWNlYCBwb2ludGVycyB3aG9zZSBgZGV2X2FkZHJgIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdHJhdGlvbiByb3V0aW5lcy4gVGhpcyBlbGltaW5hdGVzIHRoZSBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBgZGV2YCBvciBgdmAg4oCTIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3RoZXIgbGlmZWN5Y2xlIHByb2JsZW1zIOKAkyBhcmUgYWxyZWFkeSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgZXhpc3RpbmcgdG9vbHMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgc29saWQsIGFuZCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3Igc3BlY2lhbCBLTVNBTiBjb25zaWRlcmF0aW9ucy4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYSBjaGVjayBmb3IgYWxpZ25tZW50IG9mIHRoZSBWTEFOIHRvIHRoZSBwYXJlbnQgZGV2aWNlLCBubyB1bmluaXRpYWxpemVkIGRhdGEgaGVyZS4gVGltZSB0byBmbGFnIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgZ2V0X3ZsYW4oKWAgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHRvIHRha2UgYW4gYWRkaXRpb25hbCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAgYXJndW1lbnQgYW5kIHZlcmlmaWVzIHRoYXQgYGRldmAgaXMgdmFsaWQgYW5kIHRoYXQgYHYtXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgZ2V0X3ZsYW4oKWAgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHRvIHRha2UgYW4gYWRkaXRpb25hbCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAgYXJndW1lbnQgYW5kIHZlcmlmaWVzIHRoYXQgYGRldmAgaXMgdmFsaWQgYW5kIHRoYXQgYHYtXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyMS4zMDA5ODc5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQyMTI2NTM0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X3ZsYW5cIixcbiAgICBcIm5sODAyMTFfc2V0X3N0YXRpb25cIixcbiAgICBcIm5sODAyMTFfbmV3X3N0YXRpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVxcdTAwM2VkZXZfYWRkcmAgbWF0Y2hlcyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcy4gVGhlIGBkZXZfYWRkcmAgZmllbGRzIGJlaW5nIGNvbXBhcmVkIGJlbG9uZyB0byBleGlzdGluZywgcmVnaXN0ZXJlZCBuZXR3b3JrIGRldmljZXMgKGBuZXRfZGV2aWNlYCkgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIHBvaW50ZXIgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGF0IGEgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgdGFyZ2V0IEFQL1AyUF9HTyBpbnRlcmZhY2Ugd2hlbiBzZXR0aW5nIG9yIGFkZGluZyBhIHN0YXRpb24gaW4gbmw4MDIxMS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayByZXF1ZXN0IGhhbmRsaW5nIGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbC9zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyMS4zMDA5OTQwNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTk5ODk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc0ODBjZGU4M2IwODcxMTJkZGFhOGQ0MTgyNzEyM2YxNTUyZDJkNzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCA4OTliNjM3NGM1NTA2Li4wZjMzODgzMTJjY2Q4IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTg5NjYsMTAgKzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UpO1xcbiBcXG4gLypcXG4tICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcgYW5kIG9uIHRoZSByaWdodCB3aXBoeS5cXG4rICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeVxcbisgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdjtcXG5AQCAtODk5OSw2ICs5MDAxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFx0fVxcbiBcXG4rXFx0LyogQ2hlY2sgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZSAqL1xcbitcXHRpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LVxcdTAwM2VkZXZfYWRkciwgZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIHY7XFxuICBlcnJvcjpcXG4gXFx0ZGV2X3B1dCh2KTtcXG5AQCAtOTI5Niw3ICs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYpO1xcbitcXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XFxuIFxcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XFxuIFxcbkBAIC05NTk3LDcgKzk2MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxuLVxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7XFxuK1xcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG4gXFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcXG4gXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjIxLjg1MTUzMjM1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzE2MDM4OTE2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdldF92bGFuXCIsXG4gICAgXCJubDgwMjExX3NldF9zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGF0IGEgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgdGFyZ2V0IEFQL1AyUF9HTyBpbnRlcmZhY2Ugd2hlbiBzZXR0aW5nIG9yIGFkZGluZyBhIHN0YXRpb24gaW4gbmw4MDIxMS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayByZXF1ZXN0IGhhbmRsaW5nIGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbC9zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0ODBjZGU4M2IwODcxMTJkZGFhOGQ0MTgyNzEyM2YxNTUyZDJkNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwODo0NToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4OTliNjM3NGM1NTA2Li4wZjMzODgzMTJjY2Q4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTg5NjYsMTAgKzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4gXG4gLypcbi0gKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZyBhbmQgb24gdGhlIHJpZ2h0IHdpcGh5LlxuKyAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nLCBvbiB0aGUgcmlnaHQgd2lwaHlcbisgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tXHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXG4rXHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnY7XG5AQCAtODk5OSw2ICs5MDAxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvcjtcbiBcdH1cbiBcbitcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cbitcdGlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHJldHVybiB2O1xuICBlcnJvcjpcbiBcdGRldl9wdXQodik7XG5AQCAtOTI5Niw3ICs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbitcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbiBcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XG4gXG5AQCAtOTU5Nyw3ICs5NjA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcbiBcdFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXG4tXHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7XG4rXHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbiBcdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuIFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjIxLjg1MTUzMzc3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMTAxODU5MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN0YXRpb24gY29uZmlndXJhdGlvbi4gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgYGdldF92bGFuYCBmdW5jdGlvbiBpcyB1c2VkIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIHdpdGhpbiBgZ2V0X3ZsYW5gIHRvIGVuc3VyZSB0aGUgVkxBTiBpbnRlcmZhY2UgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgcHJvdmlkZWQgQVAvUDJQX0dPIGludGVyZmFjZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHJlbGlhYmx5IHRlc3RlZD8gR2l2ZW4gdGhlIGZvY3VzIG9uIG5ldGxpbmsgbmw4MDIxMSBjb21tYW5kcywgSSB3b25kZXIgaWYgdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgc2V0IHVwIHRvIGFkZHJlc3MgdGhpcyFcblxuQWgsIGl0IGlzISBtYWM4MDIxMV9od3NpbSBpcywgdGhhbmtmdWxseSwgYSBzdGFwbGUgaW4gc3l6a2FsbGVyLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSByZWFkaWx5IGF2YWlsYWJsZSBzb2Z0d2FyZS1zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlLCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHRlc3RpbmcgbGFuZHNjYXBlLiBOZXRsaW5rIGNvbW1hbmRzIGxpa2UgYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBhbmQgYE5MODAyMTFfQ01EX05FV19TVEFUSU9OYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gTm8gaGFyZHdhcmUgY29uc3RyYWludHMgdG8gd29ycnkgYWJvdXQgaGVyZSEgSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGZpbGVzIGFuZCBgS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpY3MsIGJ1dCB0aGUgZmFjdCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGluIHN5emthbGxlciBpcyBncmVhdCBuZXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuOTUzMzk1OTUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5NjUsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjg5NjU6XFx0fVxcbjg5NjY6XFx0RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XFxuODk2NzpcXHRcXG44OTY4OlxcdC8qXFxuODk2OTpcXHQgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZywgb24gdGhlIHJpZ2h0IHdpcGh5XFxuODk3MDpcXHQgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS5cXG44OTcxOlxcdCAqL1xcbjg5NzI6XFx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbjg5NzM6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjg5NzQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG44OTc1OlxcdHtcXG44OTc2OlxcdFxcdHN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTtcXG44OTc3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICp2O1xcbjg5Nzg6XFx0XFx0aW50IHJldDtcXG44OTc5OlxcdFxcbjg5ODA6XFx0XFx0aWYgKCF2bGFuYXR0cilcXG44OTgxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjg5ODI6XFx0XFxuODk4MzpcXHRcXHR2ID0gZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KGluZm8pLCBubGFfZ2V0X3UzMih2bGFuYXR0cikpO1xcbjg5ODQ6XFx0XFx0aWYgKCF2KVxcbjg5ODU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuODk4NjpcXHRcXG44OTg3OlxcdFxcdGlmICghdi1cXHUwMDNlaWVlZTgwMjExX3B0ciB8fCB2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSAhPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpIHtcXG44OTg4OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuODk4OTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjg5OTA6XFx0XFx0fVxcbjg5OTE6XFx0XFxuODk5MjpcXHRcXHRpZiAodi1cXHUwMDNlaWVlZTgwMjExX3B0ci1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gXFx1MDAyNlxcdTAwMjZcXG44OTkzOlxcdFxcdCAgICB2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgXFx1MDAyNlxcdTAwMjZcXG44OTk0OlxcdFxcdCAgICB2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB7XFxuODk5NTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjg5OTY6XFx0XFx0XFx0Z290byBlcnJvcjtcXG44OTk3OlxcdFxcdH1cXG44OTk4OlxcdFxcbjg5OTk6XFx0XFx0aWYgKCFuZXRpZl9ydW5uaW5nKHYpKSB7XFxuOTAwMDpcXHRcXHRcXHRyZXQgPSAtRU5FVERPV047XFxuOTAwMTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjkwMDI6XFx0XFx0fVxcbjkwMDM6XFx0XFxuOTAwNDpcXHRcXHQvKiBDaGVjayBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlICovXFxuOTAwNTpcXHRcXHRpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LVxcdTAwM2VkZXZfYWRkciwgZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG45MDA2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuOTAwNzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjkwMDg6XFx0XFx0fVxcbjkwMDk6XFx0XFxuOTAxMDpcXHRcXHRyZXR1cm4gdjtcXG45MDExOlxcdCBlcnJvcjpcXG45MDEyOlxcdFxcdGRldl9wdXQodik7XFxuOTAxMzpcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbjkwMTQ6XFx0fVxcbjkwMTU6XFx0XFxuOTAxNjpcXHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX3dtZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbjkwMTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcXG45MDE4OlxcdHtcXG45MDE5OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfU1RBX1dNRV9NQVggKyAxXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuOTU0NjY3OTMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwODIyMjUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgRGV2aWNlIENvbnRleHQgaW4gbmw4MDIxMS5jKipcblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCBhZ2Fpbi4gSSB3YW50IHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGhvdyB0aGUgYGRldmAgdmFyaWFibGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBJJ2xsIGJlIGZvY3VzaW5nIG9uIGxpbmVzIDkyODUtOTMyMCBhbmQgOTU5MC05NjIwLiBUaGlzIHNob3VsZCBjbGFyaWZ5IGhvdyB0aGUgZGV2aWNlIGNvbnRleHQgaXMgZXN0YWJsaXNoZWQgYW5kIHVzZWQgd2hlbiBzZXR0aW5nIHVwIG9yIG1vZGlmeWluZyBzdGF0aW9uIGNvbmZpZ3VyYXRpb25zIHZpYSBubDgwMjExLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCB0byBkZWJ1ZyBhIHBvdGVudGlhbCBpc3N1ZSwgb3IgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIG5ldyBzdGF0aW9uIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTozNC4yNjI4OTQxMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTI4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTI4NTpcXHRcXHR9XFxuOTI4NjpcXHRcXG45Mjg3OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKVxcbjkyODg6XFx0XFx0XFx0cGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID1cXG45Mjg5OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pO1xcbjkyOTA6XFx0XFxuOTI5MTpcXHRcXHRpZiAocGFyYW1zLmFpcnRpbWVfd2VpZ2h0IFxcdTAwMjZcXHUwMDI2XFxuOTI5MjpcXHRcXHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG45MjkzOlxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSlcXG45Mjk0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45Mjk1OlxcdFxcbjkyOTY6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9zdGFfdHhwb3dlcl9zZXR0aW5nKGluZm8sXFxuOTI5NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cixcXG45Mjk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYXJhbXMubGlua19zdGFfcGFyYW1zLnR4cHdyX3NldCk7XFxuOTI5OTpcXHRcXHRpZiAoZXJyKVxcbjkzMDA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzAxOlxcdFxcbjkzMDI6XFx0XFx0LyogSW5jbHVkZSBwYXJhbWV0ZXJzIGZvciBURExTIHBlZXIgKHdpbGwgY2hlY2sgbGF0ZXIpICovXFxuOTMwMzpcXHRcXHRlcnIgPSBubDgwMjExX3NldF9zdGF0aW9uX3RkbHMoaW5mbywgXFx1MDAyNnBhcmFtcyk7XFxuOTMwNDpcXHRcXHRpZiAoZXJyKVxcbjkzMDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzA2OlxcdFxcbjkzMDc6XFx0XFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xcbjkzMDg6XFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuOTMwOTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XFxuOTMxMDpcXHRcXG45MzExOlxcdFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxuOTMxMjpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbjkzMTM6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbjkzMTQ6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XFxuOTMxNTpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XFxuOTMxNjpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuOTMxNzpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxcbjkzMTg6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbjkzMTk6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuOTMyMDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxcbjkzMjE6XFx0XFx0XFx0YnJlYWs7XFxuOTMyMjpcXHRcXHRkZWZhdWx0OlxcbjkzMjM6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuOTMyNDpcXHRcXHRcXHRnb3RvIG91dF9wdXRfdmxhbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzQuMjY0NTIwNjA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk3ODgwOTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIGBkZXZgIGluIGBubDgwMjExX3NldF9zdGF0aW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBgZGV2YCB2YXJpYWJsZSBjb21lcyBmcm9tIHdpdGhpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgb3IgbW9kaWZ5aW5nIHNvbWUgd2lyZWxlc3MgYmVoYXZpb3IgSSdtIHdvcmtpbmcgd2l0aC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgc3RhY2sgb3IgY29kZSBmbG93IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGBkZXZgIGlzIGluaXRpYWxpemVkIG9yIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24uIEknbSBhc3N1bWluZyBpdCdzIGEgcG9pbnRlciB0byBhIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgcHJvYmFibHkgYSBgc3RydWN0IG5ldF9kZXZpY2UgKmAsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgYmVpbmcgdXNlZC4gSXMgaXQgYmVpbmcgcGFzc2VkIGRpcmVjdGx5IGZyb20gYSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24sIHBlcmhhcHMgYGNmZzgwMjExYCBvciBzb21lIG90aGVyIG5ldGxpbmsgaGFuZGxlcj8gT3IgaXMgaXQgcG9zc2libHkgYmVpbmcgbG9va2VkIHVwIGJhc2VkIG9uIHNvbWUgb3RoZXIgaWRlbnRpZmllciB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZXMgdG8gZmluZCB3aGVyZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgaXMgY2FsbGVkLCBhbmQgdGhlbiB3b3JrIG15IHdheSBiYWNrd2FyZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFyZ3VtZW50cyBhbmQgYW55IGludGVybWVkaWF0ZSBzdGVwcyB0aGF0IG1pZ2h0IGludm9sdmUgZGV2aWNlIGxvb2t1cCBvciBpbml0aWFsaXphdGlvbi4gSG9wZWZ1bGx5LCBpdCdzIG5vdCBidXJpZWQgdG9vIGRlZXAgaW4gc29tZSBtYWNyb3Mgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYy4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXRfZGV2aWNlYCBhbmQgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyB1dGlsaXplZCB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2suIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzcuMjQzMzMxNDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkxODA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkxODE6XFx0XFxuOTE4MjpcXHRcXHQvKlxcbjkxODM6XFx0XFx0ICogQUlEIGFuZCBsaXN0ZW5faW50ZXJ2YWwgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHVuYXNzb2NpYXRlZFxcbjkxODQ6XFx0XFx0ICogc3RhdGlvbi4gSW5jbHVkZSB0aGVzZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIHdpbGwgY2hlY2sgdGhlbSBpblxcbjkxODU6XFx0XFx0ICogY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UoKS5cXG45MTg2OlxcdFxcdCAqL1xcbjkxODc6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSlcXG45MTg4OlxcdFxcdFxcdHBhcmFtcy5haWQgPSBubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pO1xcbjkxODk6XFx0XFxuOTE5MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKVxcbjkxOTE6XFx0XFx0XFx0cGFyYW1zLnZsYW5faWQgPSBubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkxBTl9JRF0pO1xcbjkxOTI6XFx0XFxuOTE5MzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKVxcbjkxOTQ6XFx0XFx0XFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9XFxuOTE5NTpcXHRcXHRcXHQgICAgIG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSk7XFxuOTE5NjpcXHRcXHRlbHNlXFxuOTE5NzpcXHRcXHRcXHRwYXJhbXMubGlzdGVuX2ludGVydmFsID0gLTE7XFxuOTE5ODpcXHRcXG45MTk5OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRfUDJQX1BTXSlcXG45MjAwOlxcdFxcdFxcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9XFxuOTIwMTpcXHRcXHRcXHRcXHRubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVF9QMlBfUFNdKTtcXG45MjAyOlxcdFxcdGVsc2VcXG45MjAzOlxcdFxcdFxcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9IC0xO1xcbjkyMDQ6XFx0XFxuOTIwNTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKVxcbjkyMDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIwNzpcXHRcXG45MjA4OlxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA9XFxuOTIwOTpcXHRcXHRcXHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuOTIxMDpcXHRcXG45MjExOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XFxuOTIxMjpcXHRcXHRcXHQvKiBJZiBNTERfQUREUiBhdHRyaWJ1dGUgaXMgc2V0IHRoZW4gdGhpcyBpcyBhbiBNTEQgc3RhdGlvblxcbjkyMTM6XFx0XFx0XFx0ICogYW5kIHRoZSBNTERfQUREUiBhdHRyaWJ1dGUgaG9sZHMgdGhlIE1MRCBhZGRyZXNzIGFuZCB0aGVcXG45MjE0OlxcdFxcdFxcdCAqIE1BQyBhdHRyaWJ1dGUgaG9sZHMgZm9yIHRoZSBMSU5LIGFkZHJlc3MuXFxuOTIxNTpcXHRcXHRcXHQgKiBJbiB0aGF0IGNhc2UsIHRoZSBsaW5rX2lkIGlzIGFsc28gZXhwZWN0ZWQgdG8gYmUgdmFsaWQuXFxuOTIxNjpcXHRcXHRcXHQgKi9cXG45MjE3OlxcdFxcdFxcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXFx1MDAzYyAwKVxcbjkyMTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzcuMjQ0MzUxMTE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjMwMzY2MjE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBmb2N1c2luZyBvbiB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgdXBvbiBzZWVpbmcgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGBubDgwMjExX3NldF9zdGF0aW9uYDpcblxuKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIG5sODAyMTFfc2V0X3N0YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGBubDgwMjExX3NldF9zdGF0aW9uYOKApiByaWdodCwgdGhpcyBpcyB3aGVyZSB3ZSBiZWdpbiB0byBjb25maWd1cmUgc3RhdGlvbiBwYXJhbWV0ZXJzIHRocm91Z2ggdGhlIG5sODAyMTEgaW50ZXJmYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBjb250ZXh0IGhlcmUuIFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHMgYmVpbmcgc2V0PyBXaGF0IGtpbmQgb2YgY29udHJvbCBmbG93IGFtIEkgbG9va2luZyBhdD8gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGVuY291bnRlcmVkIGF0IHRoaXMgZW50cnkgcG9pbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBhbnkgcHJlbGltaW5hcnkgY2hlY2tzIGFuZCBzYW5pdHkgdmFsaWRhdGlvbnMgdGhhdCBtYXkgdGFrZSBwbGFjZSBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGZ1bmN0aW9uJ3MgbG9naWMuIEkgYW50aWNpcGF0ZSBzb21lIHNpZ25pZmljYW50IGludGVyYWN0aW9uIHdpdGggdGhlIHdpcmVsZXNzIGRldmljZSdzIGRyaXZlciwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBuZXRsaW5rIG1lc3NhZ2UgaXMgcGFyc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIHNvbWV0aGluZyB0aGUgZHJpdmVyIGNhbiB3b3JrIHdpdGguIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjQzLjU0ODAxNTU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzk5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MTUwOlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tpZHhdKVxcbjkxNTE6XFx0XFx0XFx0XFx0XFx0dHhwd3ItXFx1MDAzZXBvd2VyID0gbmxhX2dldF9zMTYoaW5mby1cXHUwMDNlYXR0cnNbaWR4XSk7XFxuOTE1MjpcXHRcXHRcXHRcXHRlbHNlXFxuOTE1MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTU0OlxcdFxcdFxcdH1cXG45MTU1OlxcdFxcbjkxNTY6XFx0XFx0XFx0KnR4cHdyX3NldCA9IHRydWU7XFxuOTE1NzpcXHRcXHR9IGVsc2Uge1xcbjkxNTg6XFx0XFx0XFx0KnR4cHdyX3NldCA9IGZhbHNlO1xcbjkxNTk6XFx0XFx0fVxcbjkxNjA6XFx0XFxuOTE2MTpcXHRcXHRyZXR1cm4gMDtcXG45MTYyOlxcdH1cXG45MTYzOlxcdFxcbjkxNjQ6XFx0c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuOTE2NTpcXHR7XFxuOTE2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG45MTY3OlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG45MTY4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVxcdTAwM2VuZXRkZXY7XFxuOTE2OTpcXHRcXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcXG45MTcwOlxcdFxcdHU4ICptYWNfYWRkcjtcXG45MTcxOlxcdFxcdGludCBlcnI7XFxuOTE3MjpcXHRcXG45MTczOlxcdFxcdG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XFxuOTE3NDpcXHRcXG45MTc1OlxcdFxcdGlmICghZGV2IFxcdTAwMjZcXHUwMDI2IHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gXFx1MDAyNlxcdTAwMjZcXG45MTc2OlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuOTE3NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTc4OlxcdFxcbjkxNzk6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV9zdGF0aW9uKVxcbjkxODA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkxODE6XFx0XFxuOTE4MjpcXHRcXHQvKlxcbjkxODM6XFx0XFx0ICogQUlEIGFuZCBsaXN0ZW5faW50ZXJ2YWwgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHVuYXNzb2NpYXRlZFxcbjkxODQ6XFx0XFx0ICogc3RhdGlvbi4gSW5jbHVkZSB0aGVzZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIHdpbGwgY2hlY2sgdGhlbSBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo0My41NTA4NTkxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODU1OTE0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBgZGV2YCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGdvdGNoYSB3aXRoIHRoZSBgZGV2YCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBgZGV2YCBjb3VsZCBiZSBhIE5VTEwgcG9pbnRlciB1bmRlciB0d28gc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgd2Rldi1cdTAwM2VpZnR5cGVgIGlzIGBOTDgwMjExX0lGVFlQRV9OQU5gIG9yIGlmIGl0J3MgYE5BTl9EQVRBYC4gVGhpcyBpcyBhIHByZXR0eSBpbXBvcnRhbnQgZGlzdGluY3Rpb24gdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGRvd25zdHJlYW0gY2hlY2tzIGFyZSBnb2luZyB0byBuZWVkIHRvIGFjY29tbW9kYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBgZGV2YCBiZWluZyBOVUxMIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBsZXQncyBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgYGdldF92bGFuYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIGJsb2NrOlxuXG5gYGBjXG5cdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cblx0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuXHRcdHJldCA9IC1FSU5WQUw7XG5cdFx0Z290byBlcnJvcjtcblx0fVxuYGBgXG5cblRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlLiBUaGUgdGVzdCBmb3IgYCFkZXZgIGlzIHRoZSBjcnVjaWFsIHBpZWNlIGhlcmUsIGJlY2F1c2UgaXQncyB0aGUgcG90ZW50aWFsIE5VTEwgY2hlY2sgSSB3YXMganVzdCBjb25zaWRlcmluZy4gSWYgYGRldmAgaXMgTlVMTCwgZHVlIHRvIHRoZSBjb25kaXRpb25zIEkgbm90ZWQgYWJvdmUsIHRoZSBjaGVjayB3aWxsIHBhc3MgYW5kIGxlYWQgdG8gYC1FSU5WQUxgLiBUaGlzIG1ha2VzIHNlbnNlLCBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLiBJZiB3ZSAqZG9uJ3QqIGhhdmUgYSB2YWxpZCAnZGV2JyB3ZSBzaG91bGRuJ3QgY29udGludWUuXG5cblNvLCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIGBnZXRfdmxhbmAgZnVuY3Rpb24sIHdlIG5lZWQgdG8gYmUgdmVyeSBzdXJlIHRoYXQgYGRldmAgaXMgdmFsaWQgYmVmb3JlIHdlIGV2ZW4gZ2V0IHRvIHRoZSBgZXRoZXJfYWRkcl9lcXVhbGAgY2FsbC4gT3RoZXJ3aXNlLCB3ZSBjb3VsZCBiZSBydW5uaW5nIGludG8gc29tZSBuYXN0eSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYWxsIG9mIHRoaXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGluIHRoYXQgYXJlYSBub3csIGFzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWTEFOIGludGVyZmFjZSBpcyBzdGFydGluZyB0byBiZSBjbGVhcmVyIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjQ2LjQwNjc3NjcyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTMwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5NTMwOlxcdFxcdC8qIEhUL1ZIVCByZXF1aXJlcyBRb1MsIGJ1dCBpZiB3ZSBkb24ndCBoYXZlIHRoYXQganVzdCBpZ25vcmUgSFQvVkhUXFxuOTUzMTpcXHRcXHQgKiBhcyB1c2Vyc3BhY2UgbWlnaHQganVzdCBwYXNzIHRocm91Z2ggdGhlIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBJRXNcXG45NTMyOlxcdFxcdCAqIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBlbmZvcmNpbmcgdGhpcyByZXN0cmljdGlvbiBhbmQgcmV0dXJuaW5nIGFuXFxuOTUzMzpcXHRcXHQgKiBlcnJvciBpbiB0aGlzIGNhc2UuXFxuOTUzNDpcXHRcXHQgKi9cXG45NTM1OlxcdFxcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFxcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSkpIHtcXG45NTM2OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaHRfY2FwYSA9IE5VTEw7XFxuOTUzNzpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLnZodF9jYXBhID0gTlVMTDtcXG45NTM4OlxcdFxcbjk1Mzk6XFx0XFx0XFx0LyogSEUsIEVIVCBhbmQgVUhSIHJlcXVpcmUgV01FICovXFxuOTU0MDpcXHRcXHRcXHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhX2xlbiB8fFxcbjk1NDE6XFx0XFx0XFx0ICAgIHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfNmdoel9jYXBhIHx8XFxuOTU0MjpcXHRcXHRcXHQgICAgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYV9sZW4gfHxcXG45NTQzOlxcdFxcdFxcdCAgICBwYXJhbXMubGlua19zdGFfcGFyYW1zLnVocl9jYXBhX2xlbilcXG45NTQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjk1NDU6XFx0XFx0fVxcbjk1NDY6XFx0XFxuOTU0NzpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbjk1NDg6XFx0XFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjk1NDk6XFx0XFx0XFx0aWYgKHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXFx1MDAyNiBTVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEKVxcbjk1NTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTU1MTpcXHRcXHRcXHQvKiBOQU4gTk1JIHN0YXRpb24gbXVzdCBiZSBhZGRlZCBpbiBhc3NvY2lhdGVkIG9yIGF1dGhvcml6ZWQgc3RhdGUgKi9cXG45NTUyOlxcdFxcdFxcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFxcdTAwMjYgKEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpIHxcXG45NTUzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpKSkpXFxuOTU1NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45NTU1OlxcdFxcdH1cXG45NTU2OlxcdFxcbjk1NTc6XFx0XFx0LyogRW5zdXJlIHRoYXQgSFQvVkhUIGNhcGFiaWxpdGllcyBhcmUgbm90IHNldCBmb3IgNiBHSHogSEUgU1RBICovXFxuOTU1ODpcXHRcXHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV82Z2h6X2NhcGEgXFx1MDAyNlxcdTAwMjZcXG45NTU5OlxcdFxcdCAgICAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5odF9jYXBhIHx8IHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEpKVxcbjk1NjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTU2MTpcXHRcXG45NTYyOlxcdFxcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXFxuOTU2MzpcXHRcXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOCk7XFxuOTU2NDpcXHRcXG45NTY1OlxcdFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxuOTU2NjpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbjk1Njc6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbjk1Njg6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XFxuOTU2OTpcXHRcXHRcXHQvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovXFxuOTU3MDpcXHRcXHRcXHRpZiAoIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfQVBfVUFQU0QpIHx8XFxuOTU3MTpcXHRcXHRcXHQgICAgIShwYXJhbXMuc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxcbjk1NzI6XFx0XFx0XFx0XFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayBcXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcXG45NTczOlxcdFxcbjk1NzQ6XFx0XFx0XFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6NDYuNDA3NjA1MzI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2NTQ1NTkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIHN0YXJ0IG9mIGBubDgwMjExX25ld19zdGF0aW9uYCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpdmluZyBpbnRvIGBubDgwMjExX25ld19zdGF0aW9uYCDigJMgSW5pdGlhbCBUaG91Z2h0cyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSAqYmVnaW5zKiB3aGVuIGEgbmV3IHN0YXRpb24gY29ubmVjdHMg4oCTIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsJ3Mgd2lyZWxlc3Mgc3Vic3lzdGVtIGdldHMgaXRzIGhvb2tzIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBpbml0aWFsaXplZCBhbmQgaG93IHRoaXMgY29ubmVjdGlvbiBpcyBiZWluZyByZXByZXNlbnRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBjb25jZXJucyBhcmUgYWx3YXlzIGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG1ha2luZyBzdXJlIHRoaXMgbmV3IHN0YXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlvbidzIGNvbmZpZ3VyYXRpb24gZGF0YSwgbGlrZSBpdHMgTUFDIGFkZHJlc3MsIGFzc29jaWF0ZWQgQlNTSUQsIGFuZCB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24sIGlzIGJlaW5nIHBhc3NlZCBpbi4gQXJlIHdlIHZhbGlkYXRpbmcgdGhpcyBkYXRhIHByb3Blcmx5PyBJcyB0aGVyZSBhbnkgb3Bwb3J0dW5pdHkgZm9yIGluamVjdGlvbiBvZiBtYWxpY2lvdXMgZGF0YSBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGZvciBjaGVja3Mgb24gbGVuZ3RocywgdmFsaWQgTUFDIGFkZHJlc3NlcywgYW5kIGFueSBvdGhlciBzYW5pdHkgY2hlY2tzIHRoZSBkZXZlbG9wZXJzIGhhdmUgaW1wbGVtZW50ZWQuXG5cbk5leHQsIEknbSBnb2luZyB0byBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbmV3IHN0YXRpb24gaXMgYmVpbmcgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gSG93IGFyZSB0aGV5IGxpbmtlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0/IElzIGl0IGEgc2luZ2xlIGFsbG9jYXRpb24sIG9yIGFyZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBJJ2xsIGJlIGtlZXBpbmcgYSBrZWVuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyDigJMgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBNZW1vcnkgbWFuYWdlbWVudCB3aWxsIGJlIGNyaXRpY2FsIOKAkyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBhbmQgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBhbGxvY2F0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHRoYXQgZGVhbGxvY2F0aW9uIGhhcHBlbnMgaW4gdGhlIGNvcnJlY3Qgc2l0dWF0aW9ucywgYXZvaWRpbmcgbWVtb3J5IGxlYWtzLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBldmVudCBvciBjYWxsYmFjayByZWdpc3RyYXRpb24uIERvZXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyIG90aGVyIGFjdGlvbnMgb3Igc2V0IHVwIGZ1dHVyZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3RhdGlvbj8gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdGF0aW9uJ3Mgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhhdCBpbmZvcm1hdGlvbiBpcyBtYWRlIGFjY2Vzc2libGUgdG8gb3RoZXIgc3Vic3lzdGVtcywgbGlrZSB0aGUgbmV0d29ya2luZyBzdGFjayBvciBhbnkgdXNlcnNwYWNlIG1vbml0b3JpbmcgdG9vbHMuIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVuc3VyZSBhbGwgaW5pdGlhbGlzYXRpb24gcm91dGluZXMgYXJlIGNhbGxlZCBhbmQgdGhhdCB0aGUgc3RydWN0dXJlIG9mIHRoZSBzdGF0aW9uIGlzIGluaXRpYWxpemVkIHRvIGEgdmFsaWQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDEzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo1MS4wNjIxNjc1OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTQ1MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKSB7XFxuOTQ1MTpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlX2NhcGEgPVxcbjk0NTI6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKTtcXG45NDUzOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYV9sZW4gPVxcbjk0NTQ6XFx0XFx0XFx0XFx0bmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xcbjk0NTU6XFx0XFxuOTQ1NjpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VIVF9DQVBBQklMSVRZXSkge1xcbjk0NTc6XFx0XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSA9XFxuOTQ1ODpcXHRcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKTtcXG45NDU5OlxcdFxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuID1cXG45NDYwOlxcdFxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VIVF9DQVBBQklMSVRZXSk7XFxuOTQ2MTpcXHRcXG45NDYyOlxcdFxcdFxcdFxcdGlmICghaWVlZTgwMjExX2VodF9jYXBhX3NpemVfb2soKGNvbnN0IHU4ICopcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhLFxcbjk0NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0KGNvbnN0IHU4ICopcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSxcXG45NDY0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuLFxcbjk0NjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UpKVxcbjk0NjY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTQ2NzpcXHRcXHRcXHR9XFxuOTQ2ODpcXHRcXHR9XFxuOTQ2OTpcXHRcXG45NDcwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKSB7XFxuOTQ3MTpcXHRcXHRcXHRpZiAoIXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGEpXFxuOTQ3MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45NDczOlxcdFxcbjk0NzQ6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy51aHJfY2FwYSA9XFxuOTQ3NTpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKTtcXG45NDc2OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudWhyX2NhcGFfbGVuID1cXG45NDc3OlxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1VIUl9DQVBBQklMSVRZXSk7XFxuOTQ3ODpcXHRcXHR9XFxuOTQ3OTpcXHRcXG45NDgwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKSB7XFxuOTQ4MTpcXHRcXHRcXHRwYXJhbXMuZW1sX2NhcF9wcmVzZW50ID0gdHJ1ZTtcXG45NDgyOlxcdFxcdFxcdHBhcmFtcy5lbWxfY2FwID1cXG45NDgzOlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xcbjk0ODQ6XFx0XFx0fVxcbjk0ODU6XFx0XFxuOTQ4NjpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pXFxuOTQ4NzpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSA9XFxuOTQ4ODpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSk7XFxuOTQ4OTpcXHRcXG45NDkwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUzFHX0NBUEFCSUxJVFldKVxcbjk0OTE6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5zMWdfY2FwYSA9XFxuOTQ5MjpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUzFHX0NBUEFCSUxJVFldKTtcXG45NDkzOlxcdFxcbjk0OTQ6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9PUE1PREVfTk9USUZdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjUxLjA2Mjk4ODYyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjM1MjE1Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBJJ20gZGVhbGluZyB3aXRoIGBubDgwMjExX25ld19zdGF0aW9uYCBhbmQgSSdtIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBGdW5jdGlvbidzIEhpc3RvcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgbGluZWFnZSwgdG8gc2VlIHRoZSBjYWxscyB0aGF0IGxlYWQgdXAgdG8gaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMgcGFyYW1vdW50IGhlcmUuIFNvIEnigJltIG1lbnRhbGx5IHNjYW5uaW5nIGJhY2sgdGhyb3VnaCB0aGUgZWFybGllciBsaW5lcywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZC4uLiB3aGF0IHRyaWdnZXJzIHRoaXMgYG5ld19zdGF0aW9uYCBldmVudD8gSXMgaXQgYSBiZWFjb24sIGEgcHJvYmUgcmVxdWVzdCwgYSBtYW5hZ2VtZW50IGZyYW1lPyBLbm93aW5nIHRoYXQgd2lsbCBkZWZpbmUgdGhlIHBvdGVudGlhbCBzaWduaWZpY2FuY2Ugb2YgYW55IGlzc3VlcyBJIGZpbmQuIEknbSBlc3NlbnRpYWxseSByZXZlcnNlIGVuZ2luZWVyaW5nIHRoZSBleGVjdXRpb24gcGF0aCwgbWVudGFsbHkgYnVpbGRpbmcgYSBtZW50YWwgc3RhY2sgb2YgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2VkaW5nIGNvbmRpdGlvbnMuIEknbSBleHBlY3Rpbmcgc29tZSBjbHVlcyB0byBzdXJmYWNlIHNvb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDg3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo1NS4yOTgyMDgxMTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTM2NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTM2NTpcXHRcXG45MzY2OlxcdFxcdFxcdFxcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cXG45MzY3OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcXG45MzY4OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XFxuOTM2OTpcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxcbjkzNzA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM3MTpcXHRcXHRcXHR9XFxuOTM3MjpcXHRcXHR9IGVsc2Uge1xcbjkzNzM6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXFxuOTM3NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45Mzc1OlxcdFxcbjkzNzY6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXFxuOTM3NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45Mzc4OlxcdFxcbjkzNzk6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXFx1MDAyNlxcdTAwMjZcXG45MzgwOlxcdFxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcXG45MzgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzODI6XFx0XFx0fVxcbjkzODM6XFx0XFxuOTM4NDpcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxcbjkzODU6XFx0XFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcbjkzODY6XFx0XFxuOTM4NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MRF9BRERSXSkge1xcbjkzODg6XFx0XFx0XFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcXG45Mzg5OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubWxkX21hYyA9IG1hY19hZGRyO1xcbjkzOTA6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYyA9XFxuOTM5MTpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuOTM5MjpcXHRcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYykpXFxuOTM5MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45Mzk0OlxcdFxcdH0gZWxzZSB7XFxuOTM5NTpcXHRcXHRcXHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG45Mzk2OlxcdFxcdH1cXG45Mzk3OlxcdFxcbjkzOTg6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSkge1xcbjkzOTk6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5zdXBwb3J0ZWRfcmF0ZXMgPVxcbjk0MDA6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKTtcXG45NDAxOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzX2xlbiA9XFxuOTQwMjpcXHRcXHRcXHRcXHRubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XFxuOTQwMzpcXHRcXHR9XFxuOTQwNDpcXHRcXG45NDA1OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXFxuOTQwNjpcXHRcXHRcXHRwYXJhbXMubGlzdGVuX2ludGVydmFsID1cXG45NDA3OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSk7XFxuOTQwODpcXHRcXG45NDA5OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkxBTl9JRF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjU1LjI5OTAxMDA4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDg2MjY1MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBiZWdpbm5pbmcgb2YgYG5sODAyMTFfbmV3X3N0YXRpb25gLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24gYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQncyBnb2luZyBvbiBoZXJlLiBGaXJzdCB0aGluZyBJJ20gZXhwZWN0aW5nIGlzIHRoZSB1c3VhbCBzZXR1cDogc29tZSBwcmVsaW1pbmFyeSBjaGVja3MgdG8gbWFrZSBzdXJlIHdlJ3JlIGV2ZW4gYWxsb3dlZCB0byBkbyB0aGlzIOKAkyBhcmUgd2Ugcm9vdD8gSXMgdGhpcyBuZXRsaW5rIG1lc3NhZ2Ugd2VsbC1mb3JtZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbW90ZWx5IHNhbmU/IEkgbmVlZCB0byB2ZXJpZnkgYWxsIHRoZSBpbnB1dHM6IHRoZSBpbnRlcmZhY2UgKG9idmlvdXNseSEpLCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5ldyBzdGF0aW9uLCBhbmQgYW55IGluaXRpYWwgcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9uIGhpbnRzLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIG9wZXJhdGlvbjsgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBpcyBhIGJpZyBkZWFsIGluIHRoZSA4MDIuMTEgd29ybGQsIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayBpZiBhbGwgdGhlIHBhcmFtZXRlcnMgYXJlIGFjY2VwdGFibGUsIGJlY2F1c2UgdGhlIHdyb25nIHZhbHVlcyBjYW4gZGFtYWdlIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gV2UncmUgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBlbnRyeSwgc28gd2UgbmVlZCBtZW1vcnkgZm9yIHRoYXQgZGF0YSBzdHJ1Y3R1cmUuIEl0J3MgbGlrZWx5IHdlJ2xsIGJlIGFsbG9jYXRpbmcgYSBuZXcgYGNmZzgwMjExX3N0YXRpb25gIHN0cnVjdHVyZSBvciBzaW1pbGFyLCBwcm9iYWJseSBsaW5raW5nIGl0IGludG8gc29tZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgYSBwZXItaW50ZXJmYWNlIGxpc3QuIFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiB0aGlzIG5ldyBzdGF0aW9uLiBOb3cgaXMgdGhlIHRpbWUgdG8gY2hlY2sgdGhlIHJlc291cmNlcyBhdmFpbGFibGUuIElzIHRoZXJlIG1lbW9yeSBhdmFpbGFibGU/XG5cbk9uY2Ugd2UgaGF2ZSBvdXIgbWVtb3J5LCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHNldHRpbmcgdXAgdGhlIHN0YXRpb24ncyBpbml0aWFsIHN0YXRlLiBBcmUgd2UgdXNpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGV2ZXJ5dGhpbmcgb3IsIG1vcmUgbGlrZWx5LCBhcmUgd2UgZ3JhYmJpbmcgc29tZSBvZiB0aGUgcGFyYW1ldGVycyBmcm9tIHRoZSBuZXRsaW5rIG1lc3NhZ2U/IFdlJ2xsIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGFkZHJlc3MsIGl0cyBjb25uZWN0aW9uIHN0YXRlIChhc3NvY2lhdGVkLCBhdXRoZW50aWNhdGVkLCBldGMuKSwgaXRzIGNhcGFiaWxpdGllcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSB2YWx1ZXMgYmVpbmcgc2V0IGFyZSB2YWxpZC4gQXJlIHdlIGNyZWF0aW5nIGEgc3RhdGlvbiBmb3IgYSBzdXBwb3J0ZWQgcmFkaW8/IElzIHRoaXMgYSBzdGFuZGFyZCBhc3NvY2lhdGlvbj9cblxuVGhlIHdob2xlIHByb2Nlc3MgcHJvYmFibHkgaW5jbHVkZXMgc29tZSBsb2NraW5nLiBDcmVhdGluZyBhIG5ldyBzdGF0aW9uIGlzIGEgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YXRlLiBJIGV4cGVjdCBhIG11dGV4IG9yIHJlYWQvd3JpdGUgbG9jayB3aWxsIGJlIGludm9sdmVkLCB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZSBuZXRsaW5rIHJlcXVlc3RzIGRvbid0IHN0b21wIG9uIGVhY2ggb3RoZXIgd2hpbGUgbWVzc2luZyB3aXRoIHRoZSBzYW1lIGhhcmR3YXJlIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBjYWxsYmFja3MgdG8gdGhlIGhhcmR3YXJlIGRyaXZlciBpbnZvbHZlZCBhdCB0aGlzIHN0YWdlIOKAkyB0ZWxsaW5nIHRoZSB3aXJlbGVzcyBjYXJkIHRoYXQgYSBuZXcgc3RhdGlvbiBpcyBjb21pbmcgb24gYm9hcmQuXG5cbkFuZCBmaW5hbGx5LCBvZiBjb3Vyc2UsIGF0IHRoZSBlbmQsIGlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCB0aGVyZSdsbCBiZSBzb21lIG5ldGxpbmsgcmVzcG9uc2UuIEVpdGhlciBhbiBBQ0sgdG8gc2F5LCBcIlllcCwgc3RhdGlvbiBjcmVhdGVkLFwiIG9yIHNvbWUga2luZCBvZiBlcnJvciBjb2RlIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nLiBXZSBhcmUgZXhwZXJ0cywgYW5kIHdlIGtub3cgaG93IHRvIGNoZWNrIHRoZSBjb2Rlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBleHBlY3QgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjU5LjM4NTI3OTI2MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTMzMDpcXHQgb3V0X3B1dF92bGFuOlxcbjkzMzE6XFx0XFx0ZGV2X3B1dChwYXJhbXMudmxhbik7XFxuOTMzMjpcXHRcXG45MzMzOlxcdFxcdHJldHVybiBlcnI7XFxuOTMzNDpcXHR9XFxuOTMzNTpcXHRcXG45MzM2OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjkzMzc6XFx0e1xcbjkzMzg6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuOTMzOTpcXHRcXHRpbnQgZXJyO1xcbjkzNDA6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjkzNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXFx1MDAzZW5ldGRldjtcXG45MzQyOlxcdFxcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xcbjkzNDM6XFx0XFx0dTggKm1hY19hZGRyID0gTlVMTDtcXG45MzQ0OlxcdFxcdHUzMiBhdXRoX2Fzc29jID0gQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkgfFxcbjkzNDU6XFx0XFx0XFx0XFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xcbjkzNDY6XFx0XFxuOTM0NzpcXHRcXHRtZW1zZXQoXFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xcbjkzNDg6XFx0XFxuOTM0OTpcXHRcXHRpZiAoIWRldiBcXHUwMDI2XFx1MDAyNiB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbjkzNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM1MTpcXHRcXG45MzUyOlxcdFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VhZGRfc3RhdGlvbilcXG45MzUzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45MzU0OlxcdFxcbjkzNTU6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG45MzU2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNTc6XFx0XFxuOTM1ODpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbjkzNTk6XFx0XFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkzNjA6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcXG45MzYxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNjI6XFx0XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkzNjM6XFx0XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX05NSV9NQUNdKVxcbjkzNjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM2NTpcXHRcXG45MzY2OlxcdFxcdFxcdFxcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cXG45MzY3OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcXG45MzY4OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XFxuOTM2OTpcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo1OS4zODY5NzUzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAyMzUwNzg1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYDpcblxuKipEaXNzZWN0aW5nIG5sODAyMTEuYydzIENvcmUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDk1OTUtOTYyNSB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dCDigJMgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkIGluIHRoYXQgc2VjdGlvbj8gV2l0aG91dCBrbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpdCdzIGhhcmQgdG8gYmUgcHJlY2lzZSwgYnV0IGJhc2VkIG9uIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgSSdkIHdhZ2VyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5ldGxpbmsgbWVzc2FnZSBoYW5kbGVyLCBxdWl0ZSBwb3NzaWJseSByZWxhdGVkIHRvIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3Igc3RhdHVzIHVwZGF0ZXMuXG5cbk15IGd1dCB0ZWxscyBtZSB0aGlzIHNlZ21lbnQgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIE5MODAyMTEgYXR0cmlidXRlIG9yIGNvbW1hbmQuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgbmV0bGluayBtZXNzYWdlIHR5cGUgdGhpcyBzZWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCAoZS5nLiwgYE5MODAyMTFfQ01EX1NFVF9XSVBIWWAsIGBOTDgwMjExX0NNRF9HRVRfU1RBVElPTmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS5cblxuR2l2ZW4gdGhlIHJhbmdlIG9mIGxpbmVzLCBpdCBtaWdodCBiZSBwYXJzaW5nIHNvbWUgdXNlci1wcm92aWRlZCBpbnB1dCwgdmFsaWRhdGluZyBpdCwgYW5kIHRoZW4gcG9zc2libHkgaW52b2tpbmcgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiAobWF5YmUgaW4gdGhlIG1hYzgwMjExIHN0YWNrKSB0byBlZmZlY3QgYSBjaGFuZ2UgaW4gdGhlIHdpcmVsZXNzIGRldmljZSdzIHN0YXRlLiBJJ20ga2VlcGluZyBteSBleWUgb3V0IGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQXR0cmlidXRlIFBhcnNpbmc6KiogQXJlIHRoZXJlIGFueSBjYWxscyB0byBgbmxhX2dldF8qKClgIGZ1bmN0aW9ucyB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgbmV0bGluayBtZXNzYWdlPyBBcmUgd2UgZGVhbGluZyB3aXRoIGludGVnZXJzLCBzdHJpbmdzLCBuZXN0ZWQgYXR0cmlidXRlcz9cbiogICAqKlZhbGlkYXRpb246KiogV2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGUgaW5jb21pbmcgZGF0YT8gQXJlIHRoZXJlIHNhbml0eSBjaGVja3Mgb24gcmFuZ2VzLCBsZW5ndGhzLCBhbmQgdmFsaWQgdmFsdWVzP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGFyZSBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGhhbmRsZWQ/IEFyZSB0aGVyZSBlcnJvciBjb2RlcyBiZWluZyByZXR1cm5lZCB0byB0aGUgdXNlcj9cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gc3RvcmUgdGhlIHBhcnNlZCBkYXRhIChlLmcuLCBgY2ZnODAyMTFfd2lwaHlgLCBgaWVlZTgwMjExX3ZpZmAsIGV0Yy4pPyBBcmUgYW55IG9mIHRob3NlIHN0cnVjdHVyZXMgYmVpbmcgdXBkYXRlZD9cbiogICAqKkZ1bmN0aW9uIENhbGxzOioqIElzIHRoaXMgc2VjdGlvbiBhIHdyYXBwZXI/IFdoYXQgZnVuY3Rpb25zIGFyZSAqYWN0dWFsbHkqIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIHRvIGNoYW5nZSBzdGF0ZSBvciBjb25maWd1cmUgdGhlIGRldmljZT8gSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgYGNmZzgwMjExXypgIG9yIGBpZWVlODAyMTFfKmAgZnVuY3Rpb24gY2FsbHMuXG5cbkknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlc2UgbGluZXMgb2ZmZXIgbWUgYW55IGluc2lnaHQgaW50byByZWNlbnQgY2hhbmdlcywgYnVncywgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSBpdOKAmXMgcGFydCBvZiBhIG5ldyBmZWF0dXJlIGltcGxlbWVudGF0aW9uLCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBzZWN0aW9uIGlzIGRvaW5nLiBEZXBlbmRpbmcgb24gd2hhdCBpdCBpcywgaXQgY291bGQgYmUgYSBjbHVlIHRvd2FyZCBzb21lIHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDAwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjowOS42MjIwNTgxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU5NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTU5NTpcXHRcXHRcXHQgKiBhZGRlZCBhcyBhc3NvY2lhdGVkIGFueXdheSBzaW5jZSB0aGlzIHdhcyB0aGUgcmVxdWlyZWQgZHJpdmVyXFxuOTU5NjpcXHRcXHRcXHQgKiBiZWhhdmlvdXIgYmVmb3JlIE5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSB3YXNcXG45NTk3OlxcdFxcdFxcdCAqIGludHJvZHVjZWQuXFxuOTU5ODpcXHRcXHRcXHQgKiBJbiBvcmRlciB0byBub3QgYm90aGVyIGRyaXZlcnMgd2l0aCB0aGlzIHF1aXJrIGluIHRoZSBBUElcXG45NTk5OlxcdFxcdFxcdCAqIHNldCB0aGUgZmxhZ3MgaW4gYm90aCB0aGUgbWFzayBhbmQgc2V0IGZvciBuZXcgc3RhdGlvbnMgaW5cXG45NjAwOlxcdFxcdFxcdCAqIHRoaXMgY2FzZS5cXG45NjAxOlxcdFxcdFxcdCAqL1xcbjk2MDI6XFx0XFx0XFx0aWYgKCEocGFyYW1zLnN0YV9mbGFnc19tYXNrIFxcdTAwMjYgYXV0aF9hc3NvYykpIHtcXG45NjAzOlxcdFxcdFxcdFxcdHBhcmFtcy5zdGFfZmxhZ3NfbWFzayB8PSBhdXRoX2Fzc29jO1xcbjk2MDQ6XFx0XFx0XFx0XFx0cGFyYW1zLnN0YV9mbGFnc19zZXQgfD0gYXV0aF9hc3NvYztcXG45NjA1OlxcdFxcdFxcdH1cXG45NjA2OlxcdFxcbjk2MDc6XFx0XFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxuOTYwODpcXHRcXHRcXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XFxuOTYwOTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcXG45NjEwOlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcXG45NjExOlxcdFxcdFxcdGJyZWFrO1xcbjk2MTI6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbjk2MTM6XFx0XFx0XFx0LyogaWdub3JlIHVBUFNEIGRhdGEgKi9cXG45NjE0OlxcdFxcdFxcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXFx1MDAyNj0gflNUQVRJT05fUEFSQU1fQVBQTFlfVUFQU0Q7XFxuOTYxNTpcXHRcXG45NjE2OlxcdFxcdFxcdC8qIGFzc29jaWF0ZWQgaXMgZGlzYWxsb3dlZCAqL1xcbjk2MTc6XFx0XFx0XFx0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpKVxcbjk2MTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTYxOTpcXHRcXHRcXHQvKiBURExTIHBlZXJzIGNhbm5vdCBiZSBhZGRlZCAqL1xcbjk2MjA6XFx0XFx0XFx0aWYgKChwYXJhbXMuc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUikpIHx8XFxuOTYyMTpcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcXG45NjIyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjk2MjM6XFx0XFx0XFx0YnJlYWs7XFxuOTYyNDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuOTYyNTpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XFxuOTYyNjpcXHRcXHRcXHQvKiBpZ25vcmUgdUFQU0QgZGF0YSAqL1xcbjk2Mjc6XFx0XFx0XFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayBcXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcXG45NjI4OlxcdFxcbjk2Mjk6XFx0XFx0XFx0LyogdGhlc2UgYXJlIGRpc2FsbG93ZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6MDkuNjIyODg1MDUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTQ0NzUzNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBWTEFOIEludGVyZmFjZSBDaGVjayBpbiBubDgwMjExKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBnZXRfdmxhbmAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gdmVyaWZ5IGlmIGEgVkxBTiBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBUCBpbnRlcmZhY2UuIFNwZWNpZmljYWxseSwgaXQncyBjb21wYXJpbmcgdGhlIFZMQU4ncyBkZXZpY2UgYWRkcmVzcyAoYHYtXHUwMDNlZGV2X2FkZHJgKSB3aXRoIHRoZSBBUCdzIGRldmljZSBhZGRyZXNzIChgZGV2LVx1MDAzZWRldl9hZGRyYCksIGFuZCBpZiB0aGV5IGRvbid0IG1hdGNoLCBpdCByZXR1cm5zIGFuIGVycm9yIChgLUVJTlZBTGApLiBJdCBzZWVtcyB0aGUgYGRldmAgdmFyaWFibGUgaXMgcGFzc2VkIGludG8gdGhlIGBnZXRfdmxhbigpYCBjYWxsLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlIHRoYXQncyB3b3J0aCBmdXp6aW5nPyBMZXQncyBjb25zdWx0IHRoZSBndWlkZWxpbmVzLlxuXG5SZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZTogY2FuIGl0IGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgbmw4MDIxMWAsIHdoaWNoIGlzIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS4gSSBrbm93IFN5emthbGxlciBnZW5lcmF0ZXMgbmV0bGluayBtZXNzYWdlcyBleHRlbnNpdmVseSBmb3Igbmw4MDIxMS4gU3BlY2lmaWNhbGx5IHVzaW5nIGBzeXpfODAyMTFfam9pbl9pYnNzYCwgd2hpY2ggaXMgYSBuZXRsaW5rIHNvY2tldCBjb21tYW5kLiBBbHNvLCBgbWFjODAyMTFfaHdzaW1gIGNyZWF0ZXMgd2lwaHkvbmV0ZGV2IGluc3RhbmNlcyBmb3Igd2lyZWxlc3MuIFRoaXMgY29uZmlybXMgdGhhdCBubDgwMjExIGlzIHBlcmZlY3RseSByZWFjaGFibGUgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cblxuTm93LCBwb3NpdGl2ZSBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nOiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgdGhpcyBkZWZpbml0ZWx5IGRvZXMuIEl04oCZcyBjb3JlIG5ldHdvcmtpbmcuIEl0IGFsc28gY291bnRzIGFzIGEgZGVmZW5zaXZlIGNoZWNrICh0aGUgVkxBTiBpbnRlcmZhY2UgY2hlY2sgaXRzZWxmKS4gQWxzbywgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gdHJpZ2dlciBpdCB2aWEgYSBuZXRsaW5rIHNvY2tldCBjb21tYW5kLlxuXG5OZWdhdGl2ZSBjcml0ZXJpYTogVGhpcyBpc24ndCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgaXMgY2xlYXJseSBhY2Nlc3NpYmxlIHZpYSB0aGUgbmV0bGluayBzdWJzeXN0ZW0uIFNvIHRoYXQncyBnb29kLlxuXG5TbywgKkkqIGNvbmNsdWRlOiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWdzIGZvciBgbmw4MDIxMS5jYCB0byBlbnN1cmUgaXQncyBjb21waWxlZCwgYW5kIHRoZW4gSSdtIHNldCEgVGltZSB0byBzZWFyY2ggdGhvc2UgTWFrZWZpbGVzIGFuZCBLY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjoyOS41Njc2NDI3NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTUzMTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzA3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjM5OlxcdGJvb2wgXFxcIm5sODAyMTEgdGVzdG1vZGUgY29tbWFuZFxcXCJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy00MC1cXHRoZWxwXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NDE6XFx0ICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTQyLVxcdCAgZmFjdG9yeSBjYWxpYnJhdGlvbiBvciB2YWxpZGF0aW9uIHRvb2xzIGZvciB3aXJlbGVzcyBjaGlwcy5cXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTgtXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjk6Y2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTEwLWNmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cXG4tLVxcbm5ldC93aXJlbGVzcy9hcC5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9jZmc4MDIxMS5oXFx1MDAzZVxcbm5ldC93aXJlbGVzcy9hcC5jOjk6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvYXAuYy0xMC0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2FwLmM9MTQ9c3RhdGljIGludCBfX19jZmc4MDIxMV9zdG9wX2FwKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9hcC5jLTQxLVxcdFxcdGlmIChub3RpZnkpXFxubmV0L3dpcmVsZXNzL2FwLmM6NDI6XFx0XFx0XFx0bmw4MDIxMV9zZW5kX2FwX3N0b3BwZWQod2RldiwgbGlua19pZCk7XFxubmV0L3dpcmVsZXNzL2FwLmMtNDMtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTIzPXZvaWQgY2ZnODAyMTFfY2hhbmRlZl9jcmVhdGUoc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXFxubmV0L3dpcmVsZXNzL2NoYW4uYzoyNTpcXHRcXHRcXHQgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlKVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjYte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNzg9c3RhdGljIGJvb2wgY2ZnODAyMTFfZWRtZ19jaGFuZGVmX3ZhbGlkKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZilcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjYyLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MjYzOmludCBubDgwMjExX2NoYW5fd2lkdGhfdG9fbWh6KGVudW0gbmw4MDIxMV9jaGFuX3dpZHRoIGNoYW5fd2lkdGgpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0yNjQte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMDUtfVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MzA2OkVYUE9SVF9TWU1CT0wobmw4MDIxMV9jaGFuX3dpZHRoX3RvX21oeik7XFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMDctXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0zMDg9c3RhdGljIGJvb2wgY2ZnODAyMTFfdmFsaWRfY2VudGVyX2ZyZXEodTMyIGNlbnRlcixcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjMwOTpcXHRcXHRcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2NoYW5fd2lkdGggd2lkdGgpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMTAte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMTctXFxubmV0L3dpcmVsZXNzL2NoYW4uYzozMTg6XFx0YncgPSBubDgwMjExX2NoYW5fd2lkdGhfdG9fbWh6KHdpZHRoKTtcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMxOS1cXHRpZiAoYncgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz00ODk9aW50IGNmZzgwMjExX2NoYW5kZWZfcHJpbWFyeShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMsXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo0OTA6XFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfY2hhbl93aWR0aCBwcmltYXJ5X2NoYW5fd2lkdGgsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy00OTEtXFx0XFx0XFx0ICAgICB1MTYgKnB1bmN0dXJlZClcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTQ5Mi17XFxubmV0L3dpcmVsZXNzL2NoYW4uYzo0OTM6XFx0aW50IHByaV93aWR0aCA9IG5sODAyMTFfY2hhbl93aWR0aF90b19taHoocHJpbWFyeV9jaGFuX3dpZHRoKTtcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTQ5NC1cXHRpbnQgd2lkdGggPSBjZmc4MDIxMV9jaGFuZGVmX2dldF93aWR0aChjKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9NzQzPWNoZWNrX2NoYW5kZWZfcHJpbWFyeV9jb21wYXQoY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjMSxcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc0NC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqYzIsXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo3NDU6XFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfY2hhbl93aWR0aCBwcmltYXJ5X2NoYW5fd2lkdGgpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy03NDYte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz04Njc9dm9pZCBjZmc4MDIxMV9zZXRfZGZzX3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NjgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjg2OTpcXHRcXHRcXHQgICAgZW51bSBubDgwMjExX2Rmc19zdGF0ZSBkZnNfc3RhdGUpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NzAte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz05MTk9Y2ZnODAyMTFfZGZzX3Blcm1pc3NpdmVfY2hlY2tfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo5MjA6XFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy05MjEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9OTYwPXN0YXRpYyBib29sIGNmZzgwMjExX2Rmc19wZXJtaXNzaXZlX2NoYW4oc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjk2MTpcXHRcXHRcXHRcXHRcXHQgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy05NjItXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9OTkxPXN0YXRpYyBpbnQgY2ZnODAyMTFfZ2V0X2NoYW5zX2Rmc19yZXF1aXJlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtOTkyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjk5MzpcXHRcXHRcXHRcXHRcXHQgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSlcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTk5NC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTEwMTU9aW50IGNmZzgwMjExX2NoYW5kZWZfZGZzX3JlcXVpcmVkKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xMDE2LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTAxNzpcXHRcXHRcXHRcXHQgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTAxOC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2MjI9RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGFuZGVmX3VzYWJsZSk7XFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjIzLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTYyNDpzdGF0aWMgYm9vbCBjZmc4MDIxMV9pcl9wZXJtaXNzaXZlX2NoZWNrX3dkZXYoZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjI1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTU9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNjk2OlxcdFxcdFxcdFxcdFxcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTY5Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE3Mzk9c3RhdGljIGJvb2wgX2NmZzgwMjExX3JlZ19jYW5fYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzQwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTc0MTpcXHRcXHRcXHRcXHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTc0Mi1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcm9oaWJpdGVkX2ZsYWdzLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25sODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI2LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI3OiNpbmNsdWRlIFxcXCJubDgwMjExLmhcXFwiXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yOC0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjk9aW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTAtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTE6XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1Mi1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTcxPXN0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxOTU6XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTgtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxOTk6XFx0XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwMC1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjA4LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjA5OlxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTAtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMy1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxNDpcXHRcXHRcXHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjE1LVxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTg3OD1pbnQgd2lwaHlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtODgxLVxcdGludCByZXM7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo4ODI6XFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTg4My1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIxMC1cXHRjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHJkZXYpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTIxMTpcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIxMi1cXHR3aXBoeV91bmxvY2soXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIyNC1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjEyMjU6XFx0XFx0bmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoXFx1MDAyNnJlcXVlc3QpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIyNi1cXHR9XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTEzMTU9dm9pZCB3aXBoeV91bnJlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEzMzAtXFx0d2lwaHlfbG9jayhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTMzMTpcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMzMi1cXHRyZGV2LVxcdTAwM2V3aXBoeS5yZWdpc3RlcmVkID0gZmFsc2U7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0MzQ9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ0NDpcXHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDUtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NzktXFx0d2lwaHlfd29ya19jYW5jZWwod2Rldi1cXHUwMDNld2lwaHksIFxcdTAwMjZ3ZGV2LVxcdTAwM2VjcW1fcnNzaV93b3JrKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0ODA6XFx0LyogZGVsZXRlZCBmcm9tIHRoZSBsaXN0LCBzbyBjYW4ndCBiZSBmb3VuZCBmcm9tIG5sODAyMTEgYW55IG1vcmUgKi9cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0ODEtXFx0Y3FtX2NvbmZpZyA9IHJjdV9hY2Nlc3NfcG9pbnRlcih3ZGV2LVxcdTAwM2VjcW1fY29uZmlnKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTUxOT12b2lkIGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTUyMDpcXHRcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsIGludCBudW0pXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTIxLXtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTY3ND12b2lkIGNmZzgwMjExX3JlZ2lzdGVyX3dkZXYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjk3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTY5ODpcXHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTktfVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0yMDYzPXN0YXRpYyBpbnQgX19pbml0IGNmZzgwMjExX2luaXQodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjA3OC1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIwNzk6XFx0ZXJyID0gbmw4MDIxMV9pbml0KCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDgwLVxcdGlmIChlcnIpXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMDgxOlxcdFxcdGdvdG8gb3V0X2ZhaWxfbmw4MDIxMTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwODItXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMDAtXFx0ZGVidWdmc19yZW1vdmUoaWVlZTgwMjExX2RlYnVnZnNfZGlyKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxMDE6XFx0bmw4MDIxMV9leGl0KCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTAyOm91dF9mYWlsX25sODAyMTE6XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTAzLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0yMTEzPXN0YXRpYyB2b2lkIF9fZXhpdCBjZmc4MDIxMV9leGl0KHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMTUtXFx0ZGVidWdmc19yZW1vdmUoaWVlZTgwMjExX2RlYnVnZnNfZGlyKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxMTY6XFx0bmw4MDIxMV9leGl0KCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTE3LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD0zMTc9c3RydWN0IGNmZzgwMjExX2NxbV9jb25maWcge1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC0zMjAtXFx0czMyIGxhc3RfcnNzaV9ldmVudF92YWx1ZTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjMyMTpcXHRlbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IGxhc3RfcnNzaV9ldmVudF90eXBlO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtMzIyLVxcdGJvb2wgdXNlX3JhbmdlX2FwaTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NDc3PWludCBjZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDc4OlxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBubDgwMjExX2lmdHlwZSBudHlwZSxcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTQ3OS1cXHRcXHRcXHQgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD00OTU9dm9pZCBjZmc4MDIxMV9zZXRfZGZzX3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NvcmUuaC00OTYtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjQ5NzpcXHRcXHRcXHQgICAgZW51bSBubDgwMjExX2Rmc19zdGF0ZSBkZnNfc3RhdGUpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDk4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01NTM9aW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTU0OlxcdFxcdFxcdFxcdCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgdTMyIGJlYWNvbl9pbnQpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTU1LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NTU2PXZvaWQgY2ZnODAyMTFfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NTc6XFx0XFx0XFx0ICAgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLCBpbnQgbnVtKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU1OC1cXG4tLVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmM9ODQ9c3RhdGljIHNzaXplX3QgaHQ0MGFsbG93X21hcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuYy05MC1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgYnVmX3NpemUgPSBQQUdFX1NJWkUsIGk7XFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuYzo5MTpcXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmMtOTItXFx0c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0LSNpbmNsdWRlIFxcXCJ3ZXh0LWNvbXBhdC5oXFxcIlxcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTU6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE2LSNpbmNsdWRlIFxcXCJyZGV2LW9wcy5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOT12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy00Mi1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjQzOlxcdG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi1cXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cXHUwMDNlYnNzaWQsXFxubmV0L3dpcmVsZXNzL2lic3MuYy00NC1cXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9OTE9aW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTEzLVxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTE0OlxcdFxcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XFxubmV0L3dpcmVsZXNzL2lic3MuYy0xMTUtXFx0XFx0dTMyIGZsYWc7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTIxOT1pbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMjItXFx0c3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjayA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMjM6XFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIyNC1cXHRpbnQgaSwgZXJyO1xcbi0tXFxubmV0L3dpcmVsZXNzL21lc2guYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvbWVzaC5jOjk6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvbWVzaC5jLTEwLSNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWVzaC5jPTEwMj1pbnQgX19jZmc4MDIxMV9qb2luX21lc2goc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21lc2guYy0xMzktXFx0XFx0LyogaWYgd2UgZG9uJ3QgaGF2ZSB0aGF0IGVpdGhlciwgdXNlIHRoZSBmaXJzdCB1c2FibGUgY2hhbm5lbCAqL1xcbm5ldC93aXJlbGVzcy9tZXNoLmM6MTQwOlxcdFxcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XFxubmV0L3dpcmVsZXNzL21lc2guYy0xNDEtXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9ubDgwMjExLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xOS0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjA6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIxLSNpbmNsdWRlIFxcXCJyZGV2LW9wcy5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0yND12b2lkIGNmZzgwMjExX3J4X2Fzc29jX3Jlc3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtOTYtXFxubmV0L3dpcmVsZXNzL21sbWUuYzo5NzpcXHRubDgwMjExX3NlbmRfcnhfYXNzb2MocmRldiwgZGV2LCBkYXRhKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTk4LVxcdC8qIHVwZGF0ZSBjdXJyZW50X2JzcyBldGMuLCBjb25zdW1lcyB0aGUgYnNzIHJlZmVyZW5jZSAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU9c3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc19hdXRoKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExOS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMDpcXHRubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCB3ZGV2LVxcdTAwM2VuZXRkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMS1cXHRjZmc4MDIxMV9zbWVfcnhfYXV0aCh3ZGV2LCBidWYsIGxlbik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEyND1zdGF0aWMgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX2RlYXV0aChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMzMtXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMzQ6XFx0bmw4MDIxMV9zZW5kX2RlYXV0aChyZGV2LCB3ZGV2LVxcdTAwM2VuZXRkZXYsIGJ1ZiwgbGVuLCByZWNvbm5lY3QsIEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM1LVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xNDM9c3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc19kaXNhc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xNTItXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxNTM6XFx0bmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHJkZXYsIHdkZXYtXFx1MDAzZW5ldGRldiwgYnVmLCBsZW4sIHJlY29ubmVjdCxcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE1NC1cXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9MjAxPXZvaWQgY2ZnODAyMTFfYXV0aF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0yMDgtXFxubmV0L3dpcmVsZXNzL21sbWUuYzoyMDk6XFx0bmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChyZGV2LCBkZXYsIGFkZHIsIEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjEwLVxcdGNmZzgwMjExX3NtZV9hdXRoX3RpbWVvdXQod2Rldik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTIxND12b2lkIGNmZzgwMjExX2Fzc29jX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjI1LVxcdGlmIChkYXRhLVxcdTAwM2V0aW1lb3V0KSB7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoyMjY6XFx0XFx0bmw4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQocmRldiwgZGV2LCBhZGRyLCBHRlBfS0VSTkVMKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIyNy1cXHRcXHRjZmc4MDIxMV9zbWVfYXNzb2NfdGltZW91dCh3ZGV2KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjI3ODpcXHRcXHRcXHRcXHQgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZSwgaW50IGtleV9pZCxcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI3OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICp0c2MsIGdmcF90IGdmcClcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjk5LVxcdHRyYWNlX2NmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoZGV2LCBhZGRyLCBrZXlfdHlwZSwga2V5X2lkLCB0c2MpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MzAwOlxcdG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShyZGV2LCBkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYywgZ2ZwKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTMwMS19XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwMTA9Ym9vbCBjZmc4MDIxMV9yeF9tZ210X2V4dChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMDUxLVxcdFxcdC8qIEluZGljYXRlIHRoZSByZWNlaXZlZCBBY3Rpb24gZnJhbWUgdG8gdXNlciBzcGFjZSAqL1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTA1MjpcXHRcXHRpZiAobmw4MDIxMV9zZW5kX21nbXQocmRldiwgd2RldiwgcmVnLVxcdTAwM2VubHBvcnRpZCwgaW5mbyxcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEwNTMtXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwNzM9dm9pZCBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMDgzLVxcdHVuc2lnbmVkIGxvbmcgdGltZV9kZnNfdXBkYXRlO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTA4NDpcXHRlbnVtIG5sODAyMTFfcmFkYXJfZXZlbnQgcmFkYXJfZXZlbnQ7XFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMDg1LVxcdGludCBiYW5kaWQsIGk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExMjgtXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMTI5OlxcdFxcdFxcdFxcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTEzMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJhZGFyX2V2ZW50LCBOVUxMLFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU1PXZvaWQgX19jZmc4MDIxMV9yYWRhcl9ldmVudChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTc1LVxcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTE3NjpcXHRubDgwMjExX3JhZGFyX25vdGlmeShyZGV2LCBjaGFuZGVmLCBOTDgwMjExX1JBREFSX0RFVEVDVEVELCBOVUxMLCBnZnApO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE3Ny1cXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9MTE4Mz12b2lkIGNmZzgwMjExX2NhY19ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE4NC1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMTg1OlxcdFxcdFxcdGVudW0gbmw4MDIxMV9yYWRhcl9ldmVudCBldmVudCwgZ2ZwX3QgZ2ZwLFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE4Ni1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTIyNi1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMjc6XFx0bmw4MDIxMV9yYWRhcl9ub3RpZnkocmRldiwgY2hhbmRlZiwgZXZlbnQsIG5ldGRldiwgZ2ZwKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMjgtfVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xMjMyPV9fY2ZnODAyMTFfYmFja2dyb3VuZF9jYWNfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMjM0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMzU6XFx0XFx0XFx0XFx0ZW51bSBubDgwMjExX3JhZGFyX2V2ZW50IGV2ZW50KVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTIzNi17XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyNjUtXFx0bmV0ZGV2ID0gd2RldiA/IHdkZXYtXFx1MDAzZW5ldGRldiA6IE5VTEw7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMjY2OlxcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIGNoYW5kZWYsIGV2ZW50LCBuZXRkZXYsIEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTI2Ny19XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEzNTM9dm9pZCBjZmc4MDIxMV9zdG9wX3JhZGFyX2RldGVjdGlvbihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMzY4LVxcdFxcdGNmZzgwMjExX3NldF9jYWNfc3RhdGUod2lwaHksIFxcdTAwMjZjaGFuZGVmLCBmYWxzZSk7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMzY5OlxcdFxcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIFxcdTAwMjZjaGFuZGVmLCBOTDgwMjExX1JBREFSX0NBQ19BQk9SVEVELFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM3MC1cXHRcXHRcXHRcXHQgICAgIHdkZXYtXFx1MDAzZW5ldGRldiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTE0MTk9dm9pZCBjZmc4MDIxMV9tbG9fcmVjb25mX2FkZF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE0NzQtXFx0d2Rldi1cXHUwMDNldmFsaWRfbGlua3MgfD0gZGF0YS1cXHUwMDNlYWRkZWRfbGlua3M7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoxNDc1OlxcdG5sODAyMTFfbWxvX3JlY29uZl9hZGRfZG9uZShkZXYsIGRhdGEpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTQ3Ni19XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZWVlODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9ubDgwMjExLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwLSNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMTojaW5jbHVkZSBcXFwibmw4MDIxMS5oXFxcIlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzItI2luY2x1ZGUgXFxcInJlZy5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0zNC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjM1OnN0YXRpYyBpbnQgbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDAtLyogdGhlIG5ldGxpbmsgZmFtaWx5ICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0MTpzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTFfZmFtO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00My0vKiBtdWx0aWNhc3QgZ3JvdXBzICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NDplbnVtIG5sODAyMTFfbXVsdGljYXN0X2dyb3VwcyB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00NS1cXHROTDgwMjExX01DR1JQX0NPTkZJRyxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NDpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWNncnBzW10gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NS1cXHRbTkw4MDIxMV9NQ0dSUF9DT05GSUddID0geyAubmFtZSA9IE5MODAyMTFfTVVMVElDQVNUX0dST1VQX0NPTkZJRyB9LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz00Mzg9c3RhdGljIGludCB2YWxpZGF0ZV91aHJfb3BlcmF0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ0OS0vKiBwb2xpY3kgZm9yIHRoZSBhdHRyaWJ1dGVzICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05VTV9OTDgwMjExX0FUVFJdO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDUxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NDUzOm5sODAyMTFfZnRtX3Jlc3BvbmRlcl9wb2xpY3lbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDU0LVxcdFtOTDgwMjExX0ZUTV9SRVNQX0FUVFJfRU5BQkxFRF0gPSB7IC50eXBlID0gTkxBX0ZMQUcsIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQ2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ2MjpubDgwMjExX3Btc3JfZnRtX3JlcV9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDYzLVxcdFtOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0FTQVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQ5NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ5NjpubDgwMjExX3Btc3JfcmVxX2RhdGFfcG9saWN5W05MODAyMTFfUE1TUl9UWVBFX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDk3LVxcdFtOTDgwMjExX1BNU1JfVFlQRV9GVE1dID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ5ODpcXHRcXHROTEFfUE9MSUNZX05FU1RFRChubDgwMjExX3Btc3JfZnRtX3JlcV9hdHRyX3BvbGljeSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00OTktfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTAyOm5sODAyMTFfcG1zcl9yZXFfYXR0cl9wb2xpY3lbTkw4MDIxMV9QTVNSX1JFUV9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTAzLVxcdFtOTDgwMjExX1BNU1JfUkVRX0FUVFJfREFUQV0gPVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTA0OlxcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9yZXFfZGF0YV9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTA1LVxcdFtOTDgwMjExX1BNU1JfUkVRX0FUVFJfR0VUX0FQX1RTRl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTA5Om5sODAyMTFfcG1zcl9wZWVyX2F0dHJfcG9saWN5W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MTAtXFx0W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfQUREUl0gPSBOTEFfUE9MSUNZX0VUSF9BRERSLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTExOlxcdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX0NIQU5dID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEyLVxcdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX1JFUV0gPVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTEzOlxcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9yZXFfYXR0cl9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTE0LVxcdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX1JFU1BdID0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTIwOm5sODAyMTFfcG1zcl9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfQVRUUl9NQVggKyAxXSA9IHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyMS1cXHRbTkw4MDIxMV9QTVNSX0FUVFJfTUFYX1BFRVJTXSA9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyNS1cXHRbTkw4MDIxMV9QTVNSX0FUVFJfUEVFUlNdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUyNjpcXHRcXHROTEFfUE9MSUNZX05FU1RFRF9BUlJBWShubDgwMjExX3Btc3JfcGVlcl9hdHRyX3BvbGljeSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MjctfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ1PWhlX2Jzc19jb2xvcl9wb2xpY3lbTkw4MDIxMV9IRV9CU1NfQ09MT1JfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3R4YXR0cl9wb2xpY3lbTkw4MDIxMV9UWFJBVEVfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTItXFx0W05MODAyMTFfVFhSQVRFX0xFR0FDWV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTU1LVxcdFxcdFxcdFxcdC5sZW4gPSBOTDgwMjExX01BWF9TVVBQX0hUX1JBVEVTIH0sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTY6XFx0W05MODAyMTFfVFhSQVRFX1ZIVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV90eHJhdGVfdmh0KSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTctXFx0W05MODAyMTFfVFhSQVRFX0dJXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1ODpcXHRbTkw4MDIxMV9UWFJBVEVfSEVdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oc2l6ZW9mKHN0cnVjdCBubDgwMjExX3R4cmF0ZV9oZSkpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTU5LVxcdFtOTDgwMjExX1RYUkFURV9IRV9HSV0gPSAgTkxBX1BPTElDWV9SQU5HRShOTEFfVTgsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBOTDgwMjExX1JBVEVfSU5GT19IRV80WExURiksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjU6XFx0W05MODAyMTFfVFhSQVRFX0VIVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG5sODAyMTFfdHhyYXRlX2VodCkpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY2LVxcdFtOTDgwMjExX1RYUkFURV9FSFRfR0ldID0gIE5MQV9QT0xJQ1lfUkFOR0UoTkxBX1U4LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NzY6bmw4MDIxMV90aWRfY29uZmlnX2F0dHJfcG9saWN5W05MODAyMTFfVElEX0NPTkZJR19BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTc3LVxcdFtOTDgwMjExX1RJRF9DT05GSUdfQVRUUl9WSUZfU1VQUF0gPSB7IC50eXBlID0gTkxBX1U2NCB9LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTMtXFx0W05MODAyMTFfVElEX0NPTkZJR19BVFRSX1RYX1JBVEVdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU5NDpcXHRcXHRcXHROTEFfUE9MSUNZX05FU1RFRChubDgwMjExX3R4YXR0cl9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTk1LX07XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU5ODpubDgwMjExX2ZpbHNfZGlzY292ZXJ5X3BvbGljeVtOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTktXFx0W05MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9JTlRfTUlOXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEwMDAwKSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjA4Om5sODAyMTFfdW5zb2xfYmNhc3RfcHJvYmVfcmVzcF9wb2xpY3lbTkw4MDIxMV9VTlNPTF9CQ0FTVF9QUk9CRV9SRVNQX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02MDktXFx0W05MODAyMTFfVU5TT0xfQkNBU1RfUFJPQkVfUkVTUF9BVFRSX0lOVF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAyMCksXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTYyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjYyNzpubDgwMjExX21ic3NpZF9jb25maWdfcG9saWN5W05MODAyMTFfTUJTU0lEX0NPTkZJR19BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjI4LVxcdFtOTDgwMjExX01CU1NJRF9DT05GSUdfQVRUUl9NQVhfSU5URVJGQUNFU10gPSBOTEFfUE9MSUNZX01JTihOTEFfVTgsIDIpLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Mzk6bmw4MDIxMV9zdGFfd21lX3BvbGljeVtOTDgwMjExX1NUQV9XTUVfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NDAtXFx0W05MODAyMTFfU1RBX1dNRV9VQVBTRF9RVUVVRVNdID0geyAudHlwZSA9IE5MQV9VOCB9LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2NDU6bmw4MDIxMV9zMWdfc2hvcnRfYmVhY29uW05MODAyMTFfUzFHX1NIT1JUX0JFQUNPTl9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjQ2LVxcdFtOTDgwMjExX1MxR19TSE9SVF9CRUFDT05fQVRUUl9IRUFEXSA9XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY1NTpubDgwMjExX25hbl9iYW5kX2NvbmZfcG9saWN5W05MODAyMTFfTkFOX0JBTkRfQ09ORl9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjU2LVxcdFtOTDgwMjExX05BTl9CQU5EX0NPTkZfQkFORF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTgsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY2NjpubDgwMjExX25hbl9wZWVyX21hcF9wb2xpY3lbTkw4MDIxMV9OQU5fUEVFUl9NQVBfQVRUUl9NQVggKyAxXSA9IHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY2Ny1cXHRbTkw4MDIxMV9OQU5fUEVFUl9NQVBfQVRUUl9NQVBfSURdID0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCAxNSksXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY3MzpubDgwMjExX25hbl9jb25mX3BvbGljeVtOTDgwMjExX05BTl9DT05GX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NzQtXFx0W05MODAyMTFfTkFOX0NPTkZfQ0xVU1RFUl9JRF0gPVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02ODItXFx0W05MODAyMTFfTkFOX0NPTkZfQkFORF9DT05GSUdTXSA9XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2ODM6XFx0XFx0TkxBX1BPTElDWV9ORVNURURfQVJSQVkobmw4MDIxMV9uYW5fYmFuZF9jb25mX3BvbGljeSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02ODQtXFx0W05MODAyMTFfTkFOX0NPTkZfU0NBTl9QRVJJT0RdID0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjkwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjkxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjkyLVxcdC5taW4gPSAwLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcV9yYW5nZSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjk5LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzAwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTcwMS1cXHRbMF0gPSB7IC5zdHJpY3Rfc3RhcnRfdHlwZSA9IE5MODAyMTFfQVRUUl9IRV9PQlNTX1BEIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgwNC1cXHRbTkw4MDIxMV9BVFRSX1NUQV9GTEFHUzJdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjgwNTpcXHRcXHROTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV9zdGFfZmxhZ191cGRhdGUpKSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgwNi1cXHRbTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODYxLVxcdFtOTDgwMjExX0FUVFJfUk9BTV9TVVBQT1JUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODYyOlxcdFtOTDgwMjExX0FUVFJfU1RBX1dNRV0gPSBOTEFfUE9MSUNZX05FU1RFRChubDgwMjExX3N0YV93bWVfcG9saWN5KSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg2My1cXHRbTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fTUFUQ0hdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTU5LVxcdFtOTDgwMjExX0FUVFJfQkFORFNdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk2MDpcXHRbTkw4MDIxMV9BVFRSX05BTl9DT05GSUddID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9uYW5fY29uZl9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYxLVxcdFtOTDgwMjExX0FUVFJfTkFOX0ZVTkNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTY4LVxcdFtOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9SU1NJX0FESlVTVF0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5Njk6XFx0XFx0LmxlbiA9IHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV9ic3Nfc2VsZWN0X3Jzc2lfYWRqdXN0KVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTcwLVxcdH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk5MS1cXHRbTkw4MDIxMV9BVFRSX0ZUTV9SRVNQT05ERVJdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk5MjpcXHRcXHROTEFfUE9MSUNZX05FU1RFRChubDgwMjExX2Z0bV9yZXNwb25kZXJfcG9saWN5KSxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6MzAuMTI3MTc5ODcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxMzcyNDMyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBjZmc4MDIxMSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBjZmc4MDIxMWAgS2NvbmZpZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGljdGF0ZSB0aGUgY2FwYWJpbGl0aWVzIGFuZCBmZWF0dXJlcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgd2lyZWxlc3Mgc3RhY2suIEknbGwgd2FudCB0byBxdWlja2x5IHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGRhdGFiYXNlIGFuZCBkcml2ZXIgbW9kZWwsIGVuc3VyaW5nIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvdmVybHkgcmVzdHJpY3RpdmUgZGVmYXVsdHMuIEFyZSB0aGVyZSBhbnkgbmV3IGFkZGl0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZmVhdHVyZSBzZXRzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgd2lyZWxlc3Mgc3RhbmRhcmRzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaXMgYWJsZSB0byBjdXN0b21pemUgdGhlIHdpcmVsZXNzIGVudmlyb25tZW50IGluIHRoZSBrZXJuZWwgd2l0aCB0aGVzZSBjb25maWd1cmF0aW9ucy4gRXNzZW50aWFsbHksIEknbSBjaGVja2luZyBmb3IgYW55dGhpbmcgdGhhdCdzIGNoYW5nZWQgZnVuZGFtZW50YWxseSwgYnJva2VuLCBvciBuZWVkcyBvcHRpbWl6YXRpb24uIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgcG9zc2liaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgdGhhdCB0aGUgS2NvbmZpZyBpbXBvc2VzIG9uIHRoZSBjb3JlIG9mIG91ciB3aXJlbGVzcyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzMzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozOC4yNjQ0MjYwMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGlmIENGRzgwMjExXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuICAzOTpcXHRcXHRib29sIFxcXCJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjM4LjI2NDU1NDAwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzI3NjE4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBNb2R1bGUgQ29uc3RydWN0aW9uIC0gQ0ZHODAyMTEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBjZmc4MDIxMWAgZ2V0cyBidWlsdCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgQ0ZHODAyMTFgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGF0J3Mgd2hhdCBjb250cm9scyB0aGUgY3JlYXRpb24gb2YgYG5ldC93aXJlbGVzcy9jZmc4MDIxMS5rb2AsIG9yLCBvZiBjb3Vyc2UsIGlmIGl0J3MgYmFrZWQgaW50byB0aGUga2VybmVsLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLCBzbyBsZXQncyBkaWcgaW50byB0aGUgYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuXG5cblllcCwgdGhlcmUgaXQgaXMuIFRoZSBNYWtlZmlsZSBzaG93cyBgY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vYCwgcHJvdmluZyB0aGF0IGBubDgwMjExLm9gIGlzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IG9mIHRoZSBgY2ZnODAyMTFgIG1vZHVsZS4gQW5kLCBhcyBleHBlY3RlZCwgYG9iai0kKENPTkZJR19DRkc4MDIxMSkgKz0gY2ZnODAyMTEub2AgY29uZmlybXMgdGhhdCB0aGUgd2hvbGUgYGNmZzgwMjExLm9gIG9iamVjdCBpcyBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYENGRzgwMjExYCBjb25maWd1cmF0aW9uIHNldHRpbmcuIE5vdGhpbmcgc3VycHJpc2luZyBoZXJlLCBidXQgZ29vZCB0byBoYXZlIGEgc29saWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjQzLjk5MjE3NTc5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxuICAgMzpcXHRvYmoteSArPSB0ZXN0cy9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgKz0gd2V4dC1jb3JlLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19XRVhUX1BST0MpICs9IHdleHQtcHJvYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfV0VYVF9QUklWKSArPSB3ZXh0LXByaXYub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm9cXG4gIDEwOlxcdGNmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cXG4gIDExOlxcdGNmZzgwMjExLXkgKz0gbWljaGFlbC1taWMubyBwbXNyLm9cXG4gIDEyOlxcdGNmZzgwMjExLSQoQ09ORklHX09GKSArPSBvZi5vXFxuICAxMzpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm9cXG4gIDE0OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbiAgMTc6XFx0XFxuICAxODpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVMpICs9IHNoaXBwZWQtY2VydHMub1xcbiAgMTk6XFx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxcbiAgMjA6XFx0Y2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0XFxuICAyMzpcXHQkKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxcbiAgMjQ6XFx0XFx0QCQoa2VjaG8pIFxcXCIgIEdFTiAgICAgJEBcXFwiXFxuICAyNTpcXHRcXHQkKFEpKGVjaG8gJyNpbmNsdWRlIFxcXCJyZWcuaFxcXCInOyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjQzLjk5MjI3ODc0NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjY3NjI2Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGllY2UgaGVyZSBpcyBgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGNvcmUuIE5vdywgaWYgSSdtIHNpbXVsYXRpbmcgd2lyZWxlc3MgZGV2aWNlcywgd2hpY2ggSSBvZnRlbiBkbyBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQsIHRoZSByZWFsIGRyaXZlciBsaWtlbHkgYmVjb21lcyBlaXRoZXIgYE1BQzgwMjExX0hXU0lNYCBvciBwb3RlbnRpYWxseSBqdXN0IHVzaW5nIGBOTDgwMjExYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGlzIGJ5IGRpZ2dpbmcgZGVlcGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9IV1NJTWAsIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NDguNjU5OTA5NjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYxNzI5Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjUwLjgyMTY0NTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzODE5OTgwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqSW52ZXN0aWdhdGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgSSBtaWdodCBmaW5kIHdpdGhpbiBhIEtjb25maWcgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4gSXQncyBsaWtlbHkgZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipGZWF0dXJlIEZsYWdzOioqIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHZpcnR1YWwgd2lyZWxlc3MgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWU/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBvcHRpb24uXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGVzZSB2aXJ0dWFsIGRyaXZlcnM/IFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoZXNlIGRyaXZlcnMgYmVjb21lIGF2YWlsYWJsZT8gSSBleHBlY3QgdG8gZmluZCBkZXBlbmRlbmNpZXMgb24gY29yZSB3aXJlbGVzcyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIG9yIHBlcmhhcHMgc3BlY2lmaWMgaGFyZHdhcmUuXG4qICAgKipEZWZhdWx0czoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucz8gQXJlIHRoZXkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGJ5IGRlZmF1bHQsIG9yIGFyZSB0aGV5IG1vZHVsYXJpemVkPyBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgb3V0IG9mIHRoZSBib3guXG4qICAgKipIZWxwIFRleHQ6KiogSSBob3BlIHRoZSBLY29uZmlnIGZpbGUgaGFzIHdlbGwtd3JpdHRlbiBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBvcHRpb25zIGFuZCBleHBsYWluIHRoZWlyIHB1cnBvc2UuIFRoZSBjbGFyaXR5IG9mIHRoZSBoZWxwIHRleHQgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZy5cbiogICAqKkFyY2hpdGVjdHVyZS1TcGVjaWZpYyBPcHRpb25zOioqIElzIHRoZXJlIGFueXRoaW5nIGNvbmRpdGlvbmFsPyBBcmUgYW55IG9mIHRoZSBvcHRpb25zIHRpZWQgdG8gc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBvciBoYXJkd2FyZSBwbGF0Zm9ybXM/IEkgd2lsbCBhbHNvIGxvb2sgZm9yIGhpbnRzIG9mIGhvdyBpdCBkaWZmZXJzLlxuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBNeSBob3BlIGlzIHRoYXQgaXQgcmVmZXJlbmNlcyBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciByZWxhdGVkIGZpbGVzLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgdGhpcyBpbiB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24uXG5cbkVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBjdXN0b21pemF0aW9uLCBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmsgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTcuMjAzNjQ2NjExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjb25maWcgTUFDODAyMTFfSFdTSU1cXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAgIDY6XFx0XFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gICA3OlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcXG4gICA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xcbiAgIDk6XFx0XFx0ICB0byB1c2UgdGhpcyB0b29sLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgMTI6XFx0XFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVklSVF9XSUZJXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XFxuICAxOTpcXHRcXHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTcuMjAzNzc0NjExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMjU1ODE4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiB0aGUgV2lyZWxlc3MgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGdvZXMgbGlrZSB0aGlzOiBmaXJzdCwgbGV0J3MgcGlucG9pbnQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZ2V0X3ZsYW5gLCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHJlc2lkaW5nIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gR29vZCwgZ290IHRoYXQuIE5vdywgYWxvbmdzaWRlIHRoYXQsIEkgc2VlIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFyZSBhbHNvIGludm9sdmVkLlxuXG5NeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgaW5kZWVkIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBubDgwMjExLmNgIGFzIEkgc3VzcGVjdC4gQWZ0ZXIgdGhpcywgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIFNvIEknbGwgaW1tZWRpYXRlbHkgc2hpZnQgdG8gdHJhY2luZyB0aGVpciByZWZlcmVuY2VzIHdpdGhpbiB0aGUgc2FtZSBmaWxlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIFRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbnNpZ2h0cyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggd2lsbCBicmVhayBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMjAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzowMS4zMjkzNTkxMTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NjQxNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfc2V0X3N0YXRpb258bmw4MDIxMV9uZXdfc3RhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmM9OTA1MT1zdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX2NoYW5uZWxfaW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MDc2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTA3NzpzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb25fdGRscyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTA3OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz05MTMxPXN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9zdGFfdHhwb3dlcl9zZXR0aW5nKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNjMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MTY0OnN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTE2NS17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDItXFx0LyogSW5jbHVkZSBwYXJhbWV0ZXJzIGZvciBURExTIHBlZXIgKHdpbGwgY2hlY2sgbGF0ZXIpICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzAzOlxcdGVyciA9IG5sODAyMTFfc2V0X3N0YXRpb25fdGRscyhpbmZvLCBcXHUwMDI2cGFyYW1zKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDQtXFx0aWYgKGVycilcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMzNS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjkzMzY6c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzM3LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzNy1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTgzODpcXHRcXHQuZG9pdCA9IG5sODAyMTFfc2V0X3N0YXRpb24sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzOS1cXHRcXHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTg0NC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTg0NTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfbmV3X3N0YXRpb24sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTg0Ni1cXHRcXHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzowMS40MTYwMDc0NTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM2ODg4MzA4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBTeW1ib2wgVmlzaWJpbGl0eSBpbiBjZmc4MDIxMSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgY2ZnODAyMTFgIGhhbmRsZXMgc3RhdGlvbiBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBgTkw4MDIxMV9DTURfU0VUX1NUQVRJT05gIGFuZCBgTkw4MDIxMV9DTURfTkVXX1NUQVRJT05gLiBJIHNlZSB0aGF0IGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFyZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLCB0aGUgYGRvaXRgIG1ldGhvZHMgd2l0aGluIGBnZW5sX29wc2AsIGZvciB0aGVzZSBjb21tYW5kcy4gVGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cy5cblxuQW5kIGNydWNpYWxseSwgYGdldF92bGFuYCBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSAqYm90aCogb2YgdGhvc2UgZnVuY3Rpb25zLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHNvIGBnZXRfdmxhbmAgaXMgaW1tZWRpYXRlbHkgcmVsYXRlZC5cblxuTm93LCB0aG9zZSBgbmw4MDIxMV8qYCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGBzdGF0aWNgIGluIGBubDgwMjExLmNgLCBJIGJlbGlldmUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgdGhleSdyZSBsb2NhbCB0byB0aGF0IGNvbXBpbGF0aW9uIHVuaXQuIEhvd2V2ZXIsIGJlY2F1c2UgdGhleSBhcmUgZXhwb3NlZCB0aHJvdWdoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlLCB0aGV5ICphcmUqIGVudHJ5IHBvaW50cy4gVGhlcmVmb3JlLCBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgZGVmaW5pdGVseSBwcmVzZW50IGFuZCB2aXNpYmxlIGluIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlLCB3aGV0aGVyIHdlJ3JlIGxvb2tpbmcgYXQgYHZtbGludXhgIG9yIGBjZmc4MDIxMS5rb2AuIEknbSBjZXJ0YWluIG9mIHRoYXQuXG5cblRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBgZ2V0X3ZsYW5gLiBJdCAqbWlnaHQqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCB3aGljaCB3b3VsZCBtZWFuIGl0IHdvdWxkbid0IGhhdmUgaXRzIG93biBzeW1ib2wuIFNvLCBpbmNsdWRpbmcgYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGEgdmVyeSBwcmVjaXNlIHdheSB0byBpZGVudGlmeSByZWxhdGVkIGNvZGUuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGNoZWNrIHRvIHNlZSBpZiBgZ2V0X3ZsYW5gIGlzIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZS4gR290dGEgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzoyNS4xMDQ4NDExMjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzIyMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFxiZ2V0X3ZsYW5cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmM9ODk2Nj1FWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3MS0gKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NzI6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3OlxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDgtXFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkzMzY9c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDctXFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5NjA4OlxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDktXFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ3OjI1LjE5MjE3MzAwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTI0ODgyOTI4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFZMQU4gSW50ZXJmYWNlIFZhbGlkYXRpb24gaW4gbmw4MDIxMSBTdGF0aW9uIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBpbiBgZ2V0X3ZsYW4oKWAsIGFuZCBpdCdzIGEgbmV3IGNoZWNrOiBlbnN1cmluZyB0aGUgVkxBTiBpbnRlcmZhY2UgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlIGJ5IGNvbXBhcmluZyBFdGhlcm5ldCBhZGRyZXNzZXMuIFByZXZpb3VzbHksIGl0IG9ubHkgY2hlY2tlZCBpZiBpdCB3YXMgYW4gQVAtcmVsYXRlZCBpbnRlcmZhY2UgYW5kIGlmIGl0IHdhcyBydW5uaW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBhZGRpdGlvbiBmb3Igc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSB3aXRoaW4gdGhlIGBubDgwMjExYCBjb250ZXh0LlxuXG5Ob3csIGNvbnNpZGVyaW5nIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgYG5sODAyMTFgIG5ldGxpbmsgaGFuZGxlcnMgKGBubDgwMjExX3NldF9zdGF0aW9uYCwgYG5sODAyMTFfbmV3X3N0YXRpb25gKSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB0aGV5IHBhc3MgdGhlIGBkZXZgIHBhcmFtZXRlciB0byBgZ2V0X3ZsYW4oKWAuIEJlY2F1c2UgdGhlIHZhbGlkYXRpb24gbG9naWMgYW5kIGVycm9yIGhhbmRsaW5nIGhhdmUgY2hhbmdlZCBpbiBob3cgVkxBTiBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkLCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIFwiV29ydGhGdXp6aW5nPXRydWVcIi5cblxuVG8gcHJlcGFyZSBmb3IgZnV6emluZywgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIEJhc2VkIG9uIG15IHF1aWNrIGFuYWx5c2lzLCBpdCBhcHBlYXJzIHRoYXQgdGhlIGBDRkc4MDIxMWAgY29uZmlndXJhdGlvbiwgd2hpY2ggY29tcGlsZXMgYG5sODAyMTEuY2AsIGlzIGZ1bmRhbWVudGFsLiBJdCBsb29rcyBsaWtlIGBNQUM4MDIxMV9IV1NJTWAgd2lsbCBhbHNvIGJlIHJlcXVpcmVkIGJlY2F1c2UgaXQgZW5hYmxlcyB2aXJ0dWFsIFdpLUZpIGRldmljZXMgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdml0YWwgZm9yIHJlYWNoaW5nIHRoZSBzdGF0aW9uIG9wZXJhdGlvbnMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZDogYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIC0gdGhvc2UgYXJlIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMuXG5cbkluIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlLlxuKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgZ2V0X3ZsYW5gLCBgbmw4MDIxMV9zZXRfc3RhdGlvbmAsIGBubDgwMjExX25ld19zdGF0aW9uYC5cbiogICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLlxuKiAgICoqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggbW9kaWZpZXMgVkxBTiBpbnRlcmZhY2UgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldGxpbmsgaW50ZXJmYWNlIChgbmw4MDIxMWApLiBJdCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSB1c2VyIHNwYWNlIG5ldGxpbmsgc29ja2V0cywgZXNwZWNpYWxseSB3aXRoIGBtYWM4MDIxMV9od3NpbWAuIEZ1enppbmcgdGhpcyBuZXcgdmFsaWRhdGlvbiBzdGVwIGNvdWxkIGhlbHAgaWRlbnRpZnkgcG90ZW50aWFsIGludmFsaWQgc3RhdGUgaGFuZGxpbmcgb3IgcmVncmVzc2lvbnMgaW4gVkxBTiBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU0NCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTA6MzcuNjgwNDcwMzU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTcyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfdmxhblwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIHRhcmdldCBBUC9QMlBfR08gaW50ZXJmYWNlIHdoZW4gc2V0dGluZyBvciBhZGRpbmcgYSBzdGF0aW9uIGluIG5sODAyMTEuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgcmVxdWVzdCBoYW5kbGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwvc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfdmxhblwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIHRhcmdldCBBUC9QMlBfR08gaW50ZXJmYWNlIHdoZW4gc2V0dGluZyBvciBhZGRpbmcgYSBzdGF0aW9uIGluIG5sODAyMTEuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgcmVxdWVzdCBoYW5kbGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwvc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTA6MzcuODkwNDU0NTg1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2MjMxMzMzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MDozNy44OTEyNjY1ODVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODc2MjIzMTY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVxcdTAwM2VkZXZfYWRkcmAgbWF0Y2hlcyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcy4gVGhlIGBkZXZfYWRkcmAgZmllbGRzIGJlaW5nIGNvbXBhcmVkIGJlbG9uZyB0byBleGlzdGluZywgcmVnaXN0ZXJlZCBuZXR3b3JrIGRldmljZXMgKGBuZXRfZGV2aWNlYCkgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIHBvaW50ZXIgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQ4MGNkZTgzYjA4NzExMmRkYWE4ZDQxODI3MTIzZjE1NTJkMmQ3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA4OjQ1OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDg5OWI2Mzc0YzU1MDYuLjBmMzM4ODMxMmNjZDggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtODk2NiwxMCArODk2NiwxMiBAQCBpbnQgY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcbiBcbiAvKlxuLSAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nIGFuZCBvbiB0aGUgcmlnaHQgd2lwaHkuXG4rICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeVxuKyAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbitcdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqdjtcbkBAIC04OTk5LDYgKzkwMDEsMTIgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRnb3RvIGVycm9yO1xuIFx0fVxuIFxuK1x0LyogQ2hlY2sgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZSAqL1xuK1x0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycm9yO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHY7XG4gIGVycm9yOlxuIFx0ZGV2X3B1dCh2KTtcbkBAIC05Mjk2LDcgKzkzMDQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYpO1xuK1x0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuIFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcbiBcbkBAIC05NTk3LDcgKzk2MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFxuIFx0XHQvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi9cbi1cdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbitcdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuIFx0XHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XG4gXHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTA6MzcuODkxMjY4NzU1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMjE4MzA0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV2lyZWxlc3MgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGlzIHRoZSBjb3JlIG9mIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl0IGxvb2tzIGxpa2UgaXQncyBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiBWTEFOIG1hbmFnZW1lbnQgaW4gdGhlIHdpcmVsZXNzIGNvbnRleHQuIFRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgZ2V0X3ZsYW4oKWAgZnVuY3Rpb24uIEknbSBzZWVpbmcgYSBuZXcgcGFyYW1ldGVyLCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAsIGJlaW5nIGFkZGVkIHRvIGBnZXRfdmxhbigpYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGV5J3JlIHRyeWluZyB0byBhc3NvY2lhdGUgVkxBTnMgd2l0aCBzcGVjaWZpYyBuZXR3b3JrIGRldmljZXMsIGEgY29tbW9uIGFwcHJvYWNoIGZvciB3aXJlbGVzcyBBUCBjb25maWd1cmF0aW9ucy5cblxuRGl2aW5nIGludG8gdGhlIGNvZGUgc25pcHBldCwgdGhhdCBgaWZgIHN0YXRlbWVudCB3aXRoaW4gYGdldF92bGFuKClgIGlzIGtleTogaXQncyBwZXJmb3JtaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBWTEFOIGludGVyZmFjZSAoYHYtXHUwMDNlZGV2X2FkZHJgKSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKGBkZXYtXHUwMDNlZGV2X2FkZHJgKS4gSWYgaXQgZG9lc24ndCBtYXRjaCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBpcyBhIGNydWNpYWwgdmFsaWRhdGlvbiBzdGVwLiBJdCBtYWtlcyBzZW5zZTsgd2Ugd291bGRuJ3Qgd2FudCB0byBhbGxvdyBWTEFOcyB0byBiZSBpbmNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIHdyb25nIHdpcmVsZXNzIGludGVyZmFjZS4gVGhpcyBpcyBhIGNvbW1vbiBzZWN1cml0eSBtZWFzdXJlIGZvciBzZXBhcmF0aW5nIHVzZXIgbmV0d29ya3Mgb24gdGhlIHNhbWUgcmFkaW8uXG5cblRoZSBuZXh0IHRoaW5nIEknbSBsb29raW5nIGF0IGFyZSB0aGUgY2FsbHMgdG8gYGdldF92bGFuKClgIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhleSdyZSBub3cgcGFzc2luZyB0aGUgbmV0d29yayBkZXZpY2UgKGBkZXZgKSBhcyBhbiBhcmd1bWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aG9zZSBmdW5jdGlvbnMuIExldCdzIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBicm9hZGVyIHdpcmVsZXNzIHN0YWNrLiBUaGV5IGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIHNldHRpbmcgdXAgYW5kIGFkZGluZyB3aXJlbGVzcyBzdGF0aW9ucy4gR2V0dGluZyB0aGUgVkxBTiBpbmZvcm1hdGlvbiBpcyBtb3N0IGxpa2VseSBhYm91dCBhc3NvY2lhdGluZyB0aGUgc3RhdGlvbiB3aXRoIGEgVkxBTi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGV2YCBwYXJhbWV0ZXIgZ2V0cyBwb3B1bGF0ZWQgaW4gdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUwOjUxLjEwOTU3NjE4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA5NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODk2NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODk2NTpcXHR9XFxuODk2NjpcXHRFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcXG44OTY3OlxcdFxcbjg5Njg6XFx0LypcXG44OTY5OlxcdCAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nLCBvbiB0aGUgcmlnaHQgd2lwaHlcXG44OTcwOlxcdCAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxcbjg5NzE6XFx0ICovXFxuODk3MjpcXHRzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuODk3MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuODk3NDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjg5NzU6XFx0e1xcbjg5NzY6XFx0XFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dO1xcbjg5Nzc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnY7XFxuODk3ODpcXHRcXHRpbnQgcmV0O1xcbjg5Nzk6XFx0XFxuODk4MDpcXHRcXHRpZiAoIXZsYW5hdHRyKVxcbjg5ODE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuODk4MjpcXHRcXG44OTgzOlxcdFxcdHYgPSBkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksIG5sYV9nZXRfdTMyKHZsYW5hdHRyKSk7XFxuODk4NDpcXHRcXHRpZiAoIXYpXFxuODk4NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG44OTg2OlxcdFxcbjg5ODc6XFx0XFx0aWYgKCF2LVxcdTAwM2VpZWVlODAyMTFfcHRyIHx8IHYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5ICE9IFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSkge1xcbjg5ODg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG44OTg5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuODk5MDpcXHRcXHR9XFxuODk5MTpcXHRcXG44OTkyOlxcdFxcdGlmICh2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiBcXHUwMDI2XFx1MDAyNlxcbjg5OTM6XFx0XFx0ICAgIHYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCBcXHUwMDI2XFx1MDAyNlxcbjg5OTQ6XFx0XFx0ICAgIHYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfR08pIHtcXG44OTk1OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuODk5NjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjg5OTc6XFx0XFx0fVxcbjg5OTg6XFx0XFxuODk5OTpcXHRcXHRpZiAoIW5ldGlmX3J1bm5pbmcodikpIHtcXG45MDAwOlxcdFxcdFxcdHJldCA9IC1FTkVURE9XTjtcXG45MDAxOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuOTAwMjpcXHRcXHR9XFxuOTAwMzpcXHRcXG45MDA0OlxcdFxcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cXG45MDA1OlxcdFxcdGlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbjkwMDY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG45MDA3OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuOTAwODpcXHRcXHR9XFxuOTAwOTpcXHRcXG45MDEwOlxcdFxcdHJldHVybiB2O1xcbjkwMTE6XFx0IGVycm9yOlxcbjkwMTI6XFx0XFx0ZGV2X3B1dCh2KTtcXG45MDEzOlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuOTAxNDpcXHR9XFxuOTAxNTpcXHRcXG45MDE2OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9zdGFfd21lKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuOTAxNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKVxcbjkwMTg6XFx0e1xcbjkwMTk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9TVEFfV01FX01BWCArIDFdO1xcbjkwMjA6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbjkwMjE6XFx0XFx0aW50IGVycjtcXG45MDIyOlxcdFxcbjkwMjM6XFx0XFx0LyogcGFyc2UgV01FIGF0dHJpYnV0ZXMgaWYgcHJlc2VudCAqL1xcbjkwMjQ6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1dNRV0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUwOjUxLjExMTE5MDUzOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODA5OTAyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZvY3VzaW5nIG9uIHdoZXJlIEknZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgZGV2YCBpbiBubDgwMjExIFN0YXRpb24gT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCB1c2FnZSBvZiB0aGUgYGRldmAgdmFyaWFibGUgd2l0aGluIHRoZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbnMuIEJvdGggYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIHN0YXRpb24gZW50cmllcyBpbiBubDgwMjExLiBUaGlzIG1lYW5zIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcG9pbnRzIHdoZXJlIGNoYW5nZXMgdG8gc3RhdGlvbnMgZ2V0IHJlZ2lzdGVyZWQsIGFkZGVkLCBhbmQgbWFuaXB1bGF0ZWQuXG5cbk15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBmb2xsb3cgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLiBJcyBpdCBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQ/IElzIGl0IGFsbG9jYXRlZCwgb3IgZGVyaXZlZCBmcm9tIGFub3RoZXIgc3RydWN0dXJlPyBBcmUgdGhlcmUgZ2xvYmFsIHZhcmlhYmxlcz8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgYGRldmAgaXMgaW5pdGlhbGx5IGludHJvZHVjZWQgaW4gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYW5kIHRoZW4gdHJhY2UgYmFjayBmcm9tIHRoZXJlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBkZWJ1Z2dpbmcgb3IgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIOKAkyBwcm9iYWJseSBgZ3JlcGAsIGBjc2NvcGVgLCBgY3RhZ3NgLCBhbmQvb3IgbXkgSURFJ3MgXCJmaW5kIGRlZmluaXRpb25cIiBvciBcImZpbmQgdXNhZ2VzXCIgZmVhdHVyZXMg4oCTIHRvIGVmZmljaWVudGx5IHRyYWNrIGl0cyBwcm92ZW5hbmNlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBkZXZgIGlzIGJlaW5nIHVzZWQgYW5kIG1vZGlmaWVkLCBhbmQgYnkgd2hhdC4gQXJlIHRoZSBjYWxscyB1c2luZyBgZGV2YCBwdXJlbHkgcmVhZGluZyBpdHMgdmFsdWUsIG9yIGlzIGBkZXZgIGJlaW5nIHdyaXR0ZW4gdG8/IElmIHdyaXRlcywgSSdtIGdvaW5nIHRvIGxvb2sgYXQgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIG1pZ2h0IGFsc28gYmUgbG9va2luZyBhdCBhc3NvY2lhdGVkIHN0cnVjdHMgb3IgZGF0YSBidWZmZXJzIHRoYXQgYXJlIG1vZGlmaWVkIHdoZW4gYGRldmAgY2hhbmdlcy4gSXMgaXQgYSBwb2ludGVyIHRvIGEgZGV2aWNlIHN0cnVjdHVyZSwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldGxpbmsgc29ja2V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cblxuRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBgZGV2YCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgcG9pbnRlciB0byBhIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgdG8gYW4gaW5kZXggaW50byBhbiBhcnJheSwgdG8gYW4gaWRlbnRpZmllciBmb3IgYW4gdW5kZXJseWluZyBoYXJkd2FyZSBpbnRlcmZhY2UuIElkZW50aWZ5aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgZGV2LCB0aGUgdW5kZXJseWluZyBkYXRhIHR5cGUsIHdpbGwgYmUgZXNzZW50aWFsLCBidXQgaXQgd29uJ3QgYmUgZW5vdWdoLiBJJ2xsIGFsc28gbG9vayBhdCB0aGUgdHlwZXMgb2Ygb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYGRldmAuIEFyZSB3ZSBhY2Nlc3NpbmcgZGV2aWNlIGF0dHJpYnV0ZXMsIG1hbmlwdWxhdGluZyBpbnRlcm5hbCBmbGFncywgb3IgY29uZmlndXJpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzP1xuXG5PbmNlIEkgdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgZGV2YCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBJIGNhbiBleHBhbmQgb3V0d2FyZCwgZm9sbG93aW5nIGhvdyBpdHMgdmFsdWUgcHJvcGFnYXRlcyB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBubDgwMjExIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIHRyYWNrIGNhbGxzIGFuZCBzZWUgd2hvIGlzIGNhbGxpbmcgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgdGhhdCBoZWxwIG1lIGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyB2YXJpYWJsZS5cblxuSSBleHBlY3QgdG8gaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBwdXJwb3NlIGFuZCBpdHMgZmxvdyB3aXRoaW4gdGhlIHN5c3RlbSB3aXRoIGEgY29tYmluYXRpb24gb2Ygc3RhdGljIGFuYWx5c2lzIGFuZCB0YXJnZXRlZCBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUwOjU3LjkyMTA5NzY1MloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTI4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTI4MDpcXHRcXG45MjgxOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKSB7XFxuOTI4MjpcXHRcXHRcXHRwYXJhbXMuZW1sX2NhcF9wcmVzZW50ID0gdHJ1ZTtcXG45MjgzOlxcdFxcdFxcdHBhcmFtcy5lbWxfY2FwID1cXG45Mjg0OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xcbjkyODU6XFx0XFx0fVxcbjkyODY6XFx0XFxuOTI4NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSlcXG45Mjg4OlxcdFxcdFxcdHBhcmFtcy5haXJ0aW1lX3dlaWdodCA9XFxuOTI4OTpcXHRcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKTtcXG45MjkwOlxcdFxcbjkyOTE6XFx0XFx0aWYgKHBhcmFtcy5haXJ0aW1lX3dlaWdodCBcXHUwMDI2XFx1MDAyNlxcbjkyOTI6XFx0XFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuOTI5MzpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQUlSVElNRV9GQUlSTkVTUykpXFxuOTI5NDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuOTI5NTpcXHRcXG45Mjk2OlxcdFxcdGVyciA9IG5sODAyMTFfcGFyc2Vfc3RhX3R4cG93ZXJfc2V0dGluZyhpbmZvLFxcbjkyOTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBhcmFtcy5saW5rX3N0YV9wYXJhbXMudHhwd3IsXFxuOTI5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cl9zZXQpO1xcbjkyOTk6XFx0XFx0aWYgKGVycilcXG45MzAwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTMwMTpcXHRcXG45MzAyOlxcdFxcdC8qIEluY2x1ZGUgcGFyYW1ldGVycyBmb3IgVERMUyBwZWVyICh3aWxsIGNoZWNrIGxhdGVyKSAqL1xcbjkzMDM6XFx0XFx0ZXJyID0gbmw4MDIxMV9zZXRfc3RhdGlvbl90ZGxzKGluZm8sIFxcdTAwMjZwYXJhbXMpO1xcbjkzMDQ6XFx0XFx0aWYgKGVycilcXG45MzA1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTMwNjpcXHRcXG45MzA3OlxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG45MzA4OlxcdFxcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxcbjkzMDk6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xcbjkzMTA6XFx0XFxuOTMxMTpcXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbjkzMTI6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG45MzEzOlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG45MzE0OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxcbjkzMTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxcbjkzMTY6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbjkzMTc6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG45MzE4OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG45MzE5OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MDo1Ny45MjI1Nzk1NzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM4NTM1ODk2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIGBubDgwMjExX3NldF9zdGF0aW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkZXZgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBubDgwMjExX3NldF9zdGF0aW9uYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSdtIHJldmVyc2UgZW5naW5lZXJpbmcgY29kZSBvciBkZWJ1Z2dpbmcgYSBuZXR3b3JrIGRyaXZlciBpc3N1ZSByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gSSdtIGFzc3VtaW5nIGBkZXZgIGlzIGxpa2VseSBhIHBvaW50ZXIgdG8gYSBuZXRfZGV2aWNlIHN0cnVjdHVyZSBvciBhIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUg4oCTIHBlcmhhcHMgYSBkZXZpY2Utc3BlY2lmaWMgY29udGV4dC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBoZXJlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIHZhcmlhYmxlIGdldHMgaXRzIHZhbHVlLiBUaGUgdWx0aW1hdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyZmFjZSBoYW5kbGVzIHN0YXRpb24gY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIG5sODAyMTEgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6MjEuNzc2MTcyMTg4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MTgwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45MTgxOlxcdFxcbjkxODI6XFx0XFx0LypcXG45MTgzOlxcdFxcdCAqIEFJRCBhbmQgbGlzdGVuX2ludGVydmFsIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvbmx5IGZvciB1bmFzc29jaWF0ZWRcXG45MTg0OlxcdFxcdCAqIHN0YXRpb24uIEluY2x1ZGUgdGhlc2UgcGFyYW1ldGVycyBoZXJlIGFuZCB3aWxsIGNoZWNrIHRoZW0gaW5cXG45MTg1OlxcdFxcdCAqIGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKCkuXFxuOTE4NjpcXHRcXHQgKi9cXG45MTg3OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pXFxuOTE4ODpcXHRcXHRcXHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcXG45MTg5OlxcdFxcbjkxOTA6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSlcXG45MTkxOlxcdFxcdFxcdHBhcmFtcy52bGFuX2lkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKTtcXG45MTkyOlxcdFxcbjkxOTM6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSlcXG45MTk0OlxcdFxcdFxcdHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPVxcbjkxOTU6XFx0XFx0XFx0ICAgICBubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pO1xcbjkxOTY6XFx0XFx0ZWxzZVxcbjkxOTc6XFx0XFx0XFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9IC0xO1xcbjkxOTg6XFx0XFxuOTE5OTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JUX1AyUF9QU10pXFxuOTIwMDpcXHRcXHRcXHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPVxcbjkyMDE6XFx0XFx0XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRfUDJQX1BTXSk7XFxuOTIwMjpcXHRcXHRlbHNlXFxuOTIwMzpcXHRcXHRcXHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPSAtMTtcXG45MjA0OlxcdFxcbjkyMDU6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG45MjA2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkyMDc6XFx0XFxuOTIwODpcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxcbjkyMDk6XFx0XFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcbjkyMTA6XFx0XFxuOTIxMTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MRF9BRERSXSkge1xcbjkyMTI6XFx0XFx0XFx0LyogSWYgTUxEX0FERFIgYXR0cmlidXRlIGlzIHNldCB0aGVuIHRoaXMgaXMgYW4gTUxEIHN0YXRpb25cXG45MjEzOlxcdFxcdFxcdCAqIGFuZCB0aGUgTUxEX0FERFIgYXR0cmlidXRlIGhvbGRzIHRoZSBNTEQgYWRkcmVzcyBhbmQgdGhlXFxuOTIxNDpcXHRcXHRcXHQgKiBNQUMgYXR0cmlidXRlIGhvbGRzIGZvciB0aGUgTElOSyBhZGRyZXNzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MToyMS43Nzc4OTE2MzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMyMTkyODYzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHVwb24gc2VlaW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmA6XG5cbioqSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiBubDgwMjExX3NldF9zdGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBgbmw4MDIxMV9zZXRfc3RhdGlvbmDigKYgcmlnaHQsIHRoaXMgaXMgd2hlcmUgd2UgYmVnaW4gdG8gY29uZmlndXJlIHN0YXRpb24gcGFyYW1ldGVycyB0aHJvdWdoIHRoZSBubDgwMjExIGludGVyZmFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGhpZ2gtbGV2ZWwgY29udGV4dCBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzIGJlaW5nIHNldD8gV2hhdCBraW5kIG9mIGNvbnRyb2wgZmxvdyBhbSBJIGxvb2tpbmcgYXQ/IE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBlbmNvdW50ZXJlZCBhdCB0aGlzIGVudHJ5IHBvaW50LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgYW55IHByZWxpbWluYXJ5IGNoZWNrcyBhbmQgc2FuaXR5IHZhbGlkYXRpb25zIHRoYXQgbWF5IHRha2UgcGxhY2UgYmVmb3JlIHdlIGdldCB0b28gZGVlcCBpbnRvIHRoZSBmdW5jdGlvbidzIGxvZ2ljLiBJIGFudGljaXBhdGUgc29tZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB3aXJlbGVzcyBkZXZpY2UncyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBtZXNzYWdlIGlzIHBhcnNlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBzb21ldGhpbmcgdGhlIGRyaXZlciBjYW4gd29yayB3aXRoLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDQxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTozNC45OTcxODMyMzFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTE0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTE0MDpcXHRcXHRcXHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG45MTQxOlxcdFxcdFxcdFxcdFxcdFxcdCBOTDgwMjExX0VYVF9GRUFUVVJFX1NUQV9UWF9QV1IpKVxcbjkxNDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkxNDM6XFx0XFxuOTE0NDpcXHRcXHRcXHRpZHggPSBOTDgwMjExX0FUVFJfU1RBX1RYX1BPV0VSX1NFVFRJTkc7XFxuOTE0NTpcXHRcXHRcXHR0eHB3ci1cXHUwMDNldHlwZSA9IG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbaWR4XSk7XFxuOTE0NjpcXHRcXG45MTQ3OlxcdFxcdFxcdGlmICh0eHB3ci1cXHUwMDNldHlwZSA9PSBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQpIHtcXG45MTQ4OlxcdFxcdFxcdFxcdGlkeCA9IE5MODAyMTFfQVRUUl9TVEFfVFhfUE9XRVI7XFxuOTE0OTpcXHRcXG45MTUwOlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tpZHhdKVxcbjkxNTE6XFx0XFx0XFx0XFx0XFx0dHhwd3ItXFx1MDAzZXBvd2VyID0gbmxhX2dldF9zMTYoaW5mby1cXHUwMDNlYXR0cnNbaWR4XSk7XFxuOTE1MjpcXHRcXHRcXHRcXHRlbHNlXFxuOTE1MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTU0OlxcdFxcdFxcdH1cXG45MTU1OlxcdFxcbjkxNTY6XFx0XFx0XFx0KnR4cHdyX3NldCA9IHRydWU7XFxuOTE1NzpcXHRcXHR9IGVsc2Uge1xcbjkxNTg6XFx0XFx0XFx0KnR4cHdyX3NldCA9IGZhbHNlO1xcbjkxNTk6XFx0XFx0fVxcbjkxNjA6XFx0XFxuOTE2MTpcXHRcXHRyZXR1cm4gMDtcXG45MTYyOlxcdH1cXG45MTYzOlxcdFxcbjkxNjQ6XFx0c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuOTE2NTpcXHR7XFxuOTE2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG45MTY3OlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG45MTY4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVxcdTAwM2VuZXRkZXY7XFxuOTE2OTpcXHRcXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcXG45MTcwOlxcdFxcdHU4ICptYWNfYWRkcjtcXG45MTcxOlxcdFxcdGludCBlcnI7XFxuOTE3MjpcXHRcXG45MTczOlxcdFxcdG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XFxuOTE3NDpcXHRcXG45MTc1OlxcdFxcdGlmICghZGV2IFxcdTAwMjZcXHUwMDI2IHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gXFx1MDAyNlxcdTAwMjZcXG45MTc2OlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuOTE3NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTc4OlxcdFxcbjkxNzk6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV9zdGF0aW9uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTozNC45OTc5OTIzMzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE4NTM5MTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBubDgwMjExX25ld19zdGF0aW9uYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBzdGF0aW9uIGVudHJ5IHdpdGhpbiB0aGUgbmw4MDIxMSBmcmFtZXdvcmssIHJpZ2h0PyBTbywgdGhpcyBpcyAqdGhlKiBwb2ludCB3aGVyZSB3ZSdyZSBpbnN0YW50aWF0aW5nIGEgbmV3IFNUQSwgYXNzb2NpYXRpbmcgaXQgd2l0aCBhbiBpbnRlcmZhY2UsIGFuZCBlc3NlbnRpYWxseSwgZ2l2aW5nIGl0IGEgcHJlc2VuY2Ugb24gdGhlIHdpcmVsZXNzIG1lZGl1bS4gTXkgbWluZCdzIHJ1bm5pbmcgdGhyb3VnaCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBuZXRfZGV2aWNlYCwgdGhlIGBjZmc4MDIxMV9zdGF0aW9uYCwgbGlrZWx5IHNvbWUgcmVsYXRlZCBzdHJ1Y3R1cmVzIGluIHRoZSBtYWM4MDIxMSBsYXllci4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBsb2NraW5nIGludm9sdmVkOyBpdCdzIGNyaXRpY2FsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIG1hbmlwdWxhdGluZyB0aGlzIHNoYXJlZCBzdGF0ZS4gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBBcmUgdGhleSBwcm9wZXJseSBjaGVja2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXM/IFRoaXMgaXMgY29yZSBmdW5jdGlvbmFsaXR5OyBhbnkgbWlzc2VkIGVycm9yIGhhbmRsaW5nIGhlcmUgd2lsbCBiZSBhIGRpc2FzdGVyLiBJIG5lZWQgdG8gbG9vayBmb3IgdGhhdC4gQWxzbywgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBrZXkuIFdoYXQgYXJndW1lbnRzIGFyZSB3ZSBleHBlY3Rpbmc/IFdoYXQgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGZyb20gdXNlciBzcGFjZSwgYW5kIGhvdyBpcyBpdCB2YWxpZGF0ZWQ/IEFueSB1bmNoZWNrZWQgdXNlci1wcm92aWRlZCBkYXRhIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIEknbSBleHBlY3RpbmcgY2hlY2tzIG9uIHRoZSBNQUMgYWRkcmVzcywgdGhlIGludGVyZmFjZSBpbmRleCwgbGlrZWx5IHNvbWUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24uIElzIHRoZXJlIGFueSBpbnB1dCBzYW5pdGl6YXRpb24gZ29pbmcgb24sIG9yIGFyZSB3ZSBqdXN0IHRydXN0aW5nIHdoYXQncyBjb21pbmcgaW4gZnJvbSB0aGUgdXNlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBuZWVkcyBhIHRob3JvdWdoIHJldmlldy4gRmluYWxseSwgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3Jvbmc7IGRvZXMgaXQgZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgbmw4MDIxMSBldmVudCB0byBub3RpZnkgdXNlciBzcGFjZSBvZiB0aGUgZmFpbHVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NDAuMTgzMzg1ODlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTQyMDpcXHRcXHRcXHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPVxcbjk0MjE6XFx0XFx0XFx0XFx0d2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTztcXG45NDIyOlxcdFxcdH1cXG45NDIzOlxcdFxcbjk0MjQ6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QRUVSX0FJRF0pXFxuOTQyNTpcXHRcXHRcXHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSk7XFxuOTQyNjpcXHRcXHRlbHNlIGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pXFxuOTQyNzpcXHRcXHRcXHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcXG45NDI4OlxcdFxcbjk0Mjk6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQ0FQQUJJTElUWV0pIHtcXG45NDMwOlxcdFxcdFxcdHBhcmFtcy5jYXBhYmlsaXR5ID1cXG45NDMxOlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQ0FQQUJJTElUWV0pO1xcbjk0MzI6XFx0XFx0XFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayB8PSBTVEFUSU9OX1BBUkFNX0FQUExZX0NBUEFCSUxJVFk7XFxuOTQzMzpcXHRcXHR9XFxuOTQzNDpcXHRcXG45NDM1OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0VYVF9DQVBBQklMSVRZXSkge1xcbjk0MzY6XFx0XFx0XFx0cGFyYW1zLmV4dF9jYXBhYiA9XFxuOTQzNzpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0VYVF9DQVBBQklMSVRZXSk7XFxuOTQzODpcXHRcXHRcXHRwYXJhbXMuZXh0X2NhcGFiX2xlbiA9XFxuOTQzOTpcXHRcXHRcXHRcXHRubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfRVhUX0NBUEFCSUxJVFldKTtcXG45NDQwOlxcdFxcdH1cXG45NDQxOlxcdFxcbjk0NDI6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSlcXG45NDQzOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaHRfY2FwYSA9XFxuOTQ0NDpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0pO1xcbjk0NDU6XFx0XFxuOTQ0NjpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSlcXG45NDQ3OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEgPVxcbjk0NDg6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSk7XFxuOTQ0OTpcXHRcXG45NDUwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pIHtcXG45NDUxOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYSA9XFxuOTQ1MjpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xcbjk0NTM6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhX2xlbiA9XFxuOTQ1NDpcXHRcXHRcXHRcXHRubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSk7XFxuOTQ1NTpcXHRcXG45NDU2OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKSB7XFxuOTQ1NzpcXHRcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmVodF9jYXBhID1cXG45NDU4OlxcdFxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FSFRfQ0FQQUJJTElUWV0pO1xcbjk0NTk6XFx0XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYV9sZW4gPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTo0MC4xODQxMzQ3NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDYzMzEzMjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBzdGFydCBvZiBgbmw4MDIxMV9uZXdfc3RhdGlvbmAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaXZpbmcgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAg4oCTIEluaXRpYWwgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgKmJlZ2lucyogd2hlbiBhIG5ldyBzdGF0aW9uIGNvbm5lY3RzIOKAkyB0aGUgcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCdzIHdpcmVsZXNzIHN1YnN5c3RlbSBnZXRzIGl0cyBob29rcyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGhvdyB0aGlzIGNvbm5lY3Rpb24gaXMgYmVpbmcgcmVwcmVzZW50ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgY29uY2VybnMgYXJlIGFsd2F5cyBhcm91bmQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBtYWtpbmcgc3VyZSB0aGlzIG5ldyBzdGF0aW9uIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cbkknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBob3cgdGhlIHN0YXRpb24ncyBjb25maWd1cmF0aW9uIGRhdGEsIGxpa2UgaXRzIE1BQyBhZGRyZXNzLCBhc3NvY2lhdGVkIEJTU0lELCBhbmQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBpcyBiZWluZyBwYXNzZWQgaW4uIEFyZSB3ZSB2YWxpZGF0aW5nIHRoaXMgZGF0YSBwcm9wZXJseT8gSXMgdGhlcmUgYW55IG9wcG9ydHVuaXR5IGZvciBpbmplY3Rpb24gb2YgbWFsaWNpb3VzIGRhdGEgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBmb3IgY2hlY2tzIG9uIGxlbmd0aHMsIHZhbGlkIE1BQyBhZGRyZXNzZXMsIGFuZCBhbnkgb3RoZXIgc2FuaXR5IGNoZWNrcyB0aGUgZGV2ZWxvcGVycyBoYXZlIGltcGxlbWVudGVkLlxuXG5OZXh0LCBJJ20gZ29pbmcgdG8gYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIG5ldyBzdGF0aW9uIGlzIGJlaW5nIHJlcHJlc2VudGVkIGludGVybmFsbHkuIFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHVzZWQ/IEhvdyBhcmUgdGhleSBsaW5rZWQgaW50byB0aGUgcmVzdCBvZiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtPyBJcyBpdCBhIHNpbmdsZSBhbGxvY2F0aW9uLCBvciBhcmUgbXVsdGlwbGUgc3RydWN0dXJlcyBpbnZvbHZlZD8gSSdsbCBiZSBrZWVwaW5nIGEga2VlbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3Mg4oCTIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gTWVtb3J5IG1hbmFnZW1lbnQgd2lsbCBiZSBjcml0aWNhbCDigJMgSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga21hbGxvY2Agb3Igc2ltaWxhciwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgYWxsb2NhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGF0IGRlYWxsb2NhdGlvbiBoYXBwZW5zIGluIHRoZSBjb3JyZWN0IHNpdHVhdGlvbnMsIGF2b2lkaW5nIG1lbW9yeSBsZWFrcy5cblxuRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXZlbnQgb3IgY2FsbGJhY2sgcmVnaXN0cmF0aW9uLiBEb2VzIHRoaXMgZnVuY3Rpb24gdHJpZ2dlciBvdGhlciBhY3Rpb25zIG9yIHNldCB1cCBmdXR1cmUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN0YXRpb24/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3RhdGlvbidzIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoYXQgaW5mb3JtYXRpb24gaXMgbWFkZSBhY2Nlc3NpYmxlIHRvIG90aGVyIHN1YnN5c3RlbXMsIGxpa2UgdGhlIG5ldHdvcmtpbmcgc3RhY2sgb3IgYW55IHVzZXJzcGFjZSBtb25pdG9yaW5nIHRvb2xzLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgYWxsIGluaXRpYWxpc2F0aW9uIHJvdXRpbmVzIGFyZSBjYWxsZWQgYW5kIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3RhdGlvbiBpcyBpbml0aWFsaXplZCB0byBhIHZhbGlkIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjkzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTo0My42NDc0NTE2MzZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTM2MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTM2MDpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxcbjkzNjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM2MjpcXHRcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XFxuOTM2MzpcXHRcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXFxuOTM2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzY1OlxcdFxcbjkzNjY6XFx0XFx0XFx0XFx0LyogT25seSBOTUkgc3RhdGlvbnMgcmVjZWl2ZSB0aGUgSFQvVkhUL0hFIGNhcGFiaWxpdGllcyAqL1xcbjkzNjc6XFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSB8fFxcbjkzNjg6XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WSFRfQ0FQQUJJTElUWV0gfHxcXG45MzY5OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pXFxuOTM3MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzcxOlxcdFxcdFxcdH1cXG45MzcyOlxcdFxcdH0gZWxzZSB7XFxuOTM3MzpcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSlcXG45Mzc0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNzU6XFx0XFxuOTM3NjpcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcXG45Mzc3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNzg6XFx0XFxuOTM3OTpcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSBcXHUwMDI2XFx1MDAyNlxcbjkzODA6XFx0XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxcbjkzODE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM4MjpcXHRcXHR9XFxuOTM4MzpcXHRcXG45Mzg0OlxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA9XFxuOTM4NTpcXHRcXHRcXHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuOTM4NjpcXHRcXG45Mzg3OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XFxuOTM4ODpcXHRcXHRcXHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pO1xcbjkzODk6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XFxuOTM5MDpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfbWFjID1cXG45MzkxOlxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG45MzkyOlxcdFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfbWFjKSlcXG45MzkzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzOTQ6XFx0XFx0fSBlbHNlIHtcXG45Mzk1OlxcdFxcdFxcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xcbjkzOTY6XFx0XFx0fVxcbjkzOTc6XFx0XFxuOTM5ODpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKSB7XFxuOTM5OTpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLnN1cHBvcnRlZF9yYXRlcyA9XFxuOTQwMDpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pO1xcbjk0MDE6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5zdXBwb3J0ZWRfcmF0ZXNfbGVuID1cXG45NDAyOlxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKTtcXG45NDAzOlxcdFxcdH1cXG45NDA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTo0My42NDgyNTIzNTZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIzODU1MTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgSSdtIGRlYWxpbmcgd2l0aCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYW5kIEknbSBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgRnVuY3Rpb24ncyBIaXN0b3J5KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgaXRzIGxpbmVhZ2UsIHRvIHNlZSB0aGUgY2FsbHMgdGhhdCBsZWFkIHVwIHRvIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIHBhcmFtb3VudCBoZXJlLiBTbyBJ4oCZbSBtZW50YWxseSBzY2FubmluZyBiYWNrIHRocm91Z2ggdGhlIGVhcmxpZXIgbGluZXMsIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQuLi4gd2hhdCB0cmlnZ2VycyB0aGlzIGBuZXdfc3RhdGlvbmAgZXZlbnQ/IElzIGl0IGEgYmVhY29uLCBhIHByb2JlIHJlcXVlc3QsIGEgbWFuYWdlbWVudCBmcmFtZT8gS25vd2luZyB0aGF0IHdpbGwgZGVmaW5lIHRoZSBwb3RlbnRpYWwgc2lnbmlmaWNhbmNlIG9mIGFueSBpc3N1ZXMgSSBmaW5kLiBJJ20gZXNzZW50aWFsbHkgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgZXhlY3V0aW9uIHBhdGgsIG1lbnRhbGx5IGJ1aWxkaW5nIGEgbWVudGFsIHN0YWNrIG9mIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNlZGluZyBjb25kaXRpb25zLiBJJ20gZXhwZWN0aW5nIHNvbWUgY2x1ZXMgdG8gc3VyZmFjZSBzb29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NDYuODg2ODA3OTI1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTU2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MzMwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MzMwOlxcdCBvdXRfcHV0X3ZsYW46XFxuOTMzMTpcXHRcXHRkZXZfcHV0KHBhcmFtcy52bGFuKTtcXG45MzMyOlxcdFxcbjkzMzM6XFx0XFx0cmV0dXJuIGVycjtcXG45MzM0OlxcdH1cXG45MzM1OlxcdFxcbjkzMzY6XFx0c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuOTMzNzpcXHR7XFxuOTMzODpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG45MzM5OlxcdFxcdGludCBlcnI7XFxuOTM0MDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuOTM0MTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi1cXHUwMDNlbmV0ZGV2O1xcbjkzNDI6XFx0XFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XFxuOTM0MzpcXHRcXHR1OCAqbWFjX2FkZHIgPSBOVUxMO1xcbjkzNDQ6XFx0XFx0dTMyIGF1dGhfYXNzb2MgPSBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8XFxuOTM0NTpcXHRcXHRcXHRcXHQgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCk7XFxuOTM0NjpcXHRcXG45MzQ3OlxcdFxcdG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XFxuOTM0ODpcXHRcXG45MzQ5OlxcdFxcdGlmICghZGV2IFxcdTAwMjZcXHUwMDI2IHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pXFxuOTM1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzUxOlxcdFxcbjkzNTI6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWFkZF9zdGF0aW9uKVxcbjkzNTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkzNTQ6XFx0XFxuOTM1NTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKVxcbjkzNTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM1NzpcXHRcXG45MzU4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8XFxuOTM1OTpcXHRcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XFxuOTM2MDpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxcbjkzNjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM2MjpcXHRcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XFxuOTM2MzpcXHRcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXFxuOTM2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NDYuODg5MzA3OTA1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NjgzNjY1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBubDgwMjExX25ld19zdGF0aW9uYCDigJMgV2hhdCdzIE5leHQ/KipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuIFdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBub3cgSSBuZWVkIHRvIHNlZSB0aGUgcmVzdCBvZiBpdC4gV2hhdCBhcmUgd2UgbG9va2luZyBhdCBoZXJlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBuZXh0IHNlY3Rpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dCB0aGF0IHdpbGwgbmVlZCB0byBiZSBhZGRyZXNzZWQ/IElzIHRoZXJlIGEgcmVhc29uIHdoeSB3ZSBhcmUgbG9va2luZyBoZXJlPyBXaGF0IGlzIHRoZSBiaWdnZXIgcGljdHVyZT8gT2theSwgbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NTAuNDU3Njc4MzU5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk1OTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTU5MTpcXHRcXG45NTkyOlxcdFxcdFxcdC8qIE9sZGVyIHVzZXJzcGFjZSwgb3IgdXNlcnNwYWNlIHdhbnRpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoXFxuOTU5MzpcXHRcXHRcXHQgKiAhTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFLCB3aWxsIG5vdCBzZXQgdGhlIGF1dGhcXG45NTk0OlxcdFxcdFxcdCAqIGFuZCBhc3NvYyBmbGFncyBpbiB0aGUgbWFzaywgYnV0IGFzc3VtZXMgdGhlIHN0YXRpb24gd2lsbCBiZVxcbjk1OTU6XFx0XFx0XFx0ICogYWRkZWQgYXMgYXNzb2NpYXRlZCBhbnl3YXkgc2luY2UgdGhpcyB3YXMgdGhlIHJlcXVpcmVkIGRyaXZlclxcbjk1OTY6XFx0XFx0XFx0ICogYmVoYXZpb3VyIGJlZm9yZSBOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUgd2FzXFxuOTU5NzpcXHRcXHRcXHQgKiBpbnRyb2R1Y2VkLlxcbjk1OTg6XFx0XFx0XFx0ICogSW4gb3JkZXIgdG8gbm90IGJvdGhlciBkcml2ZXJzIHdpdGggdGhpcyBxdWlyayBpbiB0aGUgQVBJXFxuOTU5OTpcXHRcXHRcXHQgKiBzZXQgdGhlIGZsYWdzIGluIGJvdGggdGhlIG1hc2sgYW5kIHNldCBmb3IgbmV3IHN0YXRpb25zIGluXFxuOTYwMDpcXHRcXHRcXHQgKiB0aGlzIGNhc2UuXFxuOTYwMTpcXHRcXHRcXHQgKi9cXG45NjAyOlxcdFxcdFxcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcXHUwMDI2IGF1dGhfYXNzb2MpKSB7XFxuOTYwMzpcXHRcXHRcXHRcXHRwYXJhbXMuc3RhX2ZsYWdzX21hc2sgfD0gYXV0aF9hc3NvYztcXG45NjA0OlxcdFxcdFxcdFxcdHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IHw9IGF1dGhfYXNzb2M7XFxuOTYwNTpcXHRcXHRcXHR9XFxuOTYwNjpcXHRcXG45NjA3OlxcdFxcdFxcdC8qIG11c3QgYmUgbGFzdCBpbiBoZXJlIGZvciBlcnJvciBoYW5kbGluZyAqL1xcbjk2MDg6XFx0XFx0XFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xcbjk2MDk6XFx0XFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuOTYxMDpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XFxuOTYxMTpcXHRcXHRcXHRicmVhaztcXG45NjEyOlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG45NjEzOlxcdFxcdFxcdC8qIGlnbm9yZSB1QVBTRCBkYXRhICovXFxuOTYxNDpcXHRcXHRcXHRwYXJhbXMuc3RhX21vZGlmeV9tYXNrIFxcdTAwMjY9IH5TVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEO1xcbjk2MTU6XFx0XFxuOTYxNjpcXHRcXHRcXHQvKiBhc3NvY2lhdGVkIGlzIGRpc2FsbG93ZWQgKi9cXG45NjE3OlxcdFxcdFxcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKSlcXG45NjE4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjk2MTk6XFx0XFx0XFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cXG45NjIwOlxcdFxcdFxcdGlmICgocGFyYW1zLnN0YV9mbGFnc19zZXQgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIpKSB8fFxcbjk2MjE6XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QRUVSX0FJRF0pXFxuOTYyMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45NjIzOlxcdFxcdFxcdGJyZWFrO1xcbjk2MjQ6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbjk2MjU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxcbjk2MjY6XFx0XFx0XFx0LyogaWdub3JlIHVBUFNEIGRhdGEgKi9cXG45NjI3OlxcdFxcdFxcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXFx1MDAyNj0gflNUQVRJT05fUEFSQU1fQVBQTFlfVUFQU0Q7XFxuOTYyODpcXHRcXG45NjI5OlxcdFxcdFxcdC8qIHRoZXNlIGFyZSBkaXNhbGxvd2VkICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUxOjUwLjQ1ODUyNjA3OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTU0NzA0NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYGdldF92bGFuYCBoYXMgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCBub3cgbG9va3MgbGlrZTpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuXHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5gYGBcblxuVGhhdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIFRoZSB0aGlyZCBwYXJhbWV0ZXIsIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCwgaXMgdGhlIG5ldyBhZGRpdGlvbi4gTm93LCB0aGUgY29kZSBpbmNsdWRlcyBhIHZhbGlkYXRpb24gY2hlY2sgd2l0aGluIGBnZXRfdmxhbmAuIEl0J3MgZW5zdXJpbmcgdGhhdCB0aGUgVkxBTiBpbnRlcmZhY2UgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgaW50ZW5kZWQgQVAgaW50ZXJmYWNlLlxuXG5gYGBjXG5cdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cblx0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuXHRcdHJldCA9IC1FSU5WQUw7XG5cdFx0Z290byBlcnJvcjtcblx0fVxuYGBgXG5cbkdvb2QsIHRoYXQncyBzb3VuZCBsb2dpYyDigJMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBtaXNjb25maWd1cmF0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIE5vdywgdGhlIGBkZXZgIHBhcmFtZXRlciBpcyBiZWluZyBwYXNzZWQgdG8gYGdldF92bGFuYCBpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHNlbnNlIGNvbnNpZGVyaW5nIHRoZSBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlLiBJIHdvdWxkIGV4cGVjdCB0aGVzZSB0byBiZSB0aGUgbGlrZWx5IGNhbGxpbmcgc2l0ZXMgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgVkxBTiBtYW5pcHVsYXRpb24gaW4gc3RhdGlvbiBjb25maWd1cmF0aW9uLlxuXG5Ib2xkIG9uIGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgY2hhbmdlIHRvIGBnZXRfdmxhbmAgY291bGQgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdtIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggdG8gY29uZmlybSB0aGF0IGBnZXRfdmxhbmAgaGFzIG5vIG90aGVyIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTEzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NTUuNDEzMjMzNzgyWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjMwNjY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3ZsYW5cXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmM9ODk2Nj1FWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3MS0gKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NzI6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3OlxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDgtXFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkzMzY9c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDctXFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5NjA4OlxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDktXFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUxOjU2LjA3NjMwNjkyMVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDA5MzU1OTg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2V0X3ZsYW5gIENhbGxlcnMgYW5kIERldmljZSBBZGRyZXNzIENvbXBhcmlzb24qKlxuXG5Pa2F5LCBzbyBvbmx5IHR3byBjYWxsZXJzIGFyZSBoaXR0aW5nIHRoaXMgYGdldF92bGFuYCBmdW5jdGlvbi4gVGhhdCdzIGdvb2Q7IGl0IGtlZXBzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIG1hbmFnZWFibGUuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgYSBjcnVjaWFsIGFzc3VtcHRpb246IGNhbiBgZGV2X2FkZHJgIOKAkyB0aGUgZGV2aWNlIGFkZHJlc3Mg4oCTIG9mIGVpdGhlciB0aGUgYGRldmAgb3IgYHZgIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGJlIHVuaW5pdGlhbGl6ZWQ/XG5cbkxldCdzIGJyZWFrIGRvd24gd2hlcmUgdGhlc2UgdmFyaWFibGVzIGNvbWUgZnJvbS4gYHZgIGlzIGEgYG5ldF9kZXZpY2VgIG9idGFpbmVkIHRocm91Z2ggYGRldl9nZXRfYnlfaW5kZXgoLi4uKWAuIEFuZCBgZGV2YCBpcyBhY2Nlc3NlZCB2aWEgYHdkZXYtXHUwMDNlbmV0ZGV2YC4gVGhlc2UgYXJlIGJvdGggbmV0d29yayBkZXZpY2VzLCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIFRoYXQgbWVhbnMsIGJ5IGRlZmluaXRpb24sIHRoZWlyIEV0aGVybmV0IGFkZHJlc3NlcyAoYGRldl9hZGRyYCkgc2hvdWxkIGJlIHN0YW5kYXJkLCBwcm9wZXJseSBpbml0aWFsaXplZCBNQUMgYWRkcmVzc2VzIOKAkyB0aGV5IGdldCBzZXQgZHVyaW5nIHRoZSBuZXRkZXYgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMuIFNvLCB0aGUgY2hhbmNlcyBvZiB0aGVtIGJlaW5nIHVuaW5pdGlhbGl6ZWQgYXJlIHZlcnksIHZlcnkgbG93LCBpZiB0aGUgbmV0d29yayBzdGFjayBpcyBiZWhhdmluZyBhcyBleHBlY3RlZC5cblxuVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGhpbmdlcyBvbiBgZXRoZXJfYWRkcl9lcXVhbCh2LVx1MDAzZWRldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIpYC4gVGhpcyBjb21wYXJlcyBzaXggYnl0ZXMuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGV0aGVyX2FkZHJfZXF1YWxgIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0IGl0IHRvLiBUaGUgY29kZSBpcyBsaWtlbHkgb3B0aW1pemVkIGZvciBzcGVlZCwgYnV0IEkgc2hvdWxkIHNhbml0eSBjaGVjayB0aGF0IGl0J3MgZG9pbmcgYSBwcm9wZXIsIGJ5dGUtYnktYnl0ZSBjb21wYXJpc29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MzozNy4wMTE5MTAxMzFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MzQ4MjE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIGJvb2wgZXRoZXJfYWRkcl9lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfaW5oZXJpdChzdHJ1Y3QgbmV0X2RldmljZSAqZHN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTM1Mi0gKi9cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6MzUzOnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsKGNvbnN0IHU4ICphZGRyMSwgY29uc3QgdTggKmFkZHIyKVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTM4MS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6MzgyOnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MDUtICovXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjQwNjpzdGF0aWMgaW5saW5lIGJvb2wgZXRoZXJfYWRkcl9lcXVhbF91bmFsaWduZWQoY29uc3QgdTggKmFkZHIxLCBjb25zdCB1OCAqYWRkcjIpXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTQwNy17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNDI0LSAqL1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDo0MjU6c3RhdGljIGlubGluZSBib29sIGV0aGVyX2FkZHJfZXF1YWxfbWFza2VkKGNvbnN0IHU4ICphZGRyMSwgY29uc3QgdTggKmFkZHIyLFxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MjYtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTggKm1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUzOjM3LjcwNTM5ODU4WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc4MDgxNTQ4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBIZXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgZXhwb3NlcyByaXNrcyBkZXRlY3RhYmxlICpvbmx5KiBieSBLTVNBTi4gSSdtIGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRmlyc3QsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhlIHBhdGNoJ3MgYWN0aW9uczogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiB0aGUgYGdldF92bGFuKClgIGZ1bmN0aW9uIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gVGhpcyBjaGVjayB2ZXJpZmllcyB0aGF0IHRoZSBWTEFOIGRldmljZSAoYHZgKSBoYXMgdGhlIHNhbWUgTUFDIGFkZHJlc3MgYXMgdGhlIHBhcmVudCBBUC9QMlBfR08gZGV2aWNlIChgZGV2YCkuIENydWNpYWxseSwgdGhpcyBpcyBhIHZhbGlkYXRpb24sIGFuICppbnB1dCBjaGVjayouIFRoZSBmdW5jdGlvbiBub3cgYWNjZXB0cyBgZGV2YCBhbmQgdGhlIGNhbGxlciBzZXRzIGBkZXZgIHRvIHRoZSBwcm9wZXIgbmV0X2RldmljZS4gVGhlIHZhbGlkYXRpb24gbG9naWMgbm93IGNvbXBhcmVzIGB2LVx1MDAzZWRldl9hZGRyYCBhbmQgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWxgLCByZXR1cm5pbmcgYC1FSU5WQUxgIGlmIHRoZSBhZGRyZXNzZXMgZG9uJ3QgbWF0Y2guXG5cbk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGVzZSBxdWVzdGlvbnM6XG5cbjEuICAqKkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgZGF0YSB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgYW5kIHNlbnQgdG8gdXNlcnNwYWNlPyoqIE5vLiBJdCBkb2VzIG5vdCBzZW5kIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuXG4yLiAgKipEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogIE5vLCBgZGV2YCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBhIHdlbGwtZGVmaW5lZCBgZGV2YCBhbmQgYSBgdmAgYWNxdWlyZWQgdGhyb3VnaCBgZGV2X2dldF9ieV9pbmRleGAgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZC5cbjMuICAqKkFyZSB0aGVyZSBuZXcgYWxsb2NhdGlvbnMgb3IgY2hhbmdlcyB0byBleGlzdGluZyBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyoqIE5vLCB0aGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgaW50cm9kdWNlZCBvciBjaGFuZ2VkLlxuNC4gICoqQXJlIHRoZXJlIHBvdGVudGlhbCBib3VuZHMgY2hlY2tzIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIE5vLiBUaGUgcGF0Y2ggaW1wb3NlcyBhIHN0cmljdGVyIHJlc3RyaWN0aW9uLiBJdOKAmXMgYSB2YWxpZGF0aW9uIHRoYXQgZ3VhcmFudGVlcyBhbGlnbm1lbnQgb2YgVkxBTiB0byB0aGUgcGFyZW50IGRldmljZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYXJlIGFscmVhZHkgZW5hYmxlZC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMqLiBUaGUgY3JpdGljYWwgcnVsZSBpcywgaWYgS0FTQU4gKG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzKSBjYW4gY2F0Y2ggYSBidWcsIEtNU0FOIGlzICpub3QqIG5lY2Vzc2FyeS4gS01TQU4gZnV6emluZyBpcyBleHBlbnNpdmUuXG5cbkluIHRoaXMgc3BlY2lmaWMgY2FzZSwgYm90aCBgdmAgYW5kIGBkZXZgIGFyZSwgYXQgdGhlIHBvaW50IG9mIGFjY2VzcywgdmFsaWQsIHJlZ2lzdGVyZWQgYG5ldF9kZXZpY2VgIHBvaW50ZXJzIHdob3NlIGBkZXZfYWRkcmAgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgbmV0d29yayBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIGBkZXZgIG9yIGB2YCDigJMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciBsaWZlY3ljbGUgcHJvYmxlbXMg4oCTIGFyZSBhbHJlYWR5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgY2F1Z2h0IGJ5IGV4aXN0aW5nIHRvb2xzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgc29saWQsIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBzcGVjaWFsIEtNU0FOIGNvbnNpZGVyYXRpb25zLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhIGNoZWNrIGZvciBhbGlnbm1lbnQgb2YgdGhlIFZMQU4gdG8gdGhlIHBhcmVudCBkZXZpY2UsIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBoZXJlLiBUaW1lIHRvIGZsYWcgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3MSwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTM6NDUuNTEzNTU4NDU4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBnZXRfdmxhbigpYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgdG8gdGFrZSBhbiBhZGRpdGlvbmFsIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCBhcmd1bWVudCBhbmQgdmVyaWZpZXMgdGhhdCBgZGV2YCBpcyB2YWxpZCBhbmQgdGhhdCBgdi1cXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHVzaW5nIGBldGhlcl9hZGRyX2VxdWFsKClgLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVxcdTAwM2VkZXZfYWRkcmAgbWF0Y2hlcyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcy4gVGhlIGBkZXZfYWRkcmAgZmllbGRzIGJlaW5nIGNvbXBhcmVkIGJlbG9uZyB0byBleGlzdGluZywgcmVnaXN0ZXJlZCBuZXR3b3JrIGRldmljZXMgKGBuZXRfZGV2aWNlYCkgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIHBvaW50ZXIgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 08:26:56 +0000 UTC FinishedAt: 2026-09-14 08:53:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2acabf7847fba2ebd0af7ea393fa0a7a35c46238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2acabf7847fba2ebd0af7ea393fa0a7a35c46238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "1d56ef4e-a1d3-470b-9428-82bc34270923" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "get_vlan", "nl80211_set_station", "nl80211_new_station" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "2acabf7847fba2ebd0af7ea393fa0a7a35c46238", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X3ZsYW4mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgZ2V0X3ZsYW4oKWAgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHRvIHRha2UgYW4gYWRkaXRpb25hbCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAgYXJndW1lbnQgYW5kIHZlcmlmaWVzIHRoYXQgYGRldmAgaXMgdmFsaWQgYW5kIHRoYXQgYHYtXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgYSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSB0YXJnZXQgQVAvUDJQX0dPIGludGVyZmFjZSB3aGVuIHNldHRpbmcgb3IgYWRkaW5nIGEgc3RhdGlvbiBpbiBubDgwMjExLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHJlcXVlc3QgaGFuZGxpbmcgaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsL3NpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDgwY2RlODNiMDg3MTEyZGRhYThkNDE4MjcxMjNmMTU1MmQyZDczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDg5OWI2Mzc0YzU1MDYuLjBmMzM4ODMxMmNjZDggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtODk2NiwxMCAmIzQzOzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4gXG4gLypcbi0gKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZyBhbmQgb24gdGhlIHJpZ2h0IHdpcGh5LlxuJiM0MzsgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZywgb24gdGhlIHJpZ2h0IHdpcGh5XG4mIzQzOyAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmxhdHRyICp2bGFuYXR0ciA9IGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICp2O1xuQEAgLTg5OTksNiAmIzQzOzkwMDEsMTIgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRnb3RvIGVycm9yO1xuIFx0fVxuIFxuJiM0MztcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cbiYjNDM7XHRpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LVx1MDAzZWRldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHY7XG4gIGVycm9yOlxuIFx0ZGV2X3B1dCh2KTtcbkBAIC05Mjk2LDcgJiM0Mzs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbiYjNDM7XHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XG4gXHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuIFxuQEAgLTk1OTcsNyAmIzQzOzk2MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFxuIFx0XHQvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi9cbi1cdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbiYjNDM7XHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbiBcdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuIFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF92bGFuJiMzNDssCiAgICAmIzM0O25sODAyMTFfc2V0X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgYSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSB0YXJnZXQgQVAvUDJQX0dPIGludGVyZmFjZSB3aGVuIHNldHRpbmcgb3IgYWRkaW5nIGEgc3RhdGlvbiBpbiBubDgwMjExLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHJlcXVlc3QgaGFuZGxpbmcgaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsL3NpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDgwY2RlODNiMDg3MTEyZGRhYThkNDE4MjcxMjNmMTU1MmQyZDczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDU6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA4OTliNjM3NGM1NTA2Li4wZjMzODgzMTJjY2Q4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTg5NjYsMTAgJiM0Mzs4OTY2LDEyIEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7CiAKIC8qCi0gKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZyBhbmQgb24gdGhlIHJpZ2h0IHdpcGh5LgomIzQzOyAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nLCBvbiB0aGUgcmlnaHQgd2lwaHkKJiM0MzsgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS4KICAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKJiM0MzsJCQkJICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdjsKQEAgLTg5OTksNiAmIzQzOzkwMDEsMTIgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogCQlnb3RvIGVycm9yOwogCX0KIAomIzQzOwkvKiBDaGVjayBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlICovCiYjNDM7CWlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtJmd0O2Rldl9hZGRyLCBkZXYtJmd0O2Rldl9hZGRyKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gdjsKICBlcnJvcjoKIAlkZXZfcHV0KHYpOwpAQCAtOTI5Niw3ICYjNDM7OTMwNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYpOwomIzQzOwlwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7CiAJaWYgKElTX0VSUihwYXJhbXMudmxhbikpCiAJCXJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTsKIApAQCAtOTU5Nyw3ICYjNDM7OTYwNSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAKIAkJLyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovCi0JCXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7CiYjNDM7CQlwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7CiAJCWlmIChJU19FUlIocGFyYW1zLnZsYW4pKQogCQkJcmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pOwogCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN0YXRpb24gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhlIGBnZXRfdmxhbmAgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuIFRoZSBjcml0aWNhbCBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayB3aXRoaW4gYGdldF92bGFuYCB0byBlbnN1cmUgdGhlIFZMQU4gaW50ZXJmYWNlIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlIHByb3ZpZGVkIEFQL1AyUF9HTyBpbnRlcmZhY2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgcmVsaWFibHkgdGVzdGVkPyBHaXZlbiB0aGUgZm9jdXMgb24gbmV0bGluayBubDgwMjExIGNvbW1hbmRzLCBJIHdvbmRlciBpZiB0aGUgZnV6emluZyBpbmZyYXN0cnVjdHVyZSBpcyBzZXQgdXAgdG8gYWRkcmVzcyB0aGlzIQoKQWgsIGl0IGlzISBtYWM4MDIxMV9od3NpbSBpcywgdGhhbmtmdWxseSwgYSBzdGFwbGUgaW4gc3l6a2FsbGVyLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSByZWFkaWx5IGF2YWlsYWJsZSBzb2Z0d2FyZS1zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlLCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHRlc3RpbmcgbGFuZHNjYXBlLiBOZXRsaW5rIGNvbW1hbmRzIGxpa2UgYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBhbmQgYE5MODAyMTFfQ01EX05FV19TVEFUSU9OYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gTm8gaGFyZHdhcmUgY29uc3RyYWludHMgdG8gd29ycnkgYWJvdXQgaGVyZSEgSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBmaWxlcyBhbmQgYEtjb25maWdgIGZvciB0aGUgc3BlY2lmaWNzLCBidXQgdGhlIGZhY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBpbiBzeXprYWxsZXIgaXMgZ3JlYXQgbmV3cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg5NjU6XHR9XG44OTY2Olx0RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG44OTY3Olx0XG44OTY4Olx0Lypcbjg5Njk6XHQgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZywgb24gdGhlIHJpZ2h0IHdpcGh5XG44OTcwOlx0ICogYW5kIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlIGdpdmVuIEFQL1AyUF9HTyBpbnRlcmZhY2UuXG44OTcxOlx0ICovXG44OTcyOlx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuODk3MzpcdFx0XHRcdFx0ICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuODk3NDpcdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjg5NzU6XHR7XG44OTc2Olx0XHRzdHJ1Y3QgbmxhdHRyICp2bGFuYXR0ciA9IGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTtcbjg5Nzc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICp2O1xuODk3ODpcdFx0aW50IHJldDtcbjg5Nzk6XHRcbjg5ODA6XHRcdGlmICghdmxhbmF0dHIpXG44OTgxOlx0XHRcdHJldHVybiBOVUxMO1xuODk4MjpcdFxuODk4MzpcdFx0diA9IGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChpbmZvKSwgbmxhX2dldF91MzIodmxhbmF0dHIpKTtcbjg5ODQ6XHRcdGlmICghdilcbjg5ODU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG44OTg2Olx0XG44OTg3Olx0XHRpZiAoIXYtXHUwMDNlaWVlZTgwMjExX3B0ciB8fCB2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkgIT0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeSkge1xuODk4ODpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuODk4OTpcdFx0XHRnb3RvIGVycm9yO1xuODk5MDpcdFx0fVxuODk5MTpcdFxuODk5MjpcdFx0aWYgKHYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiBcdTAwMjZcdTAwMjZcbjg5OTM6XHRcdCAgICB2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQIFx1MDAyNlx1MDAyNlxuODk5NDpcdFx0ICAgIHYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB7XG44OTk1Olx0XHRcdHJldCA9IC1FSU5WQUw7XG44OTk2Olx0XHRcdGdvdG8gZXJyb3I7XG44OTk3Olx0XHR9XG44OTk4Olx0XG44OTk5Olx0XHRpZiAoIW5ldGlmX3J1bm5pbmcodikpIHtcbjkwMDA6XHRcdFx0cmV0ID0gLUVORVRET1dOO1xuOTAwMTpcdFx0XHRnb3RvIGVycm9yO1xuOTAwMjpcdFx0fVxuOTAwMzpcdFxuOTAwNDpcdFx0LyogQ2hlY2sgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZSAqL1xuOTAwNTpcdFx0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuOTAwNjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuOTAwNzpcdFx0XHRnb3RvIGVycm9yO1xuOTAwODpcdFx0fVxuOTAwOTpcdFxuOTAxMDpcdFx0cmV0dXJuIHY7XG45MDExOlx0IGVycm9yOlxuOTAxMjpcdFx0ZGV2X3B1dCh2KTtcbjkwMTM6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG45MDE0Olx0fVxuOTAxNTpcdFxuOTAxNjpcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9zdGFfd21lKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG45MDE3Olx0XHRcdFx0XHQgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKVxuOTAxODpcdHtcbjkwMTk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfU1RBX1dNRV9NQVggJiM0MzsgMV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIERldmljZSBDb250ZXh0IGluIG5sODAyMTEuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCBhZ2Fpbi4gSSB3YW50IHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGhvdyB0aGUgYGRldmAgdmFyaWFibGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiBsaW5lcyA5Mjg1LTkzMjAgYW5kIDk1OTAtOTYyMC4gVGhpcyBzaG91bGQgY2xhcmlmeSBob3cgdGhlIGRldmljZSBjb250ZXh0IGlzIGVzdGFibGlzaGVkIGFuZCB1c2VkIHdoZW4gc2V0dGluZyB1cCBvciBtb2RpZnlpbmcgc3RhdGlvbiBjb25maWd1cmF0aW9ucyB2aWEgbmw4MDIxMS4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgdG8gZGVidWcgYSBwb3RlbnRpYWwgaXNzdWUsIG9yIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBuZXcgc3RhdGlvbiBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5Mjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkyODU6XHRcdH1cbjkyODY6XHRcbjkyODc6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pXG45Mjg4Olx0XHRcdHBhcmFtcy5haXJ0aW1lX3dlaWdodCA9XG45Mjg5Olx0XHRcdFx0bmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKTtcbjkyOTA6XHRcbjkyOTE6XHRcdGlmIChwYXJhbXMuYWlydGltZV93ZWlnaHQgXHUwMDI2XHUwMDI2XG45MjkyOlx0XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG45MjkzOlx0XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQUlSVElNRV9GQUlSTkVTUykpXG45Mjk0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjkyOTU6XHRcbjkyOTY6XHRcdGVyciA9IG5sODAyMTFfcGFyc2Vfc3RhX3R4cG93ZXJfc2V0dGluZyhpbmZvLFxuOTI5NzpcdFx0XHRcdFx0XHRcdFx1MDAyNnBhcmFtcy5saW5rX3N0YV9wYXJhbXMudHhwd3IsXG45Mjk4Olx0XHRcdFx0XHRcdFx0XHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cl9zZXQpO1xuOTI5OTpcdFx0aWYgKGVycilcbjkzMDA6XHRcdFx0cmV0dXJuIGVycjtcbjkzMDE6XHRcbjkzMDI6XHRcdC8qIEluY2x1ZGUgcGFyYW1ldGVycyBmb3IgVERMUyBwZWVyICh3aWxsIGNoZWNrIGxhdGVyKSAqL1xuOTMwMzpcdFx0ZXJyID0gbmw4MDIxMV9zZXRfc3RhdGlvbl90ZGxzKGluZm8sIFx1MDAyNnBhcmFtcyk7XG45MzA0Olx0XHRpZiAoZXJyKVxuOTMwNTpcdFx0XHRyZXR1cm4gZXJyO1xuOTMwNjpcdFxuOTMwNzpcdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuOTMwODpcdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG45MzA5Olx0XHRcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcbjkzMTA6XHRcbjkzMTE6XHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbjkzMTI6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG45MzEzOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XG45MzE0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzpcbjkzMTU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcbjkzMTY6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbjkzMTc6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG45MzE4Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG45MzE5Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbjkzMjA6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEE6XG45MzIxOlx0XHRcdGJyZWFrO1xuOTMyMjpcdFx0ZGVmYXVsdDpcbjkzMjM6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG45MzI0Olx0XHRcdGdvdG8gb3V0X3B1dF92bGFuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgYGRldmAgaW4gYG5sODAyMTFfc2V0X3N0YXRpb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBgZGV2YCB2YXJpYWJsZSBjb21lcyBmcm9tIHdpdGhpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgb3IgbW9kaWZ5aW5nIHNvbWUgd2lyZWxlc3MgYmVoYXZpb3IgSSYjMzk7bSB3b3JraW5nIHdpdGguIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB0cmFjZSB0aGUgY2FsbCBzdGFjayBvciBjb2RlIGZsb3cgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgYGRldmAgaXMgaW5pdGlhbGl6ZWQgb3IgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBhIHBvaW50ZXIgdG8gYSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUsIHByb2JhYmx5IGEgYHN0cnVjdCBuZXRfZGV2aWNlICpgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyBiZWluZyB1c2VkLiBJcyBpdCBiZWluZyBwYXNzZWQgZGlyZWN0bHkgZnJvbSBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgcGVyaGFwcyBgY2ZnODAyMTFgIG9yIHNvbWUgb3RoZXIgbmV0bGluayBoYW5kbGVyPyBPciBpcyBpdCBwb3NzaWJseSBiZWluZyBsb29rZWQgdXAgYmFzZWQgb24gc29tZSBvdGhlciBpZGVudGlmaWVyIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZXMgdG8gZmluZCB3aGVyZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgaXMgY2FsbGVkLCBhbmQgdGhlbiB3b3JrIG15IHdheSBiYWNrd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgYW5kIGFueSBpbnRlcm1lZGlhdGUgc3RlcHMgdGhhdCBtaWdodCBpbnZvbHZlIGRldmljZSBsb29rdXAgb3IgaW5pdGlhbGl6YXRpb24uIEhvcGVmdWxseSwgaXQmIzM5O3Mgbm90IGJ1cmllZCB0b28gZGVlcCBpbiBzb21lIG1hY3JvcyBvciBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0X2RldmljZWAgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMgdXRpbGl6ZWQgd2l0aGluIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTE4MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG45MTgxOlx0XG45MTgyOlx0XHQvKlxuOTE4MzpcdFx0ICogQUlEIGFuZCBsaXN0ZW5faW50ZXJ2YWwgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHVuYXNzb2NpYXRlZFxuOTE4NDpcdFx0ICogc3RhdGlvbi4gSW5jbHVkZSB0aGVzZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIHdpbGwgY2hlY2sgdGhlbSBpblxuOTE4NTpcdFx0ICogY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UoKS5cbjkxODY6XHRcdCAqL1xuOTE4NzpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKVxuOTE4ODpcdFx0XHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pO1xuOTE4OTpcdFxuOTE5MDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKVxuOTE5MTpcdFx0XHRwYXJhbXMudmxhbl9pZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKTtcbjkxOTI6XHRcbjkxOTM6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSlcbjkxOTQ6XHRcdFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9XG45MTk1Olx0XHRcdCAgICAgbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pO1xuOTE5NjpcdFx0ZWxzZVxuOTE5NzpcdFx0XHRwYXJhbXMubGlzdGVuX2ludGVydmFsID0gLTE7XG45MTk4Olx0XG45MTk5Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRfUDJQX1BTXSlcbjkyMDA6XHRcdFx0cGFyYW1zLnN1cHBvcnRfcDJwX3BzID1cbjkyMDE6XHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JUX1AyUF9QU10pO1xuOTIwMjpcdFx0ZWxzZVxuOTIwMzpcdFx0XHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPSAtMTtcbjkyMDQ6XHRcbjkyMDU6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcbjkyMDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MjA3Olx0XG45MjA4Olx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuOTIwOTpcdFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbjkyMTA6XHRcbjkyMTE6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcbjkyMTI6XHRcdFx0LyogSWYgTUxEX0FERFIgYXR0cmlidXRlIGlzIHNldCB0aGVuIHRoaXMgaXMgYW4gTUxEIHN0YXRpb25cbjkyMTM6XHRcdFx0ICogYW5kIHRoZSBNTERfQUREUiBhdHRyaWJ1dGUgaG9sZHMgdGhlIE1MRCBhZGRyZXNzIGFuZCB0aGVcbjkyMTQ6XHRcdFx0ICogTUFDIGF0dHJpYnV0ZSBob2xkcyBmb3IgdGhlIExJTksgYWRkcmVzcy5cbjkyMTU6XHRcdFx0ICogSW4gdGhhdCBjYXNlLCB0aGUgbGlua19pZCBpcyBhbHNvIGV4cGVjdGVkIHRvIGJlIHZhbGlkLlxuOTIxNjpcdFx0XHQgKi9cbjkyMTc6XHRcdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMClcbjkyMTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZvY3VzaW5nIG9uIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB1cG9uIHNlZWluZyB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgYG5sODAyMTFfc2V0X3N0YXRpb25gOgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIG5sODAyMTFfc2V0X3N0YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBzdGFydGluZyBwb2ludCBmb3IgYG5sODAyMTFfc2V0X3N0YXRpb25g4oCmIHJpZ2h0LCB0aGlzIGlzIHdoZXJlIHdlIGJlZ2luIHRvIGNvbmZpZ3VyZSBzdGF0aW9uIHBhcmFtZXRlcnMgdGhyb3VnaCB0aGUgbmw4MDIxMSBpbnRlcmZhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBoaWdoLWxldmVsIGNvbnRleHQgaGVyZS4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cyBiZWluZyBzZXQ/IFdoYXQga2luZCBvZiBjb250cm9sIGZsb3cgYW0gSSBsb29raW5nIGF0PyBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgZW5jb3VudGVyZWQgYXQgdGhpcyBlbnRyeSBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBhbnkgcHJlbGltaW5hcnkgY2hlY2tzIGFuZCBzYW5pdHkgdmFsaWRhdGlvbnMgdGhhdCBtYXkgdGFrZSBwbGFjZSBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljLiBJIGFudGljaXBhdGUgc29tZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB3aXJlbGVzcyBkZXZpY2UmIzM5O3MgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgdGhlIG5ldGxpbmsgbWVzc2FnZSBpcyBwYXJzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gc29tZXRoaW5nIHRoZSBkcml2ZXIgY2FuIHdvcmsgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkxNTA6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tpZHhdKVxuOTE1MTpcdFx0XHRcdFx0dHhwd3ItXHUwMDNlcG93ZXIgPSBubGFfZ2V0X3MxNihpbmZvLVx1MDAzZWF0dHJzW2lkeF0pO1xuOTE1MjpcdFx0XHRcdGVsc2VcbjkxNTM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTE1NDpcdFx0XHR9XG45MTU1Olx0XG45MTU2Olx0XHRcdCp0eHB3cl9zZXQgPSB0cnVlO1xuOTE1NzpcdFx0fSBlbHNlIHtcbjkxNTg6XHRcdFx0KnR4cHdyX3NldCA9IGZhbHNlO1xuOTE1OTpcdFx0fVxuOTE2MDpcdFxuOTE2MTpcdFx0cmV0dXJuIDA7XG45MTYyOlx0fVxuOTE2MzpcdFxuOTE2NDpcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuOTE2NTpcdHtcbjkxNjY6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG45MTY3Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjkxNjg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVx1MDAzZW5ldGRldjtcbjkxNjk6XHRcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xuOTE3MDpcdFx0dTggKm1hY19hZGRyO1xuOTE3MTpcdFx0aW50IGVycjtcbjkxNzI6XHRcbjkxNzM6XHRcdG1lbXNldChcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcbjkxNzQ6XHRcbjkxNzU6XHRcdGlmICghZGV2IFx1MDAyNlx1MDAyNiB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gXHUwMDI2XHUwMDI2XG45MTc2Olx0XHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXG45MTc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTE3ODpcdFxuOTE3OTpcdFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2Vfc3RhdGlvbilcbjkxODA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTE4MTpcdFxuOTE4MjpcdFx0LypcbjkxODM6XHRcdCAqIEFJRCBhbmQgbGlzdGVuX2ludGVydmFsIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvbmx5IGZvciB1bmFzc29jaWF0ZWRcbjkxODQ6XHRcdCAqIHN0YXRpb24uIEluY2x1ZGUgdGhlc2UgcGFyYW1ldGVycyBoZXJlIGFuZCB3aWxsIGNoZWNrIHRoZW0gaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgYGRldmAgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGdvdGNoYSB3aXRoIHRoZSBgZGV2YCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBgZGV2YCBjb3VsZCBiZSBhIE5VTEwgcG9pbnRlciB1bmRlciB0d28gc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgd2Rldi0mZ3Q7aWZ0eXBlYCBpcyBgTkw4MDIxMV9JRlRZUEVfTkFOYCBvciBpZiBpdCYjMzk7cyBgTkFOX0RBVEFgLiBUaGlzIGlzIGEgcHJldHR5IGltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBrZWVwIGluIG1pbmQsIGJlY2F1c2UgZG93bnN0cmVhbSBjaGVja3MgYXJlIGdvaW5nIHRvIG5lZWQgdG8gYWNjb21tb2RhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGBkZXZgIGJlaW5nIE5VTEwgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGBnZXRfdmxhbmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhpcyBibG9jazoKCmBgYGMKCS8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi8KCWlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtJmd0O2Rldl9hZGRyLCBkZXYtJmd0O2Rldl9hZGRyKSkgewoJCXJldCA9IC1FSU5WQUw7CgkJZ290byBlcnJvcjsKCX0KYGBgCgpUaGUgY29kZSBjaGVja3MgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZS4gVGhlIHRlc3QgZm9yIGAhZGV2YCBpcyB0aGUgY3J1Y2lhbCBwaWVjZSBoZXJlLCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBwb3RlbnRpYWwgTlVMTCBjaGVjayBJIHdhcyBqdXN0IGNvbnNpZGVyaW5nLiBJZiBgZGV2YCBpcyBOVUxMLCBkdWUgdG8gdGhlIGNvbmRpdGlvbnMgSSBub3RlZCBhYm92ZSwgdGhlIGNoZWNrIHdpbGwgcGFzcyBhbmQgbGVhZCB0byBgLUVJTlZBTGAuIFRoaXMgbWFrZXMgc2Vuc2UsIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUuIElmIHdlICpkb24mIzM5O3QqIGhhdmUgYSB2YWxpZCAmIzM5O2RldiYjMzk7IHdlIHNob3VsZG4mIzM5O3QgY29udGludWUuCgpTbywgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBgZ2V0X3ZsYW5gIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGJlIHZlcnkgc3VyZSB0aGF0IGBkZXZgIGlzIHZhbGlkIGJlZm9yZSB3ZSBldmVuIGdldCB0byB0aGUgYGV0aGVyX2FkZHJfZXF1YWxgIGNhbGwuIE90aGVyd2lzZSwgd2UgY291bGQgYmUgcnVubmluZyBpbnRvIHNvbWUgbmFzdHkgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYWxsIG9mIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGF0IGFyZWEgbm93LCBhcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVkxBTiBpbnRlcmZhY2UgaXMgc3RhcnRpbmcgdG8gYmUgY2xlYXJlciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTUzMDpcdFx0LyogSFQvVkhUIHJlcXVpcmVzIFFvUywgYnV0IGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRoYXQganVzdCBpZ25vcmUgSFQvVkhUXG45NTMxOlx0XHQgKiBhcyB1c2Vyc3BhY2UgbWlnaHQganVzdCBwYXNzIHRocm91Z2ggdGhlIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBJRXNcbjk1MzI6XHRcdCAqIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBlbmZvcmNpbmcgdGhpcyByZXN0cmljdGlvbiBhbmQgcmV0dXJuaW5nIGFuXG45NTMzOlx0XHQgKiBlcnJvciBpbiB0aGlzIGNhc2UuXG45NTM0Olx0XHQgKi9cbjk1MzU6XHRcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpKSkge1xuOTUzNjpcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmh0X2NhcGEgPSBOVUxMO1xuOTUzNzpcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLnZodF9jYXBhID0gTlVMTDtcbjk1Mzg6XHRcbjk1Mzk6XHRcdFx0LyogSEUsIEVIVCBhbmQgVUhSIHJlcXVpcmUgV01FICovXG45NTQwOlx0XHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlX2NhcGFfbGVuIHx8XG45NTQxOlx0XHRcdCAgICBwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSB8fFxuOTU0MjpcdFx0XHQgICAgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYV9sZW4gfHxcbjk1NDM6XHRcdFx0ICAgIHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudWhyX2NhcGFfbGVuKVxuOTU0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTU0NTpcdFx0fVxuOTU0NjpcdFxuOTU0NzpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuOTU0ODpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45NTQ5Olx0XHRcdGlmIChwYXJhbXMuc3RhX21vZGlmeV9tYXNrIFx1MDAyNiBTVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEKVxuOTU1MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTU1MTpcdFx0XHQvKiBOQU4gTk1JIHN0YXRpb24gbXVzdCBiZSBhZGRlZCBpbiBhc3NvY2lhdGVkIG9yIGF1dGhvcml6ZWQgc3RhdGUgKi9cbjk1NTI6XHRcdFx0aWYgKCEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IChCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKSB8XG45NTUzOlx0XHRcdFx0XHRcdCAgICAgIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpKSkpXG45NTU0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45NTU1Olx0XHR9XG45NTU2Olx0XG45NTU3Olx0XHQvKiBFbnN1cmUgdGhhdCBIVC9WSFQgY2FwYWJpbGl0aWVzIGFyZSBub3Qgc2V0IGZvciA2IEdIeiBIRSBTVEEgKi9cbjk1NTg6XHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSBcdTAwMjZcdTAwMjZcbjk1NTk6XHRcdCAgICAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5odF9jYXBhIHx8IHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEpKVxuOTU2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk1NjE6XHRcbjk1NjI6XHRcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXG45NTYzOlx0XHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOCk7XG45NTY0Olx0XG45NTY1Olx0XHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG45NTY2Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuOTU2NzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuOTU2ODpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG45NTY5Olx0XHRcdC8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi9cbjk1NzA6XHRcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcbjk1NzE6XHRcdFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxuOTU3MjpcdFx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcbjk1NzM6XHRcbjk1NzQ6XHRcdFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZSBzdGFydCBvZiBgbmw4MDIxMV9uZXdfc3RhdGlvbmAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGl2aW5nIGludG8gYG5sODAyMTFfbmV3X3N0YXRpb25gIOKAkyBJbml0aWFsIFRob3VnaHRzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgKmJlZ2lucyogd2hlbiBhIG5ldyBzdGF0aW9uIGNvbm5lY3RzIOKAkyB0aGUgcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyB3aXJlbGVzcyBzdWJzeXN0ZW0gZ2V0cyBpdHMgaG9va3MgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCBhbmQgaG93IHRoaXMgY29ubmVjdGlvbiBpcyBiZWluZyByZXByZXNlbnRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBjb25jZXJucyBhcmUgYWx3YXlzIGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG1ha2luZyBzdXJlIHRoaXMgbmV3IHN0YXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuCgpJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlvbiYjMzk7cyBjb25maWd1cmF0aW9uIGRhdGEsIGxpa2UgaXRzIE1BQyBhZGRyZXNzLCBhc3NvY2lhdGVkIEJTU0lELCBhbmQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBpcyBiZWluZyBwYXNzZWQgaW4uIEFyZSB3ZSB2YWxpZGF0aW5nIHRoaXMgZGF0YSBwcm9wZXJseT8gSXMgdGhlcmUgYW55IG9wcG9ydHVuaXR5IGZvciBpbmplY3Rpb24gb2YgbWFsaWNpb3VzIGRhdGEgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBmb3IgY2hlY2tzIG9uIGxlbmd0aHMsIHZhbGlkIE1BQyBhZGRyZXNzZXMsIGFuZCBhbnkgb3RoZXIgc2FuaXR5IGNoZWNrcyB0aGUgZGV2ZWxvcGVycyBoYXZlIGltcGxlbWVudGVkLgoKTmV4dCwgSSYjMzk7bSBnb2luZyB0byBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbmV3IHN0YXRpb24gaXMgYmVpbmcgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gSG93IGFyZSB0aGV5IGxpbmtlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0/IElzIGl0IGEgc2luZ2xlIGFsbG9jYXRpb24sIG9yIGFyZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBJJiMzOTtsbCBiZSBrZWVwaW5nIGEga2VlbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3Mg4oCTIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gTWVtb3J5IG1hbmFnZW1lbnQgd2lsbCBiZSBjcml0aWNhbCDigJMgSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga21hbGxvY2Agb3Igc2ltaWxhciwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRob3NlIGFsbG9jYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBhbmQgdGhhdCBkZWFsbG9jYXRpb24gaGFwcGVucyBpbiB0aGUgY29ycmVjdCBzaXR1YXRpb25zLCBhdm9pZGluZyBtZW1vcnkgbGVha3MuCgpGaW5hbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXZlbnQgb3IgY2FsbGJhY2sgcmVnaXN0cmF0aW9uLiBEb2VzIHRoaXMgZnVuY3Rpb24gdHJpZ2dlciBvdGhlciBhY3Rpb25zIG9yIHNldCB1cCBmdXR1cmUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN0YXRpb24/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3RhdGlvbiYjMzk7cyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgbWFuYWdlZCwgYW5kIGhvdyB0aGF0IGluZm9ybWF0aW9uIGlzIG1hZGUgYWNjZXNzaWJsZSB0byBvdGhlciBzdWJzeXN0ZW1zLCBsaWtlIHRoZSBuZXR3b3JraW5nIHN0YWNrIG9yIGFueSB1c2Vyc3BhY2UgbW9uaXRvcmluZyB0b29scy4gSSB3aWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gZW5zdXJlIGFsbCBpbml0aWFsaXNhdGlvbiByb3V0aW5lcyBhcmUgY2FsbGVkIGFuZCB0aGF0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHN0YXRpb24gaXMgaW5pdGlhbGl6ZWQgdG8gYSB2YWxpZCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NDUwOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pIHtcbjk0NTE6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhID1cbjk0NTI6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSk7XG45NDUzOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYV9sZW4gPVxuOTQ1NDpcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xuOTQ1NTpcdFxuOTQ1NjpcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKSB7XG45NDU3Olx0XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSA9XG45NDU4Olx0XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FSFRfQ0FQQUJJTElUWV0pO1xuOTQ1OTpcdFx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuID1cbjk0NjA6XHRcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKTtcbjk0NjE6XHRcbjk0NjI6XHRcdFx0XHRpZiAoIWllZWU4MDIxMV9laHRfY2FwYV9zaXplX29rKChjb25zdCB1OCAqKXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYSxcbjk0NjM6XHRcdFx0XHRcdFx0XHRcdChjb25zdCB1OCAqKXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGEsXG45NDY0Olx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmVodF9jYXBhX2xlbixcbjk0NjU6XHRcdFx0XHRcdFx0XHRcdGZhbHNlKSlcbjk0NjY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTQ2NzpcdFx0XHR9XG45NDY4Olx0XHR9XG45NDY5Olx0XG45NDcwOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKSB7XG45NDcxOlx0XHRcdGlmICghcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSlcbjk0NzI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk0NzM6XHRcbjk0NzQ6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy51aHJfY2FwYSA9XG45NDc1Olx0XHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKTtcbjk0NzY6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy51aHJfY2FwYV9sZW4gPVxuOTQ3NzpcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKTtcbjk0Nzg6XHRcdH1cbjk0Nzk6XHRcbjk0ODA6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pIHtcbjk0ODE6XHRcdFx0cGFyYW1zLmVtbF9jYXBfcHJlc2VudCA9IHRydWU7XG45NDgyOlx0XHRcdHBhcmFtcy5lbWxfY2FwID1cbjk0ODM6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuOTQ4NDpcdFx0fVxuOTQ4NTpcdFxuOTQ4NjpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pXG45NDg3Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfNmdoel9jYXBhID1cbjk0ODg6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTtcbjk0ODk6XHRcbjk0OTA6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TMUdfQ0FQQUJJTElUWV0pXG45NDkxOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuczFnX2NhcGEgPVxuOTQ5MjpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1MxR19DQVBBQklMSVRZXSk7XG45NDkzOlx0XG45NDk0Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gZGVhbGluZyB3aXRoIGBubDgwMjExX25ld19zdGF0aW9uYCBhbmQgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIEZ1bmN0aW9uJiMzOTtzIEhpc3RvcnkqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgaXRzIGxpbmVhZ2UsIHRvIHNlZSB0aGUgY2FsbHMgdGhhdCBsZWFkIHVwIHRvIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIHBhcmFtb3VudCBoZXJlLiBTbyBJ4oCZbSBtZW50YWxseSBzY2FubmluZyBiYWNrIHRocm91Z2ggdGhlIGVhcmxpZXIgbGluZXMsIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQuLi4gd2hhdCB0cmlnZ2VycyB0aGlzIGBuZXdfc3RhdGlvbmAgZXZlbnQ/IElzIGl0IGEgYmVhY29uLCBhIHByb2JlIHJlcXVlc3QsIGEgbWFuYWdlbWVudCBmcmFtZT8gS25vd2luZyB0aGF0IHdpbGwgZGVmaW5lIHRoZSBwb3RlbnRpYWwgc2lnbmlmaWNhbmNlIG9mIGFueSBpc3N1ZXMgSSBmaW5kLiBJJiMzOTttIGVzc2VudGlhbGx5IHJldmVyc2UgZW5naW5lZXJpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLCBtZW50YWxseSBidWlsZGluZyBhIG1lbnRhbCBzdGFjayBvZiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjZWRpbmcgY29uZGl0aW9ucy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjbHVlcyB0byBzdXJmYWNlIHNvb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTM2NTpcdFxuOTM2NjpcdFx0XHRcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cbjkzNjc6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcbjkzNjg6XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XG45MzY5Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxuOTM3MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzcxOlx0XHRcdH1cbjkzNzI6XHRcdH0gZWxzZSB7XG45MzczOlx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45Mzc0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc1Olx0XG45Mzc2Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXG45Mzc3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc4Olx0XG45Mzc5Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXHUwMDI2XHUwMDI2XG45MzgwOlx0XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxuOTM4MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM4MjpcdFx0fVxuOTM4MzpcdFxuOTM4NDpcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cbjkzODU6XHRcdFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycyk7XG45Mzg2Olx0XG45Mzg3Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG45Mzg4Olx0XHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcbjkzODk6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XG45MzkwOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19tYWMgPVxuOTM5MTpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5MjpcdFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYykpXG45MzkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzk0Olx0XHR9IGVsc2Uge1xuOTM5NTpcdFx0XHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5NjpcdFx0fVxuOTM5NzpcdFxuOTM5ODpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKSB7XG45Mzk5Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzID1cbjk0MDA6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAxOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzX2xlbiA9XG45NDAyOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAzOlx0XHR9XG45NDA0Olx0XG45NDA1Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45NDA2Olx0XHRcdHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPVxuOTQwNzpcdFx0XHRcdG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKTtcbjk0MDg6XHRcbjk0MDk6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZSBiZWdpbm5pbmcgb2YgYG5sODAyMTFfbmV3X3N0YXRpb25gLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5sODAyMTFfbmV3X3N0YXRpb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24gYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gRmlyc3QgdGhpbmcgSSYjMzk7bSBleHBlY3RpbmcgaXMgdGhlIHVzdWFsIHNldHVwOiBzb21lIHByZWxpbWluYXJ5IGNoZWNrcyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGV2ZW4gYWxsb3dlZCB0byBkbyB0aGlzIOKAkyBhcmUgd2Ugcm9vdD8gSXMgdGhpcyBuZXRsaW5rIG1lc3NhZ2Ugd2VsbC1mb3JtZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbW90ZWx5IHNhbmU/IEkgbmVlZCB0byB2ZXJpZnkgYWxsIHRoZSBpbnB1dHM6IHRoZSBpbnRlcmZhY2UgKG9idmlvdXNseSEpLCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5ldyBzdGF0aW9uLCBhbmQgYW55IGluaXRpYWwgcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9uIGhpbnRzLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIG9wZXJhdGlvbjsgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBpcyBhIGJpZyBkZWFsIGluIHRoZSA4MDIuMTEgd29ybGQsIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayBpZiBhbGwgdGhlIHBhcmFtZXRlcnMgYXJlIGFjY2VwdGFibGUsIGJlY2F1c2UgdGhlIHdyb25nIHZhbHVlcyBjYW4gZGFtYWdlIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsuCgpOZXh0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uLiBXZSYjMzk7cmUgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBlbnRyeSwgc28gd2UgbmVlZCBtZW1vcnkgZm9yIHRoYXQgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGxpa2VseSB3ZSYjMzk7bGwgYmUgYWxsb2NhdGluZyBhIG5ldyBgY2ZnODAyMTFfc3RhdGlvbmAgc3RydWN0dXJlIG9yIHNpbWlsYXIsIHByb2JhYmx5IGxpbmtpbmcgaXQgaW50byBzb21lIGdsb2JhbCBkYXRhIHN0cnVjdHVyZSBvciBhIHBlci1pbnRlcmZhY2UgbGlzdC4gV2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIHRoaXMgbmV3IHN0YXRpb24uIE5vdyBpcyB0aGUgdGltZSB0byBjaGVjayB0aGUgcmVzb3VyY2VzIGF2YWlsYWJsZS4gSXMgdGhlcmUgbWVtb3J5IGF2YWlsYWJsZT8KCk9uY2Ugd2UgaGF2ZSBvdXIgbWVtb3J5LCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHNldHRpbmcgdXAgdGhlIHN0YXRpb24mIzM5O3MgaW5pdGlhbCBzdGF0ZS4gQXJlIHdlIHVzaW5nIGRlZmF1bHQgdmFsdWVzIGZvciBldmVyeXRoaW5nIG9yLCBtb3JlIGxpa2VseSwgYXJlIHdlIGdyYWJiaW5nIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSB0aGUgbmV0bGluayBtZXNzYWdlPyBXZSYjMzk7bGwgbmVlZCB0byBpbml0aWFsaXplIGl0cyBNQUMgYWRkcmVzcywgaXRzIGNvbm5lY3Rpb24gc3RhdGUgKGFzc29jaWF0ZWQsIGF1dGhlbnRpY2F0ZWQsIGV0Yy4pLCBpdHMgY2FwYWJpbGl0aWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHZhbHVlcyBiZWluZyBzZXQgYXJlIHZhbGlkLiBBcmUgd2UgY3JlYXRpbmcgYSBzdGF0aW9uIGZvciBhIHN1cHBvcnRlZCByYWRpbz8gSXMgdGhpcyBhIHN0YW5kYXJkIGFzc29jaWF0aW9uPwoKVGhlIHdob2xlIHByb2Nlc3MgcHJvYmFibHkgaW5jbHVkZXMgc29tZSBsb2NraW5nLiBDcmVhdGluZyBhIG5ldyBzdGF0aW9uIGlzIGEgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YXRlLiBJIGV4cGVjdCBhIG11dGV4IG9yIHJlYWQvd3JpdGUgbG9jayB3aWxsIGJlIGludm9sdmVkLCB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZSBuZXRsaW5rIHJlcXVlc3RzIGRvbiYjMzk7dCBzdG9tcCBvbiBlYWNoIG90aGVyIHdoaWxlIG1lc3Npbmcgd2l0aCB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIGNhbGxiYWNrcyB0byB0aGUgaGFyZHdhcmUgZHJpdmVyIGludm9sdmVkIGF0IHRoaXMgc3RhZ2Ug4oCTIHRlbGxpbmcgdGhlIHdpcmVsZXNzIGNhcmQgdGhhdCBhIG5ldyBzdGF0aW9uIGlzIGNvbWluZyBvbiBib2FyZC4KCkFuZCBmaW5hbGx5LCBvZiBjb3Vyc2UsIGF0IHRoZSBlbmQsIGlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCB0aGVyZSYjMzk7bGwgYmUgc29tZSBuZXRsaW5rIHJlc3BvbnNlLiBFaXRoZXIgYW4gQUNLIHRvIHNheSwgJiMzNDtZZXAsIHN0YXRpb24gY3JlYXRlZCwmIzM0OyBvciBzb21lIGtpbmQgb2YgZXJyb3IgY29kZSBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4gV2UgYXJlIGV4cGVydHMsIGFuZCB3ZSBrbm93IGhvdyB0byBjaGVjayB0aGUgY29kZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGV4cGVjdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkzMzA6XHQgb3V0X3B1dF92bGFuOlxuOTMzMTpcdFx0ZGV2X3B1dChwYXJhbXMudmxhbik7XG45MzMyOlx0XG45MzMzOlx0XHRyZXR1cm4gZXJyO1xuOTMzNDpcdH1cbjkzMzU6XHRcbjkzMzY6XHRzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjkzMzc6XHR7XG45MzM4Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuOTMzOTpcdFx0aW50IGVycjtcbjkzNDA6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuOTM0MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXHUwMDNlbmV0ZGV2O1xuOTM0MjpcdFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XG45MzQzOlx0XHR1OCAqbWFjX2FkZHIgPSBOVUxMO1xuOTM0NDpcdFx0dTMyIGF1dGhfYXNzb2MgPSBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8XG45MzQ1Olx0XHRcdFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xuOTM0NjpcdFxuOTM0NzpcdFx0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuOTM0ODpcdFxuOTM0OTpcdFx0aWYgKCFkZXYgXHUwMDI2XHUwMDI2IHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjkzNTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzUxOlx0XG45MzUyOlx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWFkZF9zdGF0aW9uKVxuOTM1MzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG45MzU0Olx0XG45MzU1Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pXG45MzU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM1NzpcdFxuOTM1ODpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuOTM1OTpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MzYwOlx0XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcbjkzNjE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzNjI6XHRcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MzYzOlx0XHRcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXG45MzY0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzNjU6XHRcbjkzNjY6XHRcdFx0XHQvKiBPbmx5IE5NSSBzdGF0aW9ucyByZWNlaXZlIHRoZSBIVC9WSFQvSEUgY2FwYWJpbGl0aWVzICovXG45MzY3Olx0XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldIHx8XG45MzY4Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSB8fFxuOTM2OTpcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMDAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYDoKCioqRGlzc2VjdGluZyBubDgwMjExLmMmIzM5O3MgQ29yZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA5NTk1LTk2MjUgd2l0aGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBjb250ZXh0IOKAkyB3aGF0IHNwZWNpZmljIGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgaW4gdGhhdCBzZWN0aW9uPyBXaXRob3V0IGtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0JiMzOTtzIGhhcmQgdG8gYmUgcHJlY2lzZSwgYnV0IGJhc2VkIG9uIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgSSYjMzk7ZCB3YWdlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbmV0bGluayBtZXNzYWdlIGhhbmRsZXIsIHF1aXRlIHBvc3NpYmx5IHJlbGF0ZWQgdG8gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvciBzdGF0dXMgdXBkYXRlcy4KCk15IGd1dCB0ZWxscyBtZSB0aGlzIHNlZ21lbnQgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIE5MODAyMTEgYXR0cmlidXRlIG9yIGNvbW1hbmQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IG5ldGxpbmsgbWVzc2FnZSB0eXBlIHRoaXMgc2VjdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggKGUuZy4sIGBOTDgwMjExX0NNRF9TRVRfV0lQSFlgLCBgTkw4MDIxMV9DTURfR0VUX1NUQVRJT05gLCBvciBzb21ldGhpbmcgc2ltaWxhcikuCgpHaXZlbiB0aGUgcmFuZ2Ugb2YgbGluZXMsIGl0IG1pZ2h0IGJlIHBhcnNpbmcgc29tZSB1c2VyLXByb3ZpZGVkIGlucHV0LCB2YWxpZGF0aW5nIGl0LCBhbmQgdGhlbiBwb3NzaWJseSBpbnZva2luZyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIChtYXliZSBpbiB0aGUgbWFjODAyMTEgc3RhY2spIHRvIGVmZmVjdCBhIGNoYW5nZSBpbiB0aGUgd2lyZWxlc3MgZGV2aWNlJiMzOTtzIHN0YXRlLiBJJiMzOTttIGtlZXBpbmcgbXkgZXllIG91dCBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipBdHRyaWJ1dGUgUGFyc2luZzoqKiBBcmUgdGhlcmUgYW55IGNhbGxzIHRvIGBubGFfZ2V0XyooKWAgZnVuY3Rpb25zIHRvIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBuZXRsaW5rIG1lc3NhZ2U/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaW50ZWdlcnMsIHN0cmluZ3MsIG5lc3RlZCBhdHRyaWJ1dGVzPwoqICAgKipWYWxpZGF0aW9uOioqIFdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQgb24gdGhlIGluY29taW5nIGRhdGE/IEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIG9uIHJhbmdlcywgbGVuZ3RocywgYW5kIHZhbGlkIHZhbHVlcz8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGFyZSBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGhhbmRsZWQ/IEFyZSB0aGVyZSBlcnJvciBjb2RlcyBiZWluZyByZXR1cm5lZCB0byB0aGUgdXNlcj8KKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBhcmUgdXNlZCB0byBzdG9yZSB0aGUgcGFyc2VkIGRhdGEgKGUuZy4sIGBjZmc4MDIxMV93aXBoeWAsIGBpZWVlODAyMTFfdmlmYCwgZXRjLik/IEFyZSBhbnkgb2YgdGhvc2Ugc3RydWN0dXJlcyBiZWluZyB1cGRhdGVkPwoqICAgKipGdW5jdGlvbiBDYWxsczoqKiBJcyB0aGlzIHNlY3Rpb24gYSB3cmFwcGVyPyBXaGF0IGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiBkb2luZyB0aGUgaGVhdnkgbGlmdGluZyB0byBjaGFuZ2Ugc3RhdGUgb3IgY29uZmlndXJlIHRoZSBkZXZpY2U/IEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBgY2ZnODAyMTFfKmAgb3IgYGllZWU4MDIxMV8qYCBmdW5jdGlvbiBjYWxscy4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXNlIGxpbmVzIG9mZmVyIG1lIGFueSBpbnNpZ2h0IGludG8gcmVjZW50IGNoYW5nZXMsIGJ1Z3MsIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXTigJlzIGFsc28gcG9zc2libGUgaXTigJlzIHBhcnQgb2YgYSBuZXcgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHNlY3Rpb24gaXMgZG9pbmcuIERlcGVuZGluZyBvbiB3aGF0IGl0IGlzLCBpdCBjb3VsZCBiZSBhIGNsdWUgdG93YXJkIHNvbWUgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NTk1Olx0XHRcdCAqIGFkZGVkIGFzIGFzc29jaWF0ZWQgYW55d2F5IHNpbmNlIHRoaXMgd2FzIHRoZSByZXF1aXJlZCBkcml2ZXJcbjk1OTY6XHRcdFx0ICogYmVoYXZpb3VyIGJlZm9yZSBOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUgd2FzXG45NTk3Olx0XHRcdCAqIGludHJvZHVjZWQuXG45NTk4Olx0XHRcdCAqIEluIG9yZGVyIHRvIG5vdCBib3RoZXIgZHJpdmVycyB3aXRoIHRoaXMgcXVpcmsgaW4gdGhlIEFQSVxuOTU5OTpcdFx0XHQgKiBzZXQgdGhlIGZsYWdzIGluIGJvdGggdGhlIG1hc2sgYW5kIHNldCBmb3IgbmV3IHN0YXRpb25zIGluXG45NjAwOlx0XHRcdCAqIHRoaXMgY2FzZS5cbjk2MDE6XHRcdFx0ICovXG45NjAyOlx0XHRcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgYXV0aF9hc3NvYykpIHtcbjk2MDM6XHRcdFx0XHRwYXJhbXMuc3RhX2ZsYWdzX21hc2sgfD0gYXV0aF9hc3NvYztcbjk2MDQ6XHRcdFx0XHRwYXJhbXMuc3RhX2ZsYWdzX3NldCB8PSBhdXRoX2Fzc29jO1xuOTYwNTpcdFx0XHR9XG45NjA2Olx0XG45NjA3Olx0XHRcdC8qIG11c3QgYmUgbGFzdCBpbiBoZXJlIGZvciBlcnJvciBoYW5kbGluZyAqL1xuOTYwODpcdFx0XHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XG45NjA5Olx0XHRcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxuOTYxMDpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcbjk2MTE6XHRcdFx0YnJlYWs7XG45NjEyOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG45NjEzOlx0XHRcdC8qIGlnbm9yZSB1QVBTRCBkYXRhICovXG45NjE0Olx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcbjk2MTU6XHRcbjk2MTY6XHRcdFx0LyogYXNzb2NpYXRlZCBpcyBkaXNhbGxvd2VkICovXG45NjE3Olx0XHRcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpKVxuOTYxODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTYxOTpcdFx0XHQvKiBURExTIHBlZXJzIGNhbm5vdCBiZSBhZGRlZCAqL1xuOTYyMDpcdFx0XHRpZiAoKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIpKSB8fFxuOTYyMTpcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxuOTYyMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTYyMzpcdFx0XHRicmVhaztcbjk2MjQ6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbjk2MjU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcbjk2MjY6XHRcdFx0LyogaWdub3JlIHVBUFNEIGRhdGEgKi9cbjk2Mjc6XHRcdFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayBcdTAwMjY9IH5TVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEO1xuOTYyODpcdFxuOTYyOTpcdFx0XHQvKiB0aGVzZSBhcmUgZGlzYWxsb3dlZCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogVkxBTiBJbnRlcmZhY2UgQ2hlY2sgaW4gbmw4MDIxMSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBnZXRfdmxhbmAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gdmVyaWZ5IGlmIGEgVkxBTiBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBUCBpbnRlcmZhY2UuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY29tcGFyaW5nIHRoZSBWTEFOJiMzOTtzIGRldmljZSBhZGRyZXNzIChgdi0mZ3Q7ZGV2X2FkZHJgKSB3aXRoIHRoZSBBUCYjMzk7cyBkZXZpY2UgYWRkcmVzcyAoYGRldi0mZ3Q7ZGV2X2FkZHJgKSwgYW5kIGlmIHRoZXkgZG9uJiMzOTt0IG1hdGNoLCBpdCByZXR1cm5zIGFuIGVycm9yIChgLUVJTlZBTGApLiBJdCBzZWVtcyB0aGUgYGRldmAgdmFyaWFibGUgaXMgcGFzc2VkIGludG8gdGhlIGBnZXRfdmxhbigpYCBjYWxsLgoKVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGUgY29kZSB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBjb25zdWx0IHRoZSBndWlkZWxpbmVzLgoKUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGU6IGNhbiBpdCBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBubDgwMjExYCwgd2hpY2ggaXMgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBJIGtub3cgU3l6a2FsbGVyIGdlbmVyYXRlcyBuZXRsaW5rIG1lc3NhZ2VzIGV4dGVuc2l2ZWx5IGZvciBubDgwMjExLiBTcGVjaWZpY2FsbHkgdXNpbmcgYHN5el84MDIxMV9qb2luX2lic3NgLCB3aGljaCBpcyBhIG5ldGxpbmsgc29ja2V0IGNvbW1hbmQuIEFsc28sIGBtYWM4MDIxMV9od3NpbWAgY3JlYXRlcyB3aXBoeS9uZXRkZXYgaW5zdGFuY2VzIGZvciB3aXJlbGVzcy4gVGhpcyBjb25maXJtcyB0aGF0IG5sODAyMTEgaXMgcGVyZmVjdGx5IHJlYWNoYWJsZSBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgoKTm93LCBwb3NpdGl2ZSBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nOiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgdGhpcyBkZWZpbml0ZWx5IGRvZXMuIEl04oCZcyBjb3JlIG5ldHdvcmtpbmcuIEl0IGFsc28gY291bnRzIGFzIGEgZGVmZW5zaXZlIGNoZWNrICh0aGUgVkxBTiBpbnRlcmZhY2UgY2hlY2sgaXRzZWxmKS4gQWxzbywgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gdHJpZ2dlciBpdCB2aWEgYSBuZXRsaW5rIHNvY2tldCBjb21tYW5kLgoKTmVnYXRpdmUgY3JpdGVyaWE6IFRoaXMgaXNuJiMzOTt0IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBvciBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gVGhpcyBpcyBjbGVhcmx5IGFjY2Vzc2libGUgdmlhIHRoZSBuZXRsaW5rIHN1YnN5c3RlbS4gU28gdGhhdCYjMzk7cyBnb29kLgoKU28sICpJKiBjb25jbHVkZTogVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgZm9yIGBubDgwMjExLmNgIHRvIGVuc3VyZSBpdCYjMzk7cyBjb21waWxlZCwgYW5kIHRoZW4gSSYjMzk7bSBzZXQhIFRpbWUgdG8gc2VhcmNoIHRob3NlIE1ha2VmaWxlcyBhbmQgS2NvbmZpZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzA3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxubmV0L3dpcmVsZXNzL0tjb25maWc6Mzk6XHRib29sIFwmIzM0O25sODAyMTEgdGVzdG1vZGUgY29tbWFuZFwmIzM0O1xubmV0L3dpcmVsZXNzL0tjb25maWctNDAtXHRoZWxwXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo0MTpcdCAgVGhlIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZCBoZWxwcyBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2Vcbm5ldC93aXJlbGVzcy9LY29uZmlnLTQyLVx0ICBmYWN0b3J5IGNhbGlicmF0aW9uIG9yIHZhbGlkYXRpb24gdG9vbHMgZm9yIHdpcmVsZXNzIGNoaXBzLlxuLS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19XRVhUX1BSSVYpICYjNDM7PSB3ZXh0LXByaXYub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTgtXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6OTpjZmc4MDIxMS15ICYjNDM7PSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTAtY2ZnODAyMTEteSAmIzQzOz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cbi0tXG5uZXQvd2lyZWxlc3MvYXAuYy04LSNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxMS5oXHUwMDNlXG5uZXQvd2lyZWxlc3MvYXAuYzo5OiNpbmNsdWRlIFwmIzM0O25sODAyMTEuaFwmIzM0O1xubmV0L3dpcmVsZXNzL2FwLmMtMTAtI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL2FwLmM9MTQ9c3RhdGljIGludCBfX19jZmc4MDIxMV9zdG9wX2FwKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvYXAuYy00MS1cdFx0aWYgKG5vdGlmeSlcbm5ldC93aXJlbGVzcy9hcC5jOjQyOlx0XHRcdG5sODAyMTFfc2VuZF9hcF9zdG9wcGVkKHdkZXYsIGxpbmtfaWQpO1xubmV0L3dpcmVsZXNzL2FwLmMtNDMtXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0yMz12b2lkIGNmZzgwMjExX2NoYW5kZWZfY3JlYXRlKHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjQtXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjI1Olx0XHRcdCAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGUpXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTI2LXtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE3OD1zdGF0aWMgYm9vbCBjZmc4MDIxMV9lZG1nX2NoYW5kZWZfdmFsaWQoY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmMtMjYyLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoyNjM6aW50IG5sODAyMTFfY2hhbl93aWR0aF90b19taHooZW51bSBubDgwMjExX2NoYW5fd2lkdGggY2hhbl93aWR0aClcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjY0LXtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMwNS19XG5uZXQvd2lyZWxlc3MvY2hhbi5jOjMwNjpFWFBPUlRfU1lNQk9MKG5sODAyMTFfY2hhbl93aWR0aF90b19taHopO1xubmV0L3dpcmVsZXNzL2NoYW4uYy0zMDctXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTMwOD1zdGF0aWMgYm9vbCBjZmc4MDIxMV92YWxpZF9jZW50ZXJfZnJlcSh1MzIgY2VudGVyLFxubmV0L3dpcmVsZXNzL2NoYW4uYzozMDk6XHRcdFx0XHQgICAgICAgZW51bSBubDgwMjExX2NoYW5fd2lkdGggd2lkdGgpXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMxMC17XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMTctXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjMxODpcdGJ3ID0gbmw4MDIxMV9jaGFuX3dpZHRoX3RvX21oeih3aWR0aCk7XG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMxOS1cdGlmIChidyBcdTAwM2MgMClcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTQ4OT1pbnQgY2ZnODAyMTFfY2hhbmRlZl9wcmltYXJ5KGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqYyxcbm5ldC93aXJlbGVzcy9jaGFuLmM6NDkwOlx0XHRcdCAgICAgZW51bSBubDgwMjExX2NoYW5fd2lkdGggcHJpbWFyeV9jaGFuX3dpZHRoLFxubmV0L3dpcmVsZXNzL2NoYW4uYy00OTEtXHRcdFx0ICAgICB1MTYgKnB1bmN0dXJlZClcbm5ldC93aXJlbGVzcy9jaGFuLmMtNDkyLXtcbm5ldC93aXJlbGVzcy9jaGFuLmM6NDkzOlx0aW50IHByaV93aWR0aCA9IG5sODAyMTFfY2hhbl93aWR0aF90b19taHoocHJpbWFyeV9jaGFuX3dpZHRoKTtcbm5ldC93aXJlbGVzcy9jaGFuLmMtNDk0LVx0aW50IHdpZHRoID0gY2ZnODAyMTFfY2hhbmRlZl9nZXRfd2lkdGgoYyk7XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz03NDM9Y2hlY2tfY2hhbmRlZl9wcmltYXJ5X2NvbXBhdChjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMxLFxubmV0L3dpcmVsZXNzL2NoYW4uYy03NDQtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMyLFxubmV0L3dpcmVsZXNzL2NoYW4uYzo3NDU6XHRcdFx0ICAgICBlbnVtIG5sODAyMTFfY2hhbl93aWR0aCBwcmltYXJ5X2NoYW5fd2lkdGgpXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc0Ni17XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz04Njc9dm9pZCBjZmc4MDIxMV9zZXRfZGZzX3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTg2OC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL2NoYW4uYzo4Njk6XHRcdFx0ICAgIGVudW0gbmw4MDIxMV9kZnNfc3RhdGUgZGZzX3N0YXRlKVxubmV0L3dpcmVsZXNzL2NoYW4uYy04NzAte1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmM9OTE5PWNmZzgwMjExX2Rmc19wZXJtaXNzaXZlX2NoZWNrX3dkZXYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NoYW4uYzo5MjA6XHRcdFx0XHQgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSxcbm5ldC93aXJlbGVzcy9jaGFuLmMtOTIxLVx0XHRcdFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTk2MD1zdGF0aWMgYm9vbCBjZmc4MDIxMV9kZnNfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjk2MTpcdFx0XHRcdFx0IGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxubmV0L3dpcmVsZXNzL2NoYW4uYy05NjItXHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz05OTE9c3RhdGljIGludCBjZmc4MDIxMV9nZXRfY2hhbnNfZGZzX3JlcXVpcmVkKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTk5Mi1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL2NoYW4uYzo5OTM6XHRcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKVxubmV0L3dpcmVsZXNzL2NoYW4uYy05OTQte1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmM9MTAxNT1pbnQgY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTAxNi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL2NoYW4uYzoxMDE3Olx0XHRcdFx0ICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSlcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTAxOC17XG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNjIyPUVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2hhbmRlZl91c2FibGUpO1xubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjIzLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNjI0OnN0YXRpYyBib29sIGNmZzgwMjExX2lyX3Blcm1pc3NpdmVfY2hlY2tfd2RldihlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTYyNS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTU9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE2OTY6XHRcdFx0XHRcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjk3LVx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNzM5PXN0YXRpYyBib29sIF9jZmc4MDIxMV9yZWdfY2FuX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzQwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE3NDE6XHRcdFx0XHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzQyLVx0XHRcdFx0ICAgICB1MzIgcHJvaGliaXRlZF9mbGFncyxcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxODojaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNi0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzojaW5jbHVkZSBcJiMzNDtubDgwMjExLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjk9aW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUwLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTE6XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTItXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzE9c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXHRcdFx0XHRjb250aW51ZTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTk1Olx0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5OC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTk5Olx0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDAtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDgtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIwOTpcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjEwLVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjEzLVx0XHRcdFx0Y29udGludWU7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxNDpcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTUtXHRcdFx0XHRcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz04Nzg9aW50IHdpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy04ODEtXHRpbnQgcmVzO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo4ODI6XHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xubmV0L3dpcmVsZXNzL2NvcmUuYy04ODMtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEyMTAtXHRjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHJkZXYpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoxMjExOlx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIxMi1cdHdpcGh5X3VubG9jayhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEyMjQtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjEyMjU6XHRcdG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KFx1MDAyNnJlcXVlc3QpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xMjI2LVx0fVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTMxNT12b2lkIHdpcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEzMzAtXHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoxMzMxOlx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMzMi1cdHJkZXYtXHUwMDNld2lwaHkucmVnaXN0ZXJlZCA9IGZhbHNlO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQzND1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQzLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQ0Olx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDUtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDc5LVx0d2lwaHlfd29ya19jYW5jZWwod2Rldi1cdTAwM2V3aXBoeSwgXHUwMDI2d2Rldi1cdTAwM2VjcW1fcnNzaV93b3JrKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ4MDpcdC8qIGRlbGV0ZWQgZnJvbSB0aGUgbGlzdCwgc28gY2FuJiMzOTt0IGJlIGZvdW5kIGZyb20gbmw4MDIxMSBhbnkgbW9yZSAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDgxLVx0Y3FtX2NvbmZpZyA9IHJjdV9hY2Nlc3NfcG9pbnRlcih3ZGV2LVx1MDAzZWNxbV9jb25maWcpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTUxOT12b2lkIGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTIwOlx0XHRcdCAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgaW50IG51bSlcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyMS17XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjc0PXZvaWQgY2ZnODAyMTFfcmVnaXN0ZXJfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjk3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjk4Olx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTktfVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MjA2Mz1zdGF0aWMgaW50IF9faW5pdCBjZmc4MDIxMV9pbml0KHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDc4LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMDc5Olx0ZXJyID0gbmw4MDIxMV9pbml0KCk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwODAtXHRpZiAoZXJyKVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMDgxOlx0XHRnb3RvIG91dF9mYWlsX25sODAyMTE7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwODItXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTAwLVx0ZGVidWdmc19yZW1vdmUoaWVlZTgwMjExX2RlYnVnZnNfZGlyKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjEwMTpcdG5sODAyMTFfZXhpdCgpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTAyOm91dF9mYWlsX25sODAyMTE6XG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMDMtXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MjExMz1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZnODAyMTFfZXhpdCh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjExNS1cdGRlYnVnZnNfcmVtb3ZlKGllZWU4MDIxMV9kZWJ1Z2ZzX2Rpcik7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxMTY6XHRubDgwMjExX2V4aXQoKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjExNy1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmNmZzgwMjExX25ldGRldl9ub3RpZmllcik7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD0zMTc9c3RydWN0IGNmZzgwMjExX2NxbV9jb25maWcge1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtMzIwLVx0czMyIGxhc3RfcnNzaV9ldmVudF92YWx1ZTtcbm5ldC93aXJlbGVzcy9jb3JlLmg6MzIxOlx0ZW51bSBubDgwMjExX2NxbV9yc3NpX3RocmVzaG9sZF9ldmVudCBsYXN0X3Jzc2lfZXZlbnRfdHlwZTtcbm5ldC93aXJlbGVzcy9jb3JlLmgtMzIyLVx0Ym9vbCB1c2VfcmFuZ2VfYXBpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NDc3PWludCBjZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaDo0Nzg6XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIG50eXBlLFxubmV0L3dpcmVsZXNzL2NvcmUuaC00NzktXHRcdFx0ICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTQ5NT12b2lkIGNmZzgwMjExX3NldF9kZnNfc3RhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDk2LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXG5uZXQvd2lyZWxlc3MvY29yZS5oOjQ5NzpcdFx0XHQgICAgZW51bSBubDgwMjExX2Rmc19zdGF0ZSBkZnNfc3RhdGUpO1xubmV0L3dpcmVsZXNzL2NvcmUuaC00OTgtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD01NTM9aW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NTQ6XHRcdFx0XHQgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsIHUzMiBiZWFjb25faW50KTtcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTU1LVxubmV0L3dpcmVsZXNzL2NvcmUuaD01NTY9dm9pZCBjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTU3Olx0XHRcdCAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgaW50IG51bSk7XG5uZXQvd2lyZWxlc3MvY29yZS5oLTU1OC1cbi0tXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5jPTg0PXN0YXRpYyBzc2l6ZV90IGh0NDBhbGxvd19tYXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5jLTkwLVx0dW5zaWduZWQgaW50IG9mZnNldCA9IDAsIGJ1Zl9zaXplID0gUEFHRV9TSVpFLCBpO1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuYzo5MTpcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XG5uZXQvd2lyZWxlc3MvZGVidWdmcy5jLTkyLVx0c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNC0jaW5jbHVkZSBcJiMzNDt3ZXh0LWNvbXBhdC5oXCYjMzQ7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE1OiNpbmNsdWRlIFwmIzM0O25sODAyMTEuaFwmIzM0O1xubmV0L3dpcmVsZXNzL2lic3MuYy0xNi0jaW5jbHVkZSBcJiMzNDtyZGV2LW9wcy5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xOT12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtNDItXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjQzOlx0bmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LVx1MDAzZXdpcGh5KSwgZGV2LCBic3MtXHUwMDNlYnNzaWQsXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTQ0LVx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz05MT1pbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMTEzLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTE0Olx0XHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xubmV0L3dpcmVsZXNzL2lic3MuYy0xMTUtXHRcdHUzMiBmbGFnO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MjE5PWludCBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0yMjItXHRzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNrID0gTlVMTDtcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjIzOlx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjI0LVx0aW50IGksIGVycjtcbi0tXG5uZXQvd2lyZWxlc3MvbWVzaC5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9tZXNoLmM6OTojaW5jbHVkZSBcJiMzNDtubDgwMjExLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9tZXNoLmMtMTAtI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL21lc2guYz0xMDI9aW50IF9fY2ZnODAyMTFfam9pbl9tZXNoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWVzaC5jLTEzOS1cdFx0LyogaWYgd2UgZG9uJiMzOTt0IGhhdmUgdGhhdCBlaXRoZXIsIHVzZSB0aGUgZmlyc3QgdXNhYmxlIGNoYW5uZWwgKi9cbm5ldC93aXJlbGVzcy9tZXNoLmM6MTQwOlx0XHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xubmV0L3dpcmVsZXNzL21lc2guYy0xNDEtXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxubmV0L3dpcmVsZXNzL21sbWUuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0xOS0jaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjA6I2luY2x1ZGUgXCYjMzQ7bmw4MDIxMS5oXCYjMzQ7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIxLSNpbmNsdWRlIFwmIzM0O3JkZXYtb3BzLmhcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI0PXZvaWQgY2ZnODAyMTFfcnhfYXNzb2NfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtOTYtXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjk3Olx0bmw4MDIxMV9zZW5kX3J4X2Fzc29jKHJkZXYsIGRldiwgZGF0YSk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTk4LVx0LyogdXBkYXRlIGN1cnJlbnRfYnNzIGV0Yy4sIGNvbnN1bWVzIHRoZSBic3MgcmVmZXJlbmNlICovXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU9c3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc19hdXRoKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTktXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMDpcdG5sODAyMTFfc2VuZF9yeF9hdXRoKHJkZXYsIHdkZXYtXHUwMDNlbmV0ZGV2LCBidWYsIGxlbiwgR0ZQX0tFUk5FTCk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMS1cdGNmZzgwMjExX3NtZV9yeF9hdXRoKHdkZXYsIGJ1ZiwgbGVuKTtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEyND1zdGF0aWMgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX2RlYXV0aChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTMzLVxubmV0L3dpcmVsZXNzL21sbWUuYzoxMzQ6XHRubDgwMjExX3NlbmRfZGVhdXRoKHJkZXYsIHdkZXYtXHUwMDNlbmV0ZGV2LCBidWYsIGxlbiwgcmVjb25uZWN0LCBHRlBfS0VSTkVMKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM1LVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MTQzPXN0YXRpYyB2b2lkIGNmZzgwMjExX3Byb2Nlc3NfZGlzYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE1Mi1cbm5ldC93aXJlbGVzcy9tbG1lLmM6MTUzOlx0bmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHJkZXYsIHdkZXYtXHUwMDNlbmV0ZGV2LCBidWYsIGxlbiwgcmVjb25uZWN0LFxubmV0L3dpcmVsZXNzL21sbWUuYy0xNTQtXHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0yMDE9dm9pZCBjZmc4MDIxMV9hdXRoX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yMDgtXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjIwOTpcdG5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQocmRldiwgZGV2LCBhZGRyLCBHRlBfS0VSTkVMKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjEwLVx0Y2ZnODAyMTFfc21lX2F1dGhfdGltZW91dCh3ZGV2KTtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTIxND12b2lkIGNmZzgwMjExX2Fzc29jX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIyNS1cdGlmIChkYXRhLVx1MDAzZXRpbWVvdXQpIHtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjI2Olx0XHRubDgwMjExX3NlbmRfYXNzb2NfdGltZW91dChyZGV2LCBkZXYsIGFkZHIsIEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL21sbWUuYy0yMjctXHRcdGNmZzgwMjExX3NtZV9hc3NvY190aW1lb3V0KHdkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbm5ldC93aXJlbGVzcy9tbG1lLmM6Mjc4Olx0XHRcdFx0ICBlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUsIGludCBrZXlfaWQsXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI3OS1cdFx0XHRcdCAgY29uc3QgdTggKnRzYywgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMjk5LVx0dHJhY2VfY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYyk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jOjMwMDpcdG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShyZGV2LCBkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYywgZ2ZwKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMzAxLX1cbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwMTA9Ym9vbCBjZmc4MDIxMV9yeF9tZ210X2V4dChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTA1MS1cdFx0LyogSW5kaWNhdGUgdGhlIHJlY2VpdmVkIEFjdGlvbiBmcmFtZSB0byB1c2VyIHNwYWNlICovXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEwNTI6XHRcdGlmIChubDgwMjExX3NlbmRfbWdtdChyZGV2LCB3ZGV2LCByZWctXHUwMDNlbmxwb3J0aWQsIGluZm8sXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEwNTMtXHRcdFx0XHQgICAgICBHRlBfQVRPTUlDKSlcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwNzM9dm9pZCBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTA4My1cdHVuc2lnbmVkIGxvbmcgdGltZV9kZnNfdXBkYXRlO1xubmV0L3dpcmVsZXNzL21sbWUuYzoxMDg0Olx0ZW51bSBubDgwMjExX3JhZGFyX2V2ZW50IHJhZGFyX2V2ZW50O1xubmV0L3dpcmVsZXNzL21sbWUuYy0xMDg1LVx0aW50IGJhbmRpZCwgaTtcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExMjgtXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjExMjk6XHRcdFx0XHRubDgwMjExX3JhZGFyX25vdGlmeShyZGV2LCBcdTAwMjZjaGFuZGVmLFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTMwLVx0XHRcdFx0XHRcdCAgICAgcmFkYXJfZXZlbnQsIE5VTEwsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU1PXZvaWQgX19jZmc4MDIxMV9yYWRhcl9ldmVudChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE3NS1cbm5ldC93aXJlbGVzcy9tbG1lLmM6MTE3NjpcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIGNoYW5kZWYsIE5MODAyMTFfUkFEQVJfREVURUNURUQsIE5VTEwsIGdmcCk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExNzctXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTgzPXZvaWQgY2ZnODAyMTFfY2FjX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExODQtXHRcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMTg1Olx0XHRcdGVudW0gbmw4MDIxMV9yYWRhcl9ldmVudCBldmVudCwgZ2ZwX3QgZ2ZwLFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTg2LVx0XHRcdHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTIyNi1cbm5ldC93aXJlbGVzcy9tbG1lLmM6MTIyNzpcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIGNoYW5kZWYsIGV2ZW50LCBuZXRkZXYsIGdmcCk7XG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMjgtfVxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MTIzMj1fX2NmZzgwMjExX2JhY2tncm91bmRfY2FjX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMzQtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMzU6XHRcdFx0XHRlbnVtIG5sODAyMTFfcmFkYXJfZXZlbnQgZXZlbnQpXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMzYte1xuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmMtMTI2NS1cdG5ldGRldiA9IHdkZXYgPyB3ZGV2LVx1MDAzZW5ldGRldiA6IE5VTEw7XG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyNjY6XHRubDgwMjExX3JhZGFyX25vdGlmeShyZGV2LCBjaGFuZGVmLCBldmVudCwgbmV0ZGV2LCBHRlBfS0VSTkVMKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTI2Ny19XG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYz0xMzUzPXZvaWQgY2ZnODAyMTFfc3RvcF9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEzNjgtXHRcdGNmZzgwMjExX3NldF9jYWNfc3RhdGUod2lwaHksIFx1MDAyNmNoYW5kZWYsIGZhbHNlKTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTM2OTpcdFx0bmw4MDIxMV9yYWRhcl9ub3RpZnkocmRldiwgXHUwMDI2Y2hhbmRlZiwgTkw4MDIxMV9SQURBUl9DQUNfQUJPUlRFRCxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM3MC1cdFx0XHRcdCAgICAgd2Rldi1cdTAwM2VuZXRkZXYsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MTQxOT12b2lkIGNmZzgwMjExX21sb19yZWNvbmZfYWRkX2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE0NzQtXHR3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIHw9IGRhdGEtXHUwMDNlYWRkZWRfbGlua3M7XG5uZXQvd2lyZWxlc3MvbWxtZS5jOjE0NzU6XHRubDgwMjExX21sb19yZWNvbmZfYWRkX2RvbmUoZGV2LCBkYXRhKTtcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTQ3Ni19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9pZWVlODAyMTEuaFx1MDAzZVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODojaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjExLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwLSNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMTojaW5jbHVkZSBcJiMzNDtubDgwMjExLmhcJiMzNDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzItI2luY2x1ZGUgXCYjMzQ7cmVnLmhcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTM0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozNTpzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzYtXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDAtLyogdGhlIG5ldGxpbmsgZmFtaWx5ICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQxOnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmw4MDIxMV9mYW07XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00My0vKiBtdWx0aWNhc3QgZ3JvdXBzICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ0OmVudW0gbmw4MDIxMV9tdWx0aWNhc3RfZ3JvdXBzIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDUtXHROTDgwMjExX01DR1JQX0NPTkZJRyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NDpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWNncnBzW10gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1LVx0W05MODAyMTFfTUNHUlBfQ09ORklHXSA9IHsgLm5hbWUgPSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9DT05GSUcgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQzOD1zdGF0aWMgaW50IHZhbGlkYXRlX3Vocl9vcGVyYXRpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ0OS0vKiBwb2xpY3kgZm9yIHRoZSBhdHRyaWJ1dGVzICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ1MDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl07XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ1MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NTM6bmw4MDIxMV9mdG1fcmVzcG9uZGVyX3BvbGljeVtOTDgwMjExX0ZUTV9SRVNQX0FUVFJfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy00NTQtXHRbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0VOQUJMRURdID0geyAudHlwZSA9IE5MQV9GTEFHLCB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NjI6bmw4MDIxMV9wbXNyX2Z0bV9yZXFfYXR0cl9wb2xpY3lbTkw4MDIxMV9QTVNSX0ZUTV9SRVFfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2My1cdFtOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0FTQVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz00OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ5NjpubDgwMjExX3Btc3JfcmVxX2RhdGFfcG9saWN5W05MODAyMTFfUE1TUl9UWVBFX01BWCAmIzQzOyAxXSA9IHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDk3LVx0W05MODAyMTFfUE1TUl9UWVBFX0ZUTV0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0OTg6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9mdG1fcmVxX2F0dHJfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDk5LX07XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUwMjpubDgwMjExX3Btc3JfcmVxX2F0dHJfcG9saWN5W05MODAyMTFfUE1TUl9SRVFfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUwMy1cdFtOTDgwMjExX1BNU1JfUkVRX0FUVFJfREFUQV0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MDQ6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9yZXFfZGF0YV9wb2xpY3kpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MDUtXHRbTkw4MDIxMV9QTVNSX1JFUV9BVFRSX0dFVF9BUF9UU0ZdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUwOTpubDgwMjExX3Btc3JfcGVlcl9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEwLVx0W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfQUREUl0gPSBOTEFfUE9MSUNZX0VUSF9BRERSLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MTE6XHRbTkw4MDIxMV9QTVNSX1BFRVJfQVRUUl9DSEFOXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEyLVx0W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfUkVRXSA9XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUxMzpcdFx0TkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9wbXNyX3JlcV9hdHRyX3BvbGljeSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUxNC1cdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX1JFU1BdID0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTUxOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTIwOm5sODAyMTFfcG1zcl9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyMS1cdFtOTDgwMjExX1BNU1JfQVRUUl9NQVhfUEVFUlNdID0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyNS1cdFtOTDgwMjExX1BNU1JfQVRUUl9QRUVSU10gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MjY6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEX0FSUkFZKG5sODAyMTFfcG1zcl9wZWVyX2F0dHJfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTI3LX07XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDU9aGVfYnNzX2NvbG9yX3BvbGljeVtOTDgwMjExX0hFX0JTU19DT0xPUl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3R4YXR0cl9wb2xpY3lbTkw4MDIxMV9UWFJBVEVfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTItXHRbTkw4MDIxMV9UWFJBVEVfTEVHQUNZXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTU1LVx0XHRcdFx0LmxlbiA9IE5MODAyMTFfTUFYX1NVUFBfSFRfUkFURVMgfSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTU2Olx0W05MODAyMTFfVFhSQVRFX1ZIVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV90eHJhdGVfdmh0KSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1Ny1cdFtOTDgwMjExX1RYUkFURV9HSV0gPSB7IC50eXBlID0gTkxBX1U4IH0sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1ODpcdFtOTDgwMjExX1RYUkFURV9IRV0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG5sODAyMTFfdHhyYXRlX2hlKSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1OS1cdFtOTDgwMjExX1RYUkFURV9IRV9HSV0gPSAgTkxBX1BPTElDWV9SQU5HRShOTEFfVTgsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NjQtXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9SQVRFX0lORk9fSEVfNFhMVEYpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjU6XHRbTkw4MDIxMV9UWFJBVEVfRUhUXSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV90eHJhdGVfZWh0KSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2Ni1cdFtOTDgwMjExX1RYUkFURV9FSFRfR0ldID0gIE5MQV9QT0xJQ1lfUkFOR0UoTkxBX1U4LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NzY6bmw4MDIxMV90aWRfY29uZmlnX2F0dHJfcG9saWN5W05MODAyMTFfVElEX0NPTkZJR19BVFRSX01BWCAmIzQzOyAxXSA9IHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTc3LVx0W05MODAyMTFfVElEX0NPTkZJR19BVFRSX1ZJRl9TVVBQXSA9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTMtXHRbTkw4MDIxMV9USURfQ09ORklHX0FUVFJfVFhfUkFURV0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1OTQ6XHRcdFx0TkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV90eGF0dHJfcG9saWN5KSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTk1LX07XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU5ODpubDgwMjExX2ZpbHNfZGlzY292ZXJ5X3BvbGljeVtOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTktXHRbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX0lOVF9NSU5dID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMTAwMDApLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2MDg6bmw4MDIxMV91bnNvbF9iY2FzdF9wcm9iZV9yZXNwX3BvbGljeVtOTDgwMjExX1VOU09MX0JDQVNUX1BST0JFX1JFU1BfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTYwOS1cdFtOTDgwMjExX1VOU09MX0JDQVNUX1BST0JFX1JFU1BfQVRUUl9JTlRdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMjApLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Mjc6bmw4MDIxMV9tYnNzaWRfY29uZmlnX3BvbGljeVtOTDgwMjExX01CU1NJRF9DT05GSUdfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTYyOC1cdFtOTDgwMjExX01CU1NJRF9DT05GSUdfQVRUUl9NQVhfSU5URVJGQUNFU10gPSBOTEFfUE9MSUNZX01JTihOTEFfVTgsIDIpLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Mzk6bmw4MDIxMV9zdGFfd21lX3BvbGljeVtOTDgwMjExX1NUQV9XTUVfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NDAtXHRbTkw4MDIxMV9TVEFfV01FX1VBUFNEX1FVRVVFU10gPSB7IC50eXBlID0gTkxBX1U4IH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY0NTpubDgwMjExX3MxZ19zaG9ydF9iZWFjb25bTkw4MDIxMV9TMUdfU0hPUlRfQkVBQ09OX0FUVFJfTUFYICYjNDM7IDFdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NDYtXHRbTkw4MDIxMV9TMUdfU0hPUlRfQkVBQ09OX0FUVFJfSEVBRF0gPVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2NTU6bmw4MDIxMV9uYW5fYmFuZF9jb25mX3BvbGljeVtOTDgwMjExX05BTl9CQU5EX0NPTkZfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY1Ni1cdFtOTDgwMjExX05BTl9CQU5EX0NPTkZfQkFORF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTgsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY2NjpubDgwMjExX25hbl9wZWVyX21hcF9wb2xpY3lbTkw4MDIxMV9OQU5fUEVFUl9NQVBfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY2Ny1cdFtOTDgwMjExX05BTl9QRUVSX01BUF9BVFRSX01BUF9JRF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDE1KSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjczOm5sODAyMTFfbmFuX2NvbmZfcG9saWN5W05MODAyMTFfTkFOX0NPTkZfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY3NC1cdFtOTDgwMjExX05BTl9DT05GX0NMVVNURVJfSURdID1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY4Mi1cdFtOTDgwMjExX05BTl9DT05GX0JBTkRfQ09ORklHU10gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2ODM6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEX0FSUkFZKG5sODAyMTFfbmFuX2JhbmRfY29uZl9wb2xpY3kpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02ODQtXHRbTkw4MDIxMV9OQU5fQ09ORl9TQ0FOX1BFUklPRF0gPSB7IC50eXBlID0gTkxBX1UxNiB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjkwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2OTE6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmw4MDIxMV9wdW5jdF9iaXRtYXBfcmFuZ2UgPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY5Mi1cdC5taW4gPSAwLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9Njk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHFfcmFuZ2UgPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02OTktXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjcwMDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTcwMS1cdFswXSA9IHsgLnN0cmljdF9zdGFydF90eXBlID0gTkw4MDIxMV9BVFRSX0hFX09CU1NfUEQgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgwNC1cdFtOTDgwMjExX0FUVFJfU1RBX0ZMQUdTMl0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4MDU6XHRcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOX1dBUk4oc2l6ZW9mKHN0cnVjdCBubDgwMjExX3N0YV9mbGFnX3VwZGF0ZSkpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04MDYtXHRbTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg2MS1cdFtOTDgwMjExX0FUVFJfUk9BTV9TVVBQT1JUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4NjI6XHRbTkw4MDIxMV9BVFRSX1NUQV9XTUVdID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9zdGFfd21lX3BvbGljeSksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg2My1cdFtOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9NQVRDSF0gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTU5LVx0W05MODAyMTFfQVRUUl9CQU5EU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5NjA6XHRbTkw4MDIxMV9BVFRSX05BTl9DT05GSUddID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9uYW5fY29uZl9wb2xpY3kpLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05NjEtXHRbTkw4MDIxMV9BVFRSX05BTl9GVU5DXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05NjgtXHRbTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fUlNTSV9BREpVU1RdID0ge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5Njk6XHRcdC5sZW4gPSBzaXplb2Yoc3RydWN0IG5sODAyMTFfYnNzX3NlbGVjdF9yc3NpX2FkanVzdClcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTcwLVx0fSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk5MS1cdFtOTDgwMjExX0FUVFJfRlRNX1JFU1BPTkRFUl0gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5OTI6XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfZnRtX3Jlc3BvbmRlcl9wb2xpY3kpLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGNmZzgwMjExIEtjb25maWcqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBjZmc4MDIxMWAgS2NvbmZpZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGljdGF0ZSB0aGUgY2FwYWJpbGl0aWVzIGFuZCBmZWF0dXJlcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBkYXRhYmFzZSBhbmQgZHJpdmVyIG1vZGVsLCBlbnN1cmluZyB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIG92ZXJseSByZXN0cmljdGl2ZSBkZWZhdWx0cy4gQXJlIHRoZXJlIGFueSBuZXcgYWRkaXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZmVhdHVyZSBzZXRzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgd2lyZWxlc3Mgc3RhbmRhcmRzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIGlzIGFibGUgdG8gY3VzdG9taXplIHRoZSB3aXJlbGVzcyBlbnZpcm9ubWVudCBpbiB0aGUga2VybmVsIHdpdGggdGhlc2UgY29uZmlndXJhdGlvbnMuIEVzc2VudGlhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBhbnl0aGluZyB0aGF0JiMzOTtzIGNoYW5nZWQgZnVuZGFtZW50YWxseSwgYnJva2VuLCBvciBuZWVkcyBvcHRpbWl6YXRpb24uIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgcG9zc2liaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgdGhhdCB0aGUgS2NvbmZpZyBpbXBvc2VzIG9uIHRoZSBjb3JlIG9mIG91ciB3aXJlbGVzcyBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1vZHVsZSBDb25zdHJ1Y3Rpb24gLSBDRkc4MDIxMSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgY2ZnODAyMTFgIGdldHMgYnVpbHQgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBDRkc4MDIxMWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIHRoYXQmIzM5O3Mgd2hhdCBjb250cm9scyB0aGUgY3JlYXRpb24gb2YgYG5ldC93aXJlbGVzcy9jZmc4MDIxMS5rb2AsIG9yLCBvZiBjb3Vyc2UsIGlmIGl0JiMzOTtzIGJha2VkIGludG8gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcywgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL01ha2VmaWxlYC4KClllcCwgdGhlcmUgaXQgaXMuIFRoZSBNYWtlZmlsZSBzaG93cyBgY2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub2AsIHByb3ZpbmcgdGhhdCBgbmw4MDIxMS5vYCBpcyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBvZiB0aGUgYGNmZzgwMjExYCBtb2R1bGUuIEFuZCwgYXMgZXhwZWN0ZWQsIGBvYmotJChDT05GSUdfQ0ZHODAyMTEpICYjNDM7PSBjZmc4MDIxMS5vYCBjb25maXJtcyB0aGF0IHRoZSB3aG9sZSBgY2ZnODAyMTEub2Agb2JqZWN0IGlzIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ0ZHODAyMTFgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gTm90aGluZyBzdXJwcmlzaW5nIGhlcmUsIGJ1dCBnb29kIHRvIGhhdmUgYSBzb2xpZCB2ZXJpZmljYXRpb24gb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbiAgIDM6XHRvYmoteSAmIzQzOz0gdGVzdHMvXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgJiM0Mzs9IHdleHQtY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgJiM0Mzs9IHdleHQtcHJpdi5vXG4gICA4Olx0XG4gICA5Olx0Y2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xuICAxMDpcdGNmZzgwMjExLXkgJiM0Mzs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXG4gIDExOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWljaGFlbC1taWMubyBwbXNyLm9cbiAgMTI6XHRjZmc4MDIxMS0kKENPTkZJR19PRikgJiM0Mzs9IG9mLm9cbiAgMTM6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG4gIDE0Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xuICAxNTpcdFxuICAxNjpcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG4gIDE3Olx0XG4gIDE4Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5vXG4gIDE5Olx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxuICAyMDpcdGNmZzgwMjExLXkgJiM0Mzs9IGV4dHJhLWNlcnRzLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdFxuICAyMzpcdCQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4gIDI0Olx0XHRAJChrZWNobykgXCYjMzQ7ICBHRU4gICAgICRAXCYjMzQ7XG4gIDI1Olx0XHQkKFEpKGVjaG8gJiMzOTsjaW5jbHVkZSBcJiMzNDtyZWcuaFwmIzM0OyYjMzk7OyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE0NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBpZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwaWVjZSBoZXJlIGlzIGBDRkc4MDIxMWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuIE5vdywgaWYgSSYjMzk7bSBzaW11bGF0aW5nIHdpcmVsZXNzIGRldmljZXMsIHdoaWNoIEkgb2Z0ZW4gZG8gZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LCB0aGUgcmVhbCBkcml2ZXIgbGlrZWx5IGJlY29tZXMgZWl0aGVyIGBNQUM4MDIxMV9IV1NJTWAgb3IgcG90ZW50aWFsbHkganVzdCB1c2luZyBgTkw4MDIxMWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhpcyBieSBkaWdnaW5nIGRlZXBlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFfSFdTSU1gLCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IEtjb25maWcgZmlsZToKCioqSW52ZXN0aWdhdGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCBJIG1pZ2h0IGZpbmQgd2l0aGluIGEgS2NvbmZpZyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LiBJdCYjMzk7cyBsaWtlbHkgZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXJzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkZlYXR1cmUgRmxhZ3M6KiogQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBmb3IgdmlydHVhbCB3aXJlbGVzcyBpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgYnVpbGQgdGltZT8gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBvcHRpb24uCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZXNlIHZpcnR1YWwgZHJpdmVycz8gV2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgdGhlc2UgZHJpdmVycyBiZWNvbWUgYXZhaWxhYmxlPyBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcyBvbiBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUgb3IgcGVyaGFwcyBzcGVjaWZpYyBoYXJkd2FyZS4KKiAgICoqRGVmYXVsdHM6KiogV2hhdCBhcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZXNlIG9wdGlvbnM/IEFyZSB0aGV5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBieSBkZWZhdWx0LCBvciBhcmUgdGhleSBtb2R1bGFyaXplZD8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIG91dCBvZiB0aGUgYm94LgoqICAgKipIZWxwIFRleHQ6KiogSSBob3BlIHRoZSBLY29uZmlnIGZpbGUgaGFzIHdlbGwtd3JpdHRlbiBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBvcHRpb25zIGFuZCBleHBsYWluIHRoZWlyIHB1cnBvc2UuIFRoZSBjbGFyaXR5IG9mIHRoZSBoZWxwIHRleHQgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZy4KKiAgICoqQXJjaGl0ZWN0dXJlLVNwZWNpZmljIE9wdGlvbnM6KiogSXMgdGhlcmUgYW55dGhpbmcgY29uZGl0aW9uYWw/IEFyZSBhbnkgb2YgdGhlIG9wdGlvbnMgdGllZCB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIGhhcmR3YXJlIHBsYXRmb3Jtcz8gSSB3aWxsIGFsc28gbG9vayBmb3IgaGludHMgb2YgaG93IGl0IGRpZmZlcnMuCiogICAqKkRvY3VtZW50YXRpb246KiogTXkgaG9wZSBpcyB0aGF0IGl0IHJlZmVyZW5jZXMgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3Igb3RoZXIgcmVsYXRlZCBmaWxlcy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIHRoaXMgaW4gdGhlIHdpZGVyIGNvbnRleHQgb2YgdGhpcyB3aXJlbGVzcyBjb25maWd1cmF0aW9uLgoKRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBjdXN0b21pemF0aW9uLCBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjIwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBnb2VzIGxpa2UgdGhpczogZmlyc3QsIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBnZXRfdmxhbmAsIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgYSBzdGF0aWMgZnVuY3Rpb24gcmVzaWRpbmcgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBHb29kLCBnb3QgdGhhdC4gTm93LCBhbG9uZ3NpZGUgdGhhdCwgSSBzZWUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYXJlIGFsc28gaW52b2x2ZWQuCgpNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgaW5kZWVkIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBubDgwMjExLmNgIGFzIEkgc3VzcGVjdC4gQWZ0ZXIgdGhpcywgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLiBTbyBJJiMzOTtsbCBpbW1lZGlhdGVseSBzaGlmdCB0byB0cmFjaW5nIHRoZWlyIHJlZmVyZW5jZXMgd2l0aGluIHRoZSBzYW1lIGZpbGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gVGhpcyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluc2lnaHRzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCB3aWxsIGJyZWFrIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX3NldF9zdGF0aW9ufG5sODAyMTFfbmV3X3N0YXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9OTA1MT1zdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX2NoYW5uZWxfaW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTA3Ni1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTA3NzpzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb25fdGRscyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MDc4LVx0XHRcdFx0ICAgIHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxMzE9c3RhdGljIGludCBubDgwMjExX3BhcnNlX3N0YV90eHBvd2VyX3NldHRpbmcoc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNjMtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjkxNjQ6c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNjUte1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMwMi1cdC8qIEluY2x1ZGUgcGFyYW1ldGVycyBmb3IgVERMUyBwZWVyICh3aWxsIGNoZWNrIGxhdGVyKSAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzAzOlx0ZXJyID0gbmw4MDIxMV9zZXRfc3RhdGlvbl90ZGxzKGluZm8sIFx1MDAyNnBhcmFtcyk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDQtXHRpZiAoZXJyKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMzNS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTMzNjpzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMzNy17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTczOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzNy1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTgzODpcdFx0LmRvaXQgPSBubDgwMjExX3NldF9zdGF0aW9uLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzOS1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5ODQ0LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5ODQ1Olx0XHQuZG9pdCA9IG5sODAyMTFfbmV3X3N0YXRpb24sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5ODQ2LVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM5OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBWaXNpYmlsaXR5IGluIGNmZzgwMjExKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGNmZzgwMjExYCBoYW5kbGVzIHN0YXRpb24gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBhbmQgYE5MODAyMTFfQ01EX05FV19TVEFUSU9OYC4gSSBzZWUgdGhhdCBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucywgdGhlIGBkb2l0YCBtZXRob2RzIHdpdGhpbiBgZ2VubF9vcHNgLCBmb3IgdGhlc2UgY29tbWFuZHMuIFRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuCgpBbmQgY3J1Y2lhbGx5LCBgZ2V0X3ZsYW5gIGlzIGRpcmVjdGx5IGNhbGxlZCBmcm9tICpib3RoKiBvZiB0aG9zZSBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHNvIGBnZXRfdmxhbmAgaXMgaW1tZWRpYXRlbHkgcmVsYXRlZC4KCk5vdywgdGhvc2UgYG5sODAyMTFfKmAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBgc3RhdGljYCBpbiBgbmw4MDIxMS5jYCwgSSBiZWxpZXZlLCB3aGljaCB1c3VhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIGxvY2FsIHRvIHRoYXQgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgYmVjYXVzZSB0aGV5IGFyZSBleHBvc2VkIHRocm91Z2ggdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UsIHRoZXkgKmFyZSogZW50cnkgcG9pbnRzLiBUaGVyZWZvcmUsIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFyZSBkZWZpbml0ZWx5IHByZXNlbnQgYW5kIHZpc2libGUgaW4gdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUsIHdoZXRoZXIgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHZtbGludXhgIG9yIGBjZmc4MDIxMS5rb2AuIEkmIzM5O20gY2VydGFpbiBvZiB0aGF0LgoKVGhlIGludGVyZXN0aW5nIHF1ZXN0aW9uIGlzIGBnZXRfdmxhbmAuIEl0ICptaWdodCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIHdoaWNoIHdvdWxkIG1lYW4gaXQgd291bGRuJiMzOTt0IGhhdmUgaXRzIG93biBzeW1ib2wuIFNvLCBpbmNsdWRpbmcgYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGEgdmVyeSBwcmVjaXNlIHdheSB0byBpZGVudGlmeSByZWxhdGVkIGNvZGUuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdG8gc2VlIGlmIGBnZXRfdmxhbmAgaXMgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBHb3R0YSBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcYmdldF92bGFuXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTg5NjY9RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTcxLSAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTcyOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3Olx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA4LVx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz05MzM2PXN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwNy1cdFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk2MDg6XHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwOS1cdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTQ0CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDk0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVkxBTiBJbnRlcmZhY2UgVmFsaWRhdGlvbiBpbiBubDgwMjExIFN0YXRpb24gTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW4gYGdldF92bGFuKClgLCBhbmQgaXQmIzM5O3MgYSBuZXcgY2hlY2s6IGVuc3VyaW5nIHRoZSBWTEFOIGludGVyZmFjZSBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgYnkgY29tcGFyaW5nIEV0aGVybmV0IGFkZHJlc3Nlcy4gUHJldmlvdXNseSwgaXQgb25seSBjaGVja2VkIGlmIGl0IHdhcyBhbiBBUC1yZWxhdGVkIGludGVyZmFjZSBhbmQgaWYgaXQgd2FzIHJ1bm5pbmcuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGFkZGl0aW9uIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IHdpdGhpbiB0aGUgYG5sODAyMTFgIGNvbnRleHQuCgpOb3csIGNvbnNpZGVyaW5nIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgYG5sODAyMTFgIG5ldGxpbmsgaGFuZGxlcnMgKGBubDgwMjExX3NldF9zdGF0aW9uYCwgYG5sODAyMTFfbmV3X3N0YXRpb25gKSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB0aGV5IHBhc3MgdGhlIGBkZXZgIHBhcmFtZXRlciB0byBgZ2V0X3ZsYW4oKWAuIEJlY2F1c2UgdGhlIHZhbGlkYXRpb24gbG9naWMgYW5kIGVycm9yIGhhbmRsaW5nIGhhdmUgY2hhbmdlZCBpbiBob3cgVkxBTiBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsuCgpUbyBwcmVwYXJlIGZvciBmdXp6aW5nLCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gQmFzZWQgb24gbXkgcXVpY2sgYW5hbHlzaXMsIGl0IGFwcGVhcnMgdGhhdCB0aGUgYENGRzgwMjExYCBjb25maWd1cmF0aW9uLCB3aGljaCBjb21waWxlcyBgbmw4MDIxMS5jYCwgaXMgZnVuZGFtZW50YWwuIEl0IGxvb2tzIGxpa2UgYE1BQzgwMjExX0hXU0lNYCB3aWxsIGFsc28gYmUgcmVxdWlyZWQgYmVjYXVzZSBpdCBlbmFibGVzIHZpcnR1YWwgV2ktRmkgZGV2aWNlcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyB2aXRhbCBmb3IgcmVhY2hpbmcgdGhlIHN0YXRpb24gb3BlcmF0aW9ucy4KCk15IGZvY3VzIHN5bWJvbHMgYXJlIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZDogYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIC0gdGhvc2UgYXJlIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMuCgpJbiBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUuCiogICAqKkZvY3VzIFN5bWJvbHM6KiogYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuCiogICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLgoqICAgKipSZWFzb25pbmc6KiogVGhpcyBwYXRjaCBtb2RpZmllcyBWTEFOIGludGVyZmFjZSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgd2lyZWxlc3MgbmV0bGluayBpbnRlcmZhY2UgKGBubDgwMjExYCkuIEl0IGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHVzZXIgc3BhY2UgbmV0bGluayBzb2NrZXRzLCBlc3BlY2lhbGx5IHdpdGggYG1hYzgwMjExX2h3c2ltYC4gRnV6emluZyB0aGlzIG5ldyB2YWxpZGF0aW9uIHN0ZXAgY291bGQgaGVscCBpZGVudGlmeSBwb3RlbnRpYWwgaW52YWxpZCBzdGF0ZSBoYW5kbGluZyBvciByZWdyZXNzaW9ucyBpbiBWTEFOIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF92bGFuJiMzNDssCiAgICAmIzM0O25sODAyMTFfc2V0X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgYSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSB0YXJnZXQgQVAvUDJQX0dPIGludGVyZmFjZSB3aGVuIHNldHRpbmcgb3IgYWRkaW5nIGEgc3RhdGlvbiBpbiBubDgwMjExLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHJlcXVlc3QgaGFuZGxpbmcgaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsL3NpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X3ZsYW4mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIHRhcmdldCBBUC9QMlBfR08gaW50ZXJmYWNlIHdoZW4gc2V0dGluZyBvciBhZGRpbmcgYSBzdGF0aW9uIGluIG5sODAyMTEuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgcmVxdWVzdCBoYW5kbGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwvc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVx1MDAzZWRldl9hZGRyYCBtYXRjaGVzIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHVzaW5nIGBldGhlcl9hZGRyX2VxdWFsKClgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgbGVuZ3RocyBvciBidWZmZXIgYm91bmRzLiBUaGUgYGRldl9hZGRyYCBmaWVsZHMgYmVpbmcgY29tcGFyZWQgYmVsb25nIHRvIGV4aXN0aW5nLCByZWdpc3RlcmVkIG5ldHdvcmsgZGV2aWNlcyAoYG5ldF9kZXZpY2VgKSB3aGljaCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgcG9pbnRlciBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIE5VTEwgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0ODBjZGU4M2IwODcxMTJkZGFhOGQ0MTgyNzEyM2YxNTUyZDJkNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwODo0NToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDg5OWI2Mzc0YzU1MDYuLjBmMzM4ODMxMmNjZDggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtODk2NiwxMCAmIzQzOzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksCiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTsKIAogLyoKLSAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nIGFuZCBvbiB0aGUgcmlnaHQgd2lwaHkuCiYjNDM7ICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeQomIzQzOyAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLgogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQomIzQzOwkJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dOwogCXN0cnVjdCBuZXRfZGV2aWNlICp2OwpAQCAtODk5OSw2ICYjNDM7OTAwMSwxMiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3I7CiAJfQogCiYjNDM7CS8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi8KJiM0MzsJaWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi0mZ3Q7ZGV2X2FkZHIsIGRldi0mZ3Q7ZGV2X2FkZHIpKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwogCXJldHVybiB2OwogIGVycm9yOgogCWRldl9wdXQodik7CkBAIC05Mjk2LDcgJiM0Mzs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7CiYjNDM7CXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTsKIAlpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSkKIAkJcmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pOwogCkBAIC05NTk3LDcgJiM0Mzs5NjA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAogCQkvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi8KLQkJcGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTsKJiM0MzsJCXBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTsKIAkJaWYgKElTX0VSUihwYXJhbXMudmxhbikpCiAJCQlyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7CiAJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdpcmVsZXNzIFN1YnN5c3RlbSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLCB3aGljaCwgYXMgd2Uga25vdywgaXMgdGhlIGNvcmUgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiBWTEFOIG1hbmFnZW1lbnQgaW4gdGhlIHdpcmVsZXNzIGNvbnRleHQuIFRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgZ2V0X3ZsYW4oKWAgZnVuY3Rpb24uIEkmIzM5O20gc2VlaW5nIGEgbmV3IHBhcmFtZXRlciwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgLCBiZWluZyBhZGRlZCB0byBgZ2V0X3ZsYW4oKWAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBhc3NvY2lhdGUgVkxBTnMgd2l0aCBzcGVjaWZpYyBuZXR3b3JrIGRldmljZXMsIGEgY29tbW9uIGFwcHJvYWNoIGZvciB3aXJlbGVzcyBBUCBjb25maWd1cmF0aW9ucy4KCkRpdmluZyBpbnRvIHRoZSBjb2RlIHNuaXBwZXQsIHRoYXQgYGlmYCBzdGF0ZW1lbnQgd2l0aGluIGBnZXRfdmxhbigpYCBpcyBrZXk6IGl0JiMzOTtzIHBlcmZvcm1pbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIFZMQU4gaW50ZXJmYWNlIChgdi0mZ3Q7ZGV2X2FkZHJgKSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKGBkZXYtJmd0O2Rldl9hZGRyYCkuIElmIGl0IGRvZXNuJiMzOTt0IG1hdGNoLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHN0ZXAuIEl0IG1ha2VzIHNlbnNlOyB3ZSB3b3VsZG4mIzM5O3Qgd2FudCB0byBhbGxvdyBWTEFOcyB0byBiZSBpbmNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIHdyb25nIHdpcmVsZXNzIGludGVyZmFjZS4gVGhpcyBpcyBhIGNvbW1vbiBzZWN1cml0eSBtZWFzdXJlIGZvciBzZXBhcmF0aW5nIHVzZXIgbmV0d29ya3Mgb24gdGhlIHNhbWUgcmFkaW8uCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIHRoZSBjYWxscyB0byBgZ2V0X3ZsYW4oKWAgd2l0aGluIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBUaGV5JiMzOTtyZSBub3cgcGFzc2luZyB0aGUgbmV0d29yayBkZXZpY2UgKGBkZXZgKSBhcyBhbiBhcmd1bWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aG9zZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiB0aGUgYnJvYWRlciB3aXJlbGVzcyBzdGFjay4gVGhleSBhcmUgcHJvYmFibHkgcmVsYXRlZCB0byBzZXR0aW5nIHVwIGFuZCBhZGRpbmcgd2lyZWxlc3Mgc3RhdGlvbnMuIEdldHRpbmcgdGhlIFZMQU4gaW5mb3JtYXRpb24gaXMgbW9zdCBsaWtlbHkgYWJvdXQgYXNzb2NpYXRpbmcgdGhlIHN0YXRpb24gd2l0aCBhIFZMQU4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBkZXZgIHBhcmFtZXRlciBnZXRzIHBvcHVsYXRlZCBpbiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4OTY1Olx0fVxuODk2NjpcdEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UpO1xuODk2NzpcdFxuODk2ODpcdC8qXG44OTY5Olx0ICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeVxuODk3MDpcdCAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxuODk3MTpcdCAqL1xuODk3MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbjg5NzM6XHRcdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbjg5NzQ6XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG44OTc1Olx0e1xuODk3NjpcdFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl07XG44OTc3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqdjtcbjg5Nzg6XHRcdGludCByZXQ7XG44OTc5Olx0XG44OTgwOlx0XHRpZiAoIXZsYW5hdHRyKVxuODk4MTpcdFx0XHRyZXR1cm4gTlVMTDtcbjg5ODI6XHRcbjg5ODM6XHRcdHYgPSBkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksIG5sYV9nZXRfdTMyKHZsYW5hdHRyKSk7XG44OTg0Olx0XHRpZiAoIXYpXG44OTg1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuODk4NjpcdFxuODk4NzpcdFx0aWYgKCF2LVx1MDAzZWllZWU4MDIxMV9wdHIgfHwgdi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZXdpcGh5ICE9IFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpIHtcbjg5ODg6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjg5ODk6XHRcdFx0Z290byBlcnJvcjtcbjg5OTA6XHRcdH1cbjg5OTE6XHRcbjg5OTI6XHRcdGlmICh2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gXHUwMDI2XHUwMDI2XG44OTkzOlx0XHQgICAgdi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCBcdTAwMjZcdTAwMjZcbjg5OTQ6XHRcdCAgICB2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykge1xuODk5NTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuODk5NjpcdFx0XHRnb3RvIGVycm9yO1xuODk5NzpcdFx0fVxuODk5ODpcdFxuODk5OTpcdFx0aWYgKCFuZXRpZl9ydW5uaW5nKHYpKSB7XG45MDAwOlx0XHRcdHJldCA9IC1FTkVURE9XTjtcbjkwMDE6XHRcdFx0Z290byBlcnJvcjtcbjkwMDI6XHRcdH1cbjkwMDM6XHRcbjkwMDQ6XHRcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cbjkwMDU6XHRcdGlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbjkwMDY6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjkwMDc6XHRcdFx0Z290byBlcnJvcjtcbjkwMDg6XHRcdH1cbjkwMDk6XHRcbjkwMTA6XHRcdHJldHVybiB2O1xuOTAxMTpcdCBlcnJvcjpcbjkwMTI6XHRcdGRldl9wdXQodik7XG45MDEzOlx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuOTAxNDpcdH1cbjkwMTU6XHRcbjkwMTY6XHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX3dtZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuOTAxNzpcdFx0XHRcdFx0IHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcbjkwMTg6XHR7XG45MDE5Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX1NUQV9XTUVfTUFYICYjNDM7IDFdO1xuOTAyMDpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuOTAyMTpcdFx0aW50IGVycjtcbjkwMjI6XHRcbjkwMjM6XHRcdC8qIHBhcnNlIFdNRSBhdHRyaWJ1dGVzIGlmIHByZXNlbnQgKi9cbjkwMjQ6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1dNRV0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gd2hlcmUgSSYjMzk7ZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgYGRldmAgaW4gbmw4MDIxMSBTdGF0aW9uIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCB1c2FnZSBvZiB0aGUgYGRldmAgdmFyaWFibGUgd2l0aGluIHRoZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbnMuIEJvdGggYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIHN0YXRpb24gZW50cmllcyBpbiBubDgwMjExLiBUaGlzIG1lYW5zIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcG9pbnRzIHdoZXJlIGNoYW5nZXMgdG8gc3RhdGlvbnMgZ2V0IHJlZ2lzdGVyZWQsIGFkZGVkLCBhbmQgbWFuaXB1bGF0ZWQuCgpNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZm9sbG93IHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4gSXMgaXQgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50PyBJcyBpdCBhbGxvY2F0ZWQsIG9yIGRlcml2ZWQgZnJvbSBhbm90aGVyIHN0cnVjdHVyZT8gQXJlIHRoZXJlIGdsb2JhbCB2YXJpYWJsZXM/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSB3aGVyZSBgZGV2YCBpcyBpbml0aWFsbHkgaW50cm9kdWNlZCBpbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBhbmQgdGhlbiB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBkZWJ1Z2dpbmcgb3IgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIOKAkyBwcm9iYWJseSBgZ3JlcGAsIGBjc2NvcGVgLCBgY3RhZ3NgLCBhbmQvb3IgbXkgSURFJiMzOTtzICYjMzQ7ZmluZCBkZWZpbml0aW9uJiMzNDsgb3IgJiMzNDtmaW5kIHVzYWdlcyYjMzQ7IGZlYXR1cmVzIOKAkyB0byBlZmZpY2llbnRseSB0cmFjayBpdHMgcHJvdmVuYW5jZS4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgYGRldmAgaXMgYmVpbmcgdXNlZCBhbmQgbW9kaWZpZWQsIGFuZCBieSB3aGF0LiBBcmUgdGhlIGNhbGxzIHVzaW5nIGBkZXZgIHB1cmVseSByZWFkaW5nIGl0cyB2YWx1ZSwgb3IgaXMgYGRldmAgYmVpbmcgd3JpdHRlbiB0bz8gSWYgd3JpdGVzLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIG1pZ2h0IGFsc28gYmUgbG9va2luZyBhdCBhc3NvY2lhdGVkIHN0cnVjdHMgb3IgZGF0YSBidWZmZXJzIHRoYXQgYXJlIG1vZGlmaWVkIHdoZW4gYGRldmAgY2hhbmdlcy4gSXMgaXQgYSBwb2ludGVyIHRvIGEgZGV2aWNlIHN0cnVjdHVyZSwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldGxpbmsgc29ja2V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCkRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgYGRldmAgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHBvaW50ZXIgdG8gYSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUsIHRvIGFuIGluZGV4IGludG8gYW4gYXJyYXksIHRvIGFuIGlkZW50aWZpZXIgZm9yIGFuIHVuZGVybHlpbmcgaGFyZHdhcmUgaW50ZXJmYWNlLiBJZGVudGlmeWluZyB0aGUgc3RydWN0dXJlIG9mIGRldiwgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlLCB3aWxsIGJlIGVzc2VudGlhbCwgYnV0IGl0IHdvbiYjMzk7dCBiZSBlbm91Z2guIEkmIzM5O2xsIGFsc28gbG9vayBhdCB0aGUgdHlwZXMgb2Ygb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYGRldmAuIEFyZSB3ZSBhY2Nlc3NpbmcgZGV2aWNlIGF0dHJpYnV0ZXMsIG1hbmlwdWxhdGluZyBpbnRlcm5hbCBmbGFncywgb3IgY29uZmlndXJpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzPwoKT25jZSBJIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYGRldmAgd2l0aGluIHRob3NlIGZ1bmN0aW9ucywgSSBjYW4gZXhwYW5kIG91dHdhcmQsIGZvbGxvd2luZyBob3cgaXRzIHZhbHVlIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgY2FsbHMgYW5kIHNlZSB3aG8gaXMgY2FsbGluZyB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgdGhhdCBoZWxwIG1lIGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyB2YXJpYWJsZS4KCkkgZXhwZWN0IHRvIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaXRzIGZsb3cgd2l0aGluIHRoZSBzeXN0ZW0gd2l0aCBhIGNvbWJpbmF0aW9uIG9mIHN0YXRpYyBhbmFseXNpcyBhbmQgdGFyZ2V0ZWQgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkyODA6XHRcbjkyODE6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pIHtcbjkyODI6XHRcdFx0cGFyYW1zLmVtbF9jYXBfcHJlc2VudCA9IHRydWU7XG45MjgzOlx0XHRcdHBhcmFtcy5lbWxfY2FwID1cbjkyODQ6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuOTI4NTpcdFx0fVxuOTI4NjpcdFxuOTI4NzpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSlcbjkyODg6XHRcdFx0cGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID1cbjkyODk6XHRcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pO1xuOTI5MDpcdFxuOTI5MTpcdFx0aWYgKHBhcmFtcy5haXJ0aW1lX3dlaWdodCBcdTAwMjZcdTAwMjZcbjkyOTI6XHRcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbjkyOTM6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSlcbjkyOTQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTI5NTpcdFxuOTI5NjpcdFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9zdGFfdHhwb3dlcl9zZXR0aW5nKGluZm8sXG45Mjk3Olx0XHRcdFx0XHRcdFx0XHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cixcbjkyOTg6XHRcdFx0XHRcdFx0XHRcdTAwMjZwYXJhbXMubGlua19zdGFfcGFyYW1zLnR4cHdyX3NldCk7XG45Mjk5Olx0XHRpZiAoZXJyKVxuOTMwMDpcdFx0XHRyZXR1cm4gZXJyO1xuOTMwMTpcdFxuOTMwMjpcdFx0LyogSW5jbHVkZSBwYXJhbWV0ZXJzIGZvciBURExTIHBlZXIgKHdpbGwgY2hlY2sgbGF0ZXIpICovXG45MzAzOlx0XHRlcnIgPSBubDgwMjExX3NldF9zdGF0aW9uX3RkbHMoaW5mbywgXHUwMDI2cGFyYW1zKTtcbjkzMDQ6XHRcdGlmIChlcnIpXG45MzA1Olx0XHRcdHJldHVybiBlcnI7XG45MzA2Olx0XG45MzA3Olx0XHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XG45MzA4Olx0XHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbjkzMDk6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuOTMxMDpcdFxuOTMxMTpcdFx0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xuOTMxMjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbjkzMTM6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcbjkzMTQ6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxuOTMxNTpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxuOTMxNjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxuOTMxNzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbjkzMTg6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbjkzMTk6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQ0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gYG5sODAyMTFfc2V0X3N0YXRpb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkZXZgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBubDgwMjExX3NldF9zdGF0aW9uYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSByZXZlcnNlIGVuZ2luZWVyaW5nIGNvZGUgb3IgZGVidWdnaW5nIGEgbmV0d29yayBkcml2ZXIgaXNzdWUgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgYGRldmAgaXMgbGlrZWx5IGEgcG9pbnRlciB0byBhIG5ldF9kZXZpY2Ugc3RydWN0dXJlIG9yIGEgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZSDigJMgcGVyaGFwcyBhIGRldmljZS1zcGVjaWZpYyBjb250ZXh0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFyaWFibGUgZ2V0cyBpdHMgdmFsdWUuIFRoZSB1bHRpbWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIGhhbmRsZXMgc3RhdGlvbiBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUgbmw4MDIxMSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkxODA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTE4MTpcdFxuOTE4MjpcdFx0LypcbjkxODM6XHRcdCAqIEFJRCBhbmQgbGlzdGVuX2ludGVydmFsIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvbmx5IGZvciB1bmFzc29jaWF0ZWRcbjkxODQ6XHRcdCAqIHN0YXRpb24uIEluY2x1ZGUgdGhlc2UgcGFyYW1ldGVycyBoZXJlIGFuZCB3aWxsIGNoZWNrIHRoZW0gaW5cbjkxODU6XHRcdCAqIGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKCkuXG45MTg2Olx0XHQgKi9cbjkxODc6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSlcbjkxODg6XHRcdFx0cGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcbjkxODk6XHRcbjkxOTA6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSlcbjkxOTE6XHRcdFx0cGFyYW1zLnZsYW5faWQgPSBubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSk7XG45MTkyOlx0XG45MTkzOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45MTk0Olx0XHRcdHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPVxuOTE5NTpcdFx0XHQgICAgIG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKTtcbjkxOTY6XHRcdGVsc2VcbjkxOTc6XHRcdFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9IC0xO1xuOTE5ODpcdFxuOTE5OTpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JUX1AyUF9QU10pXG45MjAwOlx0XHRcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9XG45MjAxOlx0XHRcdFx0bmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVF9QMlBfUFNdKTtcbjkyMDI6XHRcdGVsc2VcbjkyMDM6XHRcdFx0cGFyYW1zLnN1cHBvcnRfcDJwX3BzID0gLTE7XG45MjA0Olx0XG45MjA1Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pXG45MjA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIwNzpcdFxuOTIwODpcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cbjkyMDk6XHRcdFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycyk7XG45MjEwOlx0XG45MjExOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG45MjEyOlx0XHRcdC8qIElmIE1MRF9BRERSIGF0dHJpYnV0ZSBpcyBzZXQgdGhlbiB0aGlzIGlzIGFuIE1MRCBzdGF0aW9uXG45MjEzOlx0XHRcdCAqIGFuZCB0aGUgTUxEX0FERFIgYXR0cmlidXRlIGhvbGRzIHRoZSBNTEQgYWRkcmVzcyBhbmQgdGhlXG45MjE0Olx0XHRcdCAqIE1BQyBhdHRyaWJ1dGUgaG9sZHMgZm9yIHRoZSBMSU5LIGFkZHJlc3MuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHVwb24gc2VlaW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmA6CgoqKkluaXRpYWwgRXhhbWluYXRpb24gb2Ygbmw4MDIxMV9zZXRfc3RhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBgbmw4MDIxMV9zZXRfc3RhdGlvbmDigKYgcmlnaHQsIHRoaXMgaXMgd2hlcmUgd2UgYmVnaW4gdG8gY29uZmlndXJlIHN0YXRpb24gcGFyYW1ldGVycyB0aHJvdWdoIHRoZSBubDgwMjExIGludGVyZmFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGhpZ2gtbGV2ZWwgY29udGV4dCBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzIGJlaW5nIHNldD8gV2hhdCBraW5kIG9mIGNvbnRyb2wgZmxvdyBhbSBJIGxvb2tpbmcgYXQ/IE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBlbmNvdW50ZXJlZCBhdCB0aGlzIGVudHJ5IHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgZm9yIGFueSBwcmVsaW1pbmFyeSBjaGVja3MgYW5kIHNhbml0eSB2YWxpZGF0aW9ucyB0aGF0IG1heSB0YWtlIHBsYWNlIGJlZm9yZSB3ZSBnZXQgdG9vIGRlZXAgaW50byB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuIEkgYW50aWNpcGF0ZSBzb21lIHNpZ25pZmljYW50IGludGVyYWN0aW9uIHdpdGggdGhlIHdpcmVsZXNzIGRldmljZSYjMzk7cyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBtZXNzYWdlIGlzIHBhcnNlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBzb21ldGhpbmcgdGhlIGRyaXZlciBjYW4gd29yayB3aXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTE0MDpcdFx0XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG45MTQxOlx0XHRcdFx0XHRcdCBOTDgwMjExX0VYVF9GRUFUVVJFX1NUQV9UWF9QV1IpKVxuOTE0MjpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjkxNDM6XHRcbjkxNDQ6XHRcdFx0aWR4ID0gTkw4MDIxMV9BVFRSX1NUQV9UWF9QT1dFUl9TRVRUSU5HO1xuOTE0NTpcdFx0XHR0eHB3ci1cdTAwM2V0eXBlID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW2lkeF0pO1xuOTE0NjpcdFxuOTE0NzpcdFx0XHRpZiAodHhwd3ItXHUwMDNldHlwZSA9PSBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQpIHtcbjkxNDg6XHRcdFx0XHRpZHggPSBOTDgwMjExX0FUVFJfU1RBX1RYX1BPV0VSO1xuOTE0OTpcdFxuOTE1MDpcdFx0XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW2lkeF0pXG45MTUxOlx0XHRcdFx0XHR0eHB3ci1cdTAwM2Vwb3dlciA9IG5sYV9nZXRfczE2KGluZm8tXHUwMDNlYXR0cnNbaWR4XSk7XG45MTUyOlx0XHRcdFx0ZWxzZVxuOTE1MzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MTU0Olx0XHRcdH1cbjkxNTU6XHRcbjkxNTY6XHRcdFx0KnR4cHdyX3NldCA9IHRydWU7XG45MTU3Olx0XHR9IGVsc2Uge1xuOTE1ODpcdFx0XHQqdHhwd3Jfc2V0ID0gZmFsc2U7XG45MTU5Olx0XHR9XG45MTYwOlx0XG45MTYxOlx0XHRyZXR1cm4gMDtcbjkxNjI6XHR9XG45MTYzOlx0XG45MTY0Olx0c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG45MTY1Olx0e1xuOTE2NjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjkxNjc6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuOTE2ODpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXHUwMDNlbmV0ZGV2O1xuOTE2OTpcdFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XG45MTcwOlx0XHR1OCAqbWFjX2FkZHI7XG45MTcxOlx0XHRpbnQgZXJyO1xuOTE3MjpcdFxuOTE3MzpcdFx0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuOTE3NDpcdFxuOTE3NTpcdFx0aWYgKCFkZXYgXHUwMDI2XHUwMDI2IHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiBcdTAwMjZcdTAwMjZcbjkxNzY6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSlcbjkxNzc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MTc4Olx0XG45MTc5Olx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWNoYW5nZV9zdGF0aW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBubDgwMjExX25ld19zdGF0aW9uYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBubDgwMjExX25ld19zdGF0aW9uYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBzdGF0aW9uIGVudHJ5IHdpdGhpbiB0aGUgbmw4MDIxMSBmcmFtZXdvcmssIHJpZ2h0PyBTbywgdGhpcyBpcyAqdGhlKiBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgaW5zdGFudGlhdGluZyBhIG5ldyBTVEEsIGFzc29jaWF0aW5nIGl0IHdpdGggYW4gaW50ZXJmYWNlLCBhbmQgZXNzZW50aWFsbHksIGdpdmluZyBpdCBhIHByZXNlbmNlIG9uIHRoZSB3aXJlbGVzcyBtZWRpdW0uIE15IG1pbmQmIzM5O3MgcnVubmluZyB0aHJvdWdoIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgYG5ldF9kZXZpY2VgLCB0aGUgYGNmZzgwMjExX3N0YXRpb25gLCBsaWtlbHkgc29tZSByZWxhdGVkIHN0cnVjdHVyZXMgaW4gdGhlIG1hYzgwMjExIGxheWVyLi4uIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGxvY2tpbmcgaW52b2x2ZWQ7IGl0JiMzOTtzIGNyaXRpY2FsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIG1hbmlwdWxhdGluZyB0aGlzIHNoYXJlZCBzdGF0ZS4gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gQXJlIHRoZXkgcHJvcGVybHkgY2hlY2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBUaGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eTsgYW55IG1pc3NlZCBlcnJvciBoYW5kbGluZyBoZXJlIHdpbGwgYmUgYSBkaXNhc3Rlci4gSSBuZWVkIHRvIGxvb2sgZm9yIHRoYXQuIEFsc28sIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMga2V5LiBXaGF0IGFyZ3VtZW50cyBhcmUgd2UgZXhwZWN0aW5nPyBXaGF0IGluZm9ybWF0aW9uIGlzIHBhc3NlZCBmcm9tIHVzZXIgc3BhY2UsIGFuZCBob3cgaXMgaXQgdmFsaWRhdGVkPyBBbnkgdW5jaGVja2VkIHVzZXItcHJvdmlkZWQgZGF0YSBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBJJiMzOTttIGV4cGVjdGluZyBjaGVja3Mgb24gdGhlIE1BQyBhZGRyZXNzLCB0aGUgaW50ZXJmYWNlIGluZGV4LCBsaWtlbHkgc29tZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbi4gSXMgdGhlcmUgYW55IGlucHV0IHNhbml0aXphdGlvbiBnb2luZyBvbiwgb3IgYXJlIHdlIGp1c3QgdHJ1c3Rpbmcgd2hhdCYjMzk7cyBjb21pbmcgaW4gZnJvbSB0aGUgdXNlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBuZWVkcyBhIHRob3JvdWdoIHJldmlldy4gRmluYWxseSwgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3Jvbmc7IGRvZXMgaXQgZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgbmw4MDIxMSBldmVudCB0byBub3RpZnkgdXNlciBzcGFjZSBvZiB0aGUgZmFpbHVyZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NDIwOlx0XHRcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9XG45NDIxOlx0XHRcdFx0d2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPO1xuOTQyMjpcdFx0fVxuOTQyMzpcdFxuOTQyNDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcbjk0MjU6XHRcdFx0cGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSk7XG45NDI2Olx0XHRlbHNlIGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSlcbjk0Mjc6XHRcdFx0cGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcbjk0Mjg6XHRcbjk0Mjk6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQ0FQQUJJTElUWV0pIHtcbjk0MzA6XHRcdFx0cGFyYW1zLmNhcGFiaWxpdHkgPVxuOTQzMTpcdFx0XHRcdG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9DQVBBQklMSVRZXSk7XG45NDMyOlx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgfD0gU1RBVElPTl9QQVJBTV9BUFBMWV9DQVBBQklMSVRZO1xuOTQzMzpcdFx0fVxuOTQzNDpcdFxuOTQzNTpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9FWFRfQ0FQQUJJTElUWV0pIHtcbjk0MzY6XHRcdFx0cGFyYW1zLmV4dF9jYXBhYiA9XG45NDM3Olx0XHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0VYVF9DQVBBQklMSVRZXSk7XG45NDM4Olx0XHRcdHBhcmFtcy5leHRfY2FwYWJfbGVuID1cbjk0Mzk6XHRcdFx0XHRubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9FWFRfQ0FQQUJJTElUWV0pO1xuOTQ0MDpcdFx0fVxuOTQ0MTpcdFxuOTQ0MjpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldKVxuOTQ0MzpcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmh0X2NhcGEgPVxuOTQ0NDpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldKTtcbjk0NDU6XHRcbjk0NDY6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WSFRfQ0FQQUJJTElUWV0pXG45NDQ3Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEgPVxuOTQ0ODpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSk7XG45NDQ5Olx0XG45NDUwOlx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pIHtcbjk0NTE6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhID1cbjk0NTI6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSk7XG45NDUzOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYV9sZW4gPVxuOTQ1NDpcdFx0XHRcdG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xuOTQ1NTpcdFxuOTQ1NjpcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKSB7XG45NDU3Olx0XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSA9XG45NDU4Olx0XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FSFRfQ0FQQUJJTElUWV0pO1xuOTQ1OTpcdFx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIHN0YXJ0IG9mIGBubDgwMjExX25ld19zdGF0aW9uYCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAg4oCTIEluaXRpYWwgVGhvdWdodHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSAqYmVnaW5zKiB3aGVuIGEgbmV3IHN0YXRpb24gY29ubmVjdHMg4oCTIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsJiMzOTtzIHdpcmVsZXNzIHN1YnN5c3RlbSBnZXRzIGl0cyBob29rcyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBob3cgdGhpcyBjb25uZWN0aW9uIGlzIGJlaW5nIHJlcHJlc2VudGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGNvbmNlcm5zIGFyZSBhbHdheXMgYXJvdW5kIHJlc291cmNlIGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgbWFraW5nIHN1cmUgdGhpcyBuZXcgc3RhdGlvbiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCkkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaG93IHRoZSBzdGF0aW9uJiMzOTtzIGNvbmZpZ3VyYXRpb24gZGF0YSwgbGlrZSBpdHMgTUFDIGFkZHJlc3MsIGFzc29jaWF0ZWQgQlNTSUQsIGFuZCB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24sIGlzIGJlaW5nIHBhc3NlZCBpbi4gQXJlIHdlIHZhbGlkYXRpbmcgdGhpcyBkYXRhIHByb3Blcmx5PyBJcyB0aGVyZSBhbnkgb3Bwb3J0dW5pdHkgZm9yIGluamVjdGlvbiBvZiBtYWxpY2lvdXMgZGF0YSBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGZvciBjaGVja3Mgb24gbGVuZ3RocywgdmFsaWQgTUFDIGFkZHJlc3NlcywgYW5kIGFueSBvdGhlciBzYW5pdHkgY2hlY2tzIHRoZSBkZXZlbG9wZXJzIGhhdmUgaW1wbGVtZW50ZWQuCgpOZXh0LCBJJiMzOTttIGdvaW5nIHRvIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBuZXcgc3RhdGlvbiBpcyBiZWluZyByZXByZXNlbnRlZCBpbnRlcm5hbGx5LiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1c2VkPyBIb3cgYXJlIHRoZXkgbGlua2VkIGludG8gdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbT8gSXMgaXQgYSBzaW5nbGUgYWxsb2NhdGlvbiwgb3IgYXJlIG11bHRpcGxlIHN0cnVjdHVyZXMgaW52b2x2ZWQ/IEkmIzM5O2xsIGJlIGtlZXBpbmcgYSBrZWVuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyDigJMgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBNZW1vcnkgbWFuYWdlbWVudCB3aWxsIGJlIGNyaXRpY2FsIOKAkyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgYWxsb2NhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGF0IGRlYWxsb2NhdGlvbiBoYXBwZW5zIGluIHRoZSBjb3JyZWN0IHNpdHVhdGlvbnMsIGF2b2lkaW5nIG1lbW9yeSBsZWFrcy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBldmVudCBvciBjYWxsYmFjayByZWdpc3RyYXRpb24uIERvZXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyIG90aGVyIGFjdGlvbnMgb3Igc2V0IHVwIGZ1dHVyZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3RhdGlvbj8gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdGF0aW9uJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoYXQgaW5mb3JtYXRpb24gaXMgbWFkZSBhY2Nlc3NpYmxlIHRvIG90aGVyIHN1YnN5c3RlbXMsIGxpa2UgdGhlIG5ldHdvcmtpbmcgc3RhY2sgb3IgYW55IHVzZXJzcGFjZSBtb25pdG9yaW5nIHRvb2xzLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgYWxsIGluaXRpYWxpc2F0aW9uIHJvdXRpbmVzIGFyZSBjYWxsZWQgYW5kIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3RhdGlvbiBpcyBpbml0aWFsaXplZCB0byBhIHZhbGlkIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkzNjA6XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxuOTM2MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM2MjpcdFx0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpIHtcbjkzNjM6XHRcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9OTUlfTUFDXSlcbjkzNjQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM2NTpcdFxuOTM2NjpcdFx0XHRcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cbjkzNjc6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcbjkzNjg6XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XG45MzY5Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxuOTM3MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzcxOlx0XHRcdH1cbjkzNzI6XHRcdH0gZWxzZSB7XG45MzczOlx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXG45Mzc0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc1Olx0XG45Mzc2Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXG45Mzc3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzc4Olx0XG45Mzc5Olx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXHUwMDI2XHUwMDI2XG45MzgwOlx0XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxuOTM4MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM4MjpcdFx0fVxuOTM4MzpcdFxuOTM4NDpcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cbjkzODU6XHRcdFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycyk7XG45Mzg2Olx0XG45Mzg3Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG45Mzg4Olx0XHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcbjkzODk6XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XG45MzkwOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19tYWMgPVxuOTM5MTpcdFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5MjpcdFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYykpXG45MzkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45Mzk0Olx0XHR9IGVsc2Uge1xuOTM5NTpcdFx0XHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuOTM5NjpcdFx0fVxuOTM5NzpcdFxuOTM5ODpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKSB7XG45Mzk5Olx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzID1cbjk0MDA6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAxOlx0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzX2xlbiA9XG45NDAyOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XG45NDAzOlx0XHR9XG45NDA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBkZWFsaW5nIHdpdGggYG5sODAyMTFfbmV3X3N0YXRpb25gIGFuZCBJJiMzOTttIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgRnVuY3Rpb24mIzM5O3MgSGlzdG9yeSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgbGluZWFnZSwgdG8gc2VlIHRoZSBjYWxscyB0aGF0IGxlYWQgdXAgdG8gaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMgcGFyYW1vdW50IGhlcmUuIFNvIEnigJltIG1lbnRhbGx5IHNjYW5uaW5nIGJhY2sgdGhyb3VnaCB0aGUgZWFybGllciBsaW5lcywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZC4uLiB3aGF0IHRyaWdnZXJzIHRoaXMgYG5ld19zdGF0aW9uYCBldmVudD8gSXMgaXQgYSBiZWFjb24sIGEgcHJvYmUgcmVxdWVzdCwgYSBtYW5hZ2VtZW50IGZyYW1lPyBLbm93aW5nIHRoYXQgd2lsbCBkZWZpbmUgdGhlIHBvdGVudGlhbCBzaWduaWZpY2FuY2Ugb2YgYW55IGlzc3VlcyBJIGZpbmQuIEkmIzM5O20gZXNzZW50aWFsbHkgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgZXhlY3V0aW9uIHBhdGgsIG1lbnRhbGx5IGJ1aWxkaW5nIGEgbWVudGFsIHN0YWNrIG9mIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNlZGluZyBjb25kaXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNsdWVzIHRvIHN1cmZhY2Ugc29vbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5MzMwOlx0IG91dF9wdXRfdmxhbjpcbjkzMzE6XHRcdGRldl9wdXQocGFyYW1zLnZsYW4pO1xuOTMzMjpcdFxuOTMzMzpcdFx0cmV0dXJuIGVycjtcbjkzMzQ6XHR9XG45MzM1Olx0XG45MzM2Olx0c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG45MzM3Olx0e1xuOTMzODpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjkzMzk6XHRcdGludCBlcnI7XG45MzQwOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjkzNDE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVx1MDAzZW5ldGRldjtcbjkzNDI6XHRcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xuOTM0MzpcdFx0dTggKm1hY19hZGRyID0gTlVMTDtcbjkzNDQ6XHRcdHUzMiBhdXRoX2Fzc29jID0gQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkgfFxuOTM0NTpcdFx0XHRcdCBCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKTtcbjkzNDY6XHRcbjkzNDc6XHRcdG1lbXNldChcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcbjkzNDg6XHRcbjkzNDk6XHRcdGlmICghZGV2IFx1MDAyNlx1MDAyNiB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pXG45MzUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTM1MTpcdFxuOTM1MjpcdFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfc3RhdGlvbilcbjkzNTM6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuOTM1NDpcdFxuOTM1NTpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKVxuOTM1NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzNTc6XHRcbjkzNTg6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4gfHxcbjkzNTk6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xuOTM2MDpcdFx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXG45MzYxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MzYyOlx0XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xuOTM2MzpcdFx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX05NSV9NQUNdKVxuOTM2NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAg4oCTIFdoYXQmIzM5O3MgTmV4dD8qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBXZSYjMzk7dmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIG5vdyBJIG5lZWQgdG8gc2VlIHRoZSByZXN0IG9mIGl0LiBXaGF0IGFyZSB3ZSBsb29raW5nIGF0IGhlcmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG5leHQgc2VjdGlvbnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IHRoYXQgd2lsbCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gSXMgdGhlcmUgYSByZWFzb24gd2h5IHdlIGFyZSBsb29raW5nIGhlcmU/IFdoYXQgaXMgdGhlIGJpZ2dlciBwaWN0dXJlPyBPa2F5LCBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk1OTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk1OTE6XHRcbjk1OTI6XHRcdFx0LyogT2xkZXIgdXNlcnNwYWNlLCBvciB1c2Vyc3BhY2Ugd2FudGluZyB0byBiZSBjb21wYXRpYmxlIHdpdGhcbjk1OTM6XHRcdFx0ICogIU5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSwgd2lsbCBub3Qgc2V0IHRoZSBhdXRoXG45NTk0Olx0XHRcdCAqIGFuZCBhc3NvYyBmbGFncyBpbiB0aGUgbWFzaywgYnV0IGFzc3VtZXMgdGhlIHN0YXRpb24gd2lsbCBiZVxuOTU5NTpcdFx0XHQgKiBhZGRlZCBhcyBhc3NvY2lhdGVkIGFueXdheSBzaW5jZSB0aGlzIHdhcyB0aGUgcmVxdWlyZWQgZHJpdmVyXG45NTk2Olx0XHRcdCAqIGJlaGF2aW91ciBiZWZvcmUgTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHdhc1xuOTU5NzpcdFx0XHQgKiBpbnRyb2R1Y2VkLlxuOTU5ODpcdFx0XHQgKiBJbiBvcmRlciB0byBub3QgYm90aGVyIGRyaXZlcnMgd2l0aCB0aGlzIHF1aXJrIGluIHRoZSBBUElcbjk1OTk6XHRcdFx0ICogc2V0IHRoZSBmbGFncyBpbiBib3RoIHRoZSBtYXNrIGFuZCBzZXQgZm9yIG5ldyBzdGF0aW9ucyBpblxuOTYwMDpcdFx0XHQgKiB0aGlzIGNhc2UuXG45NjAxOlx0XHRcdCAqL1xuOTYwMjpcdFx0XHRpZiAoIShwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IGF1dGhfYXNzb2MpKSB7XG45NjAzOlx0XHRcdFx0cGFyYW1zLnN0YV9mbGFnc19tYXNrIHw9IGF1dGhfYXNzb2M7XG45NjA0Olx0XHRcdFx0cGFyYW1zLnN0YV9mbGFnc19zZXQgfD0gYXV0aF9hc3NvYztcbjk2MDU6XHRcdFx0fVxuOTYwNjpcdFxuOTYwNzpcdFx0XHQvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi9cbjk2MDg6XHRcdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuOTYwOTpcdFx0XHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbjk2MTA6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XG45NjExOlx0XHRcdGJyZWFrO1xuOTYxMjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuOTYxMzpcdFx0XHQvKiBpZ25vcmUgdUFQU0QgZGF0YSAqL1xuOTYxNDpcdFx0XHRwYXJhbXMuc3RhX21vZGlmeV9tYXNrIFx1MDAyNj0gflNUQVRJT05fUEFSQU1fQVBQTFlfVUFQU0Q7XG45NjE1Olx0XG45NjE2Olx0XHRcdC8qIGFzc29jaWF0ZWQgaXMgZGlzYWxsb3dlZCAqL1xuOTYxNzpcdFx0XHRpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrIFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKSlcbjk2MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk2MTk6XHRcdFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cbjk2MjA6XHRcdFx0aWYgKChwYXJhbXMuc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSKSkgfHxcbjk2MjE6XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcbjk2MjI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjk2MjM6XHRcdFx0YnJlYWs7XG45NjI0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG45NjI1Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XG45NjI2Olx0XHRcdC8qIGlnbm9yZSB1QVBTRCBkYXRhICovXG45NjI3Olx0XHRcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcbjk2Mjg6XHRcbjk2Mjk6XHRcdFx0LyogdGhlc2UgYXJlIGRpc2FsbG93ZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIGBnZXRfdmxhbmAgaGFzIGJlZW4gbW9kaWZpZWQuIFNwZWNpZmljYWxseSwgaXQgbm93IGxvb2tzIGxpa2U6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKCQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmBgYAoKVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBUaGUgdGhpcmQgcGFyYW1ldGVyLCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAsIGlzIHRoZSBuZXcgYWRkaXRpb24uIE5vdywgdGhlIGNvZGUgaW5jbHVkZXMgYSB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgZ2V0X3ZsYW5gLiBJdCYjMzk7cyBlbnN1cmluZyB0aGF0IHRoZSBWTEFOIGludGVyZmFjZSBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBpbnRlbmRlZCBBUCBpbnRlcmZhY2UuCgpgYGBjCgkvKiBDaGVjayBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlICovCglpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LSZndDtkZXZfYWRkciwgZGV2LSZndDtkZXZfYWRkcikpIHsKCQlyZXQgPSAtRUlOVkFMOwoJCWdvdG8gZXJyb3I7Cgl9CmBgYAoKR29vZCwgdGhhdCYjMzk7cyBzb3VuZCBsb2dpYyDigJMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBtaXNjb25maWd1cmF0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIE5vdywgdGhlIGBkZXZgIHBhcmFtZXRlciBpcyBiZWluZyBwYXNzZWQgdG8gYGdldF92bGFuYCBpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHNlbnNlIGNvbnNpZGVyaW5nIHRoZSBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlLiBJIHdvdWxkIGV4cGVjdCB0aGVzZSB0byBiZSB0aGUgbGlrZWx5IGNhbGxpbmcgc2l0ZXMgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgVkxBTiBtYW5pcHVsYXRpb24gaW4gc3RhdGlvbiBjb25maWd1cmF0aW9uLgoKSG9sZCBvbiBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBUaGlzIGNoYW5nZSB0byBgZ2V0X3ZsYW5gIGNvdWxkIGFmZmVjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggdG8gY29uZmlybSB0aGF0IGBnZXRfdmxhbmAgaGFzIG5vIG90aGVyIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF92bGFuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTg5NjY9RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTcxLSAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTcyOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3Olx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzA4LVx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz05MzM2PXN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwNy1cdFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk2MDg6XHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYwOS1cdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdldF92bGFuYCBDYWxsZXJzIGFuZCBEZXZpY2UgQWRkcmVzcyBDb21wYXJpc29uKioKCk9rYXksIHNvIG9ubHkgdHdvIGNhbGxlcnMgYXJlIGhpdHRpbmcgdGhpcyBgZ2V0X3ZsYW5gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGtlZXBzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIG1hbmFnZWFibGUuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBhc3N1bXB0aW9uOiBjYW4gYGRldl9hZGRyYCDigJMgdGhlIGRldmljZSBhZGRyZXNzIOKAkyBvZiBlaXRoZXIgdGhlIGBkZXZgIG9yIGB2YCB2YXJpYWJsZXMgd2l0aGluIHRoZSBmdW5jdGlvbiBiZSB1bmluaXRpYWxpemVkPwoKTGV0JiMzOTtzIGJyZWFrIGRvd24gd2hlcmUgdGhlc2UgdmFyaWFibGVzIGNvbWUgZnJvbS4gYHZgIGlzIGEgYG5ldF9kZXZpY2VgIG9idGFpbmVkIHRocm91Z2ggYGRldl9nZXRfYnlfaW5kZXgoLi4uKWAuIEFuZCBgZGV2YCBpcyBhY2Nlc3NlZCB2aWEgYHdkZXYtJmd0O25ldGRldmAuIFRoZXNlIGFyZSBib3RoIG5ldHdvcmsgZGV2aWNlcywgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBUaGF0IG1lYW5zLCBieSBkZWZpbml0aW9uLCB0aGVpciBFdGhlcm5ldCBhZGRyZXNzZXMgKGBkZXZfYWRkcmApIHNob3VsZCBiZSBzdGFuZGFyZCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgTUFDIGFkZHJlc3NlcyDigJMgdGhleSBnZXQgc2V0IGR1cmluZyB0aGUgbmV0ZGV2IGNyZWF0aW9uIGFuZCByZWdpc3RyYXRpb24gcHJvY2Vzc2VzLiBTbywgdGhlIGNoYW5jZXMgb2YgdGhlbSBiZWluZyB1bmluaXRpYWxpemVkIGFyZSB2ZXJ5LCB2ZXJ5IGxvdywgaWYgdGhlIG5ldHdvcmsgc3RhY2sgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuCgpUaGUgY29yZSBvZiB0aGUgbG9naWMgaGluZ2VzIG9uIGBldGhlcl9hZGRyX2VxdWFsKHYtJmd0O2Rldl9hZGRyLCBkZXYtJmd0O2Rldl9hZGRyKWAuIFRoaXMgY29tcGFyZXMgc2l4IGJ5dGVzLiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IHZlcmlmeSB0aGF0IGBldGhlcl9hZGRyX2VxdWFsYCBpcyBiZWhhdmluZyBhcyBJIGV4cGVjdCBpdCB0by4gVGhlIGNvZGUgaXMgbGlrZWx5IG9wdGltaXplZCBmb3Igc3BlZWQsIGJ1dCBJIHNob3VsZCBzYW5pdHkgY2hlY2sgdGhhdCBpdCYjMzk7cyBkb2luZyBhIHByb3BlciwgYnl0ZS1ieS1ieXRlIGNvbXBhcmlzb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaD0zMzc9c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX2luaGVyaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRzdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzUyLSAqL1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjM1MzpzdGF0aWMgaW5saW5lIGJvb2wgZXRoZXJfYWRkcl9lcXVhbChjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNTQte1xuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zODEtXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6MzgyOnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zODMte1xuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MDUtICovXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NDA2OnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsX3VuYWxpZ25lZChjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MDcte1xuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MjQtICovXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NDI1OnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsX21hc2tlZChjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMixcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MjYtXHRcdFx0XHRcdCAgIGNvbnN0IHU4ICptYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MQoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBleHBvc2VzIHJpc2tzIGRldGVjdGFibGUgKm9ubHkqIGJ5IEtNU0FOLiBJJiMzOTttIGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4KCkZpcnN0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBwYXRjaCYjMzk7cyBhY3Rpb25zOiBpdCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIHRoZSBgZ2V0X3ZsYW4oKWAgZnVuY3Rpb24gaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBUaGlzIGNoZWNrIHZlcmlmaWVzIHRoYXQgdGhlIFZMQU4gZGV2aWNlIChgdmApIGhhcyB0aGUgc2FtZSBNQUMgYWRkcmVzcyBhcyB0aGUgcGFyZW50IEFQL1AyUF9HTyBkZXZpY2UgKGBkZXZgKS4gQ3J1Y2lhbGx5LCB0aGlzIGlzIGEgdmFsaWRhdGlvbiwgYW4gKmlucHV0IGNoZWNrKi4gVGhlIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGBkZXZgIGFuZCB0aGUgY2FsbGVyIHNldHMgYGRldmAgdG8gdGhlIHByb3BlciBuZXRfZGV2aWNlLiBUaGUgdmFsaWRhdGlvbiBsb2dpYyBub3cgY29tcGFyZXMgYHYtJmd0O2Rldl9hZGRyYCBhbmQgYGRldi0mZ3Q7ZGV2X2FkZHJgIHVzaW5nIGBldGhlcl9hZGRyX2VxdWFsYCwgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGUgYWRkcmVzc2VzIGRvbiYjMzk7dCBtYXRjaC4KCk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGVzZSBxdWVzdGlvbnM6CgoxLiAgKipEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGRhdGEgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGFuZCBzZW50IHRvIHVzZXJzcGFjZT8qKiBOby4gSXQgZG9lcyBub3Qgc2VuZCBhbnl0aGluZyB0byB1c2VyIHNwYWNlLgoyLiAgKipEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogIE5vLCBgZGV2YCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBhIHdlbGwtZGVmaW5lZCBgZGV2YCBhbmQgYSBgdmAgYWNxdWlyZWQgdGhyb3VnaCBgZGV2X2dldF9ieV9pbmRleGAgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZC4KMy4gICoqQXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGV4aXN0aW5nIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/KiogTm8sIHRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQuCjQuICAqKkFyZSB0aGVyZSBwb3RlbnRpYWwgYm91bmRzIGNoZWNrcyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8qKiBOby4gVGhlIHBhdGNoIGltcG9zZXMgYSBzdHJpY3RlciByZXN0cmljdGlvbi4gSXTigJlzIGEgdmFsaWRhdGlvbiB0aGF0IGd1YXJhbnRlZXMgYWxpZ25tZW50IG9mIFZMQU4gdG8gdGhlIHBhcmVudCBkZXZpY2UuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYXJlIGFscmVhZHkgZW5hYmxlZC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMqLiBUaGUgY3JpdGljYWwgcnVsZSBpcywgaWYgS0FTQU4gKG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzKSBjYW4gY2F0Y2ggYSBidWcsIEtNU0FOIGlzICpub3QqIG5lY2Vzc2FyeS4gS01TQU4gZnV6emluZyBpcyBleHBlbnNpdmUuCgpJbiB0aGlzIHNwZWNpZmljIGNhc2UsIGJvdGggYHZgIGFuZCBgZGV2YCBhcmUsIGF0IHRoZSBwb2ludCBvZiBhY2Nlc3MsIHZhbGlkLCByZWdpc3RlcmVkIGBuZXRfZGV2aWNlYCBwb2ludGVycyB3aG9zZSBgZGV2X2FkZHJgIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdHJhdGlvbiByb3V0aW5lcy4gVGhpcyBlbGltaW5hdGVzIHRoZSBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBgZGV2YCBvciBgdmAg4oCTIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3RoZXIgbGlmZWN5Y2xlIHByb2JsZW1zIOKAkyBhcmUgYWxyZWFkeSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgZXhpc3RpbmcgdG9vbHMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgc29saWQsIGFuZCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3Igc3BlY2lhbCBLTVNBTiBjb25zaWRlcmF0aW9ucy4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYSBjaGVjayBmb3IgYWxpZ25tZW50IG9mIHRoZSBWTEFOIHRvIHRoZSBwYXJlbnQgZGV2aWNlLCBubyB1bmluaXRpYWxpemVkIGRhdGEgaGVyZS4gVGltZSB0byBmbGFnIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgZ2V0X3ZsYW4oKWAgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHRvIHRha2UgYW4gYWRkaXRpb25hbCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAgYXJndW1lbnQgYW5kIHZlcmlmaWVzIHRoYXQgYGRldmAgaXMgdmFsaWQgYW5kIHRoYXQgYHYtXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgZ2V0X3ZsYW4oKWAgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHRvIHRha2UgYW4gYWRkaXRpb25hbCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAgYXJndW1lbnQgYW5kIHZlcmlmaWVzIHRoYXQgYGRldmAgaXMgdmFsaWQgYW5kIHRoYXQgYHYtXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyMS4zMDA5ODc5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQyMTI2NTM0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X3ZsYW5cIixcbiAgICBcIm5sODAyMTFfc2V0X3N0YXRpb25cIixcbiAgICBcIm5sODAyMTFfbmV3X3N0YXRpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVxcdTAwM2VkZXZfYWRkcmAgbWF0Y2hlcyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcy4gVGhlIGBkZXZfYWRkcmAgZmllbGRzIGJlaW5nIGNvbXBhcmVkIGJlbG9uZyB0byBleGlzdGluZywgcmVnaXN0ZXJlZCBuZXR3b3JrIGRldmljZXMgKGBuZXRfZGV2aWNlYCkgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIHBvaW50ZXIgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGF0IGEgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgdGFyZ2V0IEFQL1AyUF9HTyBpbnRlcmZhY2Ugd2hlbiBzZXR0aW5nIG9yIGFkZGluZyBhIHN0YXRpb24gaW4gbmw4MDIxMS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayByZXF1ZXN0IGhhbmRsaW5nIGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbC9zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyMS4zMDA5OTQwNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTk5ODk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc0ODBjZGU4M2IwODcxMTJkZGFhOGQ0MTgyNzEyM2YxNTUyZDJkNzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCA4OTliNjM3NGM1NTA2Li4wZjMzODgzMTJjY2Q4IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTg5NjYsMTAgKzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UpO1xcbiBcXG4gLypcXG4tICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcgYW5kIG9uIHRoZSByaWdodCB3aXBoeS5cXG4rICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeVxcbisgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdjtcXG5AQCAtODk5OSw2ICs5MDAxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFx0fVxcbiBcXG4rXFx0LyogQ2hlY2sgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZSAqL1xcbitcXHRpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LVxcdTAwM2VkZXZfYWRkciwgZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIHY7XFxuICBlcnJvcjpcXG4gXFx0ZGV2X3B1dCh2KTtcXG5AQCAtOTI5Niw3ICs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYpO1xcbitcXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XFxuIFxcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XFxuIFxcbkBAIC05NTk3LDcgKzk2MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxuLVxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7XFxuK1xcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG4gXFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcXG4gXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjIxLjg1MTUzMjM1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzE2MDM4OTE2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdldF92bGFuXCIsXG4gICAgXCJubDgwMjExX3NldF9zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGF0IGEgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgdGFyZ2V0IEFQL1AyUF9HTyBpbnRlcmZhY2Ugd2hlbiBzZXR0aW5nIG9yIGFkZGluZyBhIHN0YXRpb24gaW4gbmw4MDIxMS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayByZXF1ZXN0IGhhbmRsaW5nIGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbC9zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0ODBjZGU4M2IwODcxMTJkZGFhOGQ0MTgyNzEyM2YxNTUyZDJkNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwODo0NToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4OTliNjM3NGM1NTA2Li4wZjMzODgzMTJjY2Q4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTg5NjYsMTAgKzg5NjYsMTIgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XG4gXG4gLypcbi0gKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZyBhbmQgb24gdGhlIHJpZ2h0IHdpcGh5LlxuKyAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nLCBvbiB0aGUgcmlnaHQgd2lwaHlcbisgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tXHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXG4rXHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnY7XG5AQCAtODk5OSw2ICs5MDAxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvcjtcbiBcdH1cbiBcbitcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cbitcdGlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHJldHVybiB2O1xuICBlcnJvcjpcbiBcdGRldl9wdXQodik7XG5AQCAtOTI5Niw3ICs5MzA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbitcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbiBcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XG4gXG5AQCAtOTU5Nyw3ICs5NjA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcbiBcdFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXG4tXHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldik7XG4rXHRcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcbiBcdFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xuIFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjIxLjg1MTUzMzc3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMTAxODU5MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN0YXRpb24gY29uZmlndXJhdGlvbi4gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgYGdldF92bGFuYCBmdW5jdGlvbiBpcyB1c2VkIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIHdpdGhpbiBgZ2V0X3ZsYW5gIHRvIGVuc3VyZSB0aGUgVkxBTiBpbnRlcmZhY2UgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgcHJvdmlkZWQgQVAvUDJQX0dPIGludGVyZmFjZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHJlbGlhYmx5IHRlc3RlZD8gR2l2ZW4gdGhlIGZvY3VzIG9uIG5ldGxpbmsgbmw4MDIxMSBjb21tYW5kcywgSSB3b25kZXIgaWYgdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgc2V0IHVwIHRvIGFkZHJlc3MgdGhpcyFcblxuQWgsIGl0IGlzISBtYWM4MDIxMV9od3NpbSBpcywgdGhhbmtmdWxseSwgYSBzdGFwbGUgaW4gc3l6a2FsbGVyLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSByZWFkaWx5IGF2YWlsYWJsZSBzb2Z0d2FyZS1zaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlLCB3aGljaCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHRlc3RpbmcgbGFuZHNjYXBlLiBOZXRsaW5rIGNvbW1hbmRzIGxpa2UgYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBhbmQgYE5MODAyMTFfQ01EX05FV19TVEFUSU9OYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gTm8gaGFyZHdhcmUgY29uc3RyYWludHMgdG8gd29ycnkgYWJvdXQgaGVyZSEgSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGZpbGVzIGFuZCBgS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpY3MsIGJ1dCB0aGUgZmFjdCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGluIHN5emthbGxlciBpcyBncmVhdCBuZXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuOTUzMzk1OTUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5NjUsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjg5NjU6XFx0fVxcbjg5NjY6XFx0RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZSk7XFxuODk2NzpcXHRcXG44OTY4OlxcdC8qXFxuODk2OTpcXHQgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgcnVubmluZywgb24gdGhlIHJpZ2h0IHdpcGh5XFxuODk3MDpcXHQgKiBhbmQgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQVAvUDJQX0dPIGludGVyZmFjZS5cXG44OTcxOlxcdCAqL1xcbjg5NzI6XFx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbjg5NzM6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjg5NzQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG44OTc1OlxcdHtcXG44OTc2OlxcdFxcdHN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTtcXG44OTc3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICp2O1xcbjg5Nzg6XFx0XFx0aW50IHJldDtcXG44OTc5OlxcdFxcbjg5ODA6XFx0XFx0aWYgKCF2bGFuYXR0cilcXG44OTgxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjg5ODI6XFx0XFxuODk4MzpcXHRcXHR2ID0gZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KGluZm8pLCBubGFfZ2V0X3UzMih2bGFuYXR0cikpO1xcbjg5ODQ6XFx0XFx0aWYgKCF2KVxcbjg5ODU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuODk4NjpcXHRcXG44OTg3OlxcdFxcdGlmICghdi1cXHUwMDNlaWVlZTgwMjExX3B0ciB8fCB2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSAhPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpIHtcXG44OTg4OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuODk4OTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjg5OTA6XFx0XFx0fVxcbjg5OTE6XFx0XFxuODk5MjpcXHRcXHRpZiAodi1cXHUwMDNlaWVlZTgwMjExX3B0ci1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gXFx1MDAyNlxcdTAwMjZcXG44OTkzOlxcdFxcdCAgICB2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgXFx1MDAyNlxcdTAwMjZcXG44OTk0OlxcdFxcdCAgICB2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB7XFxuODk5NTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjg5OTY6XFx0XFx0XFx0Z290byBlcnJvcjtcXG44OTk3OlxcdFxcdH1cXG44OTk4OlxcdFxcbjg5OTk6XFx0XFx0aWYgKCFuZXRpZl9ydW5uaW5nKHYpKSB7XFxuOTAwMDpcXHRcXHRcXHRyZXQgPSAtRU5FVERPV047XFxuOTAwMTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjkwMDI6XFx0XFx0fVxcbjkwMDM6XFx0XFxuOTAwNDpcXHRcXHQvKiBDaGVjayBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlICovXFxuOTAwNTpcXHRcXHRpZiAoIWRldiB8fCAhZXRoZXJfYWRkcl9lcXVhbCh2LVxcdTAwM2VkZXZfYWRkciwgZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG45MDA2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuOTAwNzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjkwMDg6XFx0XFx0fVxcbjkwMDk6XFx0XFxuOTAxMDpcXHRcXHRyZXR1cm4gdjtcXG45MDExOlxcdCBlcnJvcjpcXG45MDEyOlxcdFxcdGRldl9wdXQodik7XFxuOTAxMzpcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbjkwMTQ6XFx0fVxcbjkwMTU6XFx0XFxuOTAxNjpcXHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX3dtZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbjkwMTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcXG45MDE4OlxcdHtcXG45MDE5OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfU1RBX1dNRV9NQVggKyAxXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuOTU0NjY3OTMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwODIyMjUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgRGV2aWNlIENvbnRleHQgaW4gbmw4MDIxMS5jKipcblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCBhZ2Fpbi4gSSB3YW50IHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGhvdyB0aGUgYGRldmAgdmFyaWFibGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBJJ2xsIGJlIGZvY3VzaW5nIG9uIGxpbmVzIDkyODUtOTMyMCBhbmQgOTU5MC05NjIwLiBUaGlzIHNob3VsZCBjbGFyaWZ5IGhvdyB0aGUgZGV2aWNlIGNvbnRleHQgaXMgZXN0YWJsaXNoZWQgYW5kIHVzZWQgd2hlbiBzZXR0aW5nIHVwIG9yIG1vZGlmeWluZyBzdGF0aW9uIGNvbmZpZ3VyYXRpb25zIHZpYSBubDgwMjExLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCB0byBkZWJ1ZyBhIHBvdGVudGlhbCBpc3N1ZSwgb3IgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIG5ldyBzdGF0aW9uIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTozNC4yNjI4OTQxMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTI4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTI4NTpcXHRcXHR9XFxuOTI4NjpcXHRcXG45Mjg3OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKVxcbjkyODg6XFx0XFx0XFx0cGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID1cXG45Mjg5OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pO1xcbjkyOTA6XFx0XFxuOTI5MTpcXHRcXHRpZiAocGFyYW1zLmFpcnRpbWVfd2VpZ2h0IFxcdTAwMjZcXHUwMDI2XFxuOTI5MjpcXHRcXHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG45MjkzOlxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSlcXG45Mjk0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45Mjk1OlxcdFxcbjkyOTY6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9zdGFfdHhwb3dlcl9zZXR0aW5nKGluZm8sXFxuOTI5NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cixcXG45Mjk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYXJhbXMubGlua19zdGFfcGFyYW1zLnR4cHdyX3NldCk7XFxuOTI5OTpcXHRcXHRpZiAoZXJyKVxcbjkzMDA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzAxOlxcdFxcbjkzMDI6XFx0XFx0LyogSW5jbHVkZSBwYXJhbWV0ZXJzIGZvciBURExTIHBlZXIgKHdpbGwgY2hlY2sgbGF0ZXIpICovXFxuOTMwMzpcXHRcXHRlcnIgPSBubDgwMjExX3NldF9zdGF0aW9uX3RkbHMoaW5mbywgXFx1MDAyNnBhcmFtcyk7XFxuOTMwNDpcXHRcXHRpZiAoZXJyKVxcbjkzMDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzA2OlxcdFxcbjkzMDc6XFx0XFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xcbjkzMDg6XFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuOTMwOTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XFxuOTMxMDpcXHRcXG45MzExOlxcdFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxuOTMxMjpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbjkzMTM6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbjkzMTQ6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XFxuOTMxNTpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XFxuOTMxNjpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuOTMxNzpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxcbjkzMTg6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbjkzMTk6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuOTMyMDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxcbjkzMjE6XFx0XFx0XFx0YnJlYWs7XFxuOTMyMjpcXHRcXHRkZWZhdWx0OlxcbjkzMjM6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuOTMyNDpcXHRcXHRcXHRnb3RvIG91dF9wdXRfdmxhbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzQuMjY0NTIwNjA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk3ODgwOTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIGBkZXZgIGluIGBubDgwMjExX3NldF9zdGF0aW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBgZGV2YCB2YXJpYWJsZSBjb21lcyBmcm9tIHdpdGhpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgb3IgbW9kaWZ5aW5nIHNvbWUgd2lyZWxlc3MgYmVoYXZpb3IgSSdtIHdvcmtpbmcgd2l0aC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgc3RhY2sgb3IgY29kZSBmbG93IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGBkZXZgIGlzIGluaXRpYWxpemVkIG9yIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24uIEknbSBhc3N1bWluZyBpdCdzIGEgcG9pbnRlciB0byBhIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgcHJvYmFibHkgYSBgc3RydWN0IG5ldF9kZXZpY2UgKmAsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgYmVpbmcgdXNlZC4gSXMgaXQgYmVpbmcgcGFzc2VkIGRpcmVjdGx5IGZyb20gYSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24sIHBlcmhhcHMgYGNmZzgwMjExYCBvciBzb21lIG90aGVyIG5ldGxpbmsgaGFuZGxlcj8gT3IgaXMgaXQgcG9zc2libHkgYmVpbmcgbG9va2VkIHVwIGJhc2VkIG9uIHNvbWUgb3RoZXIgaWRlbnRpZmllciB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZXMgdG8gZmluZCB3aGVyZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgaXMgY2FsbGVkLCBhbmQgdGhlbiB3b3JrIG15IHdheSBiYWNrd2FyZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFyZ3VtZW50cyBhbmQgYW55IGludGVybWVkaWF0ZSBzdGVwcyB0aGF0IG1pZ2h0IGludm9sdmUgZGV2aWNlIGxvb2t1cCBvciBpbml0aWFsaXphdGlvbi4gSG9wZWZ1bGx5LCBpdCdzIG5vdCBidXJpZWQgdG9vIGRlZXAgaW4gc29tZSBtYWNyb3Mgb3IgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYy4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXRfZGV2aWNlYCBhbmQgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyB1dGlsaXplZCB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2suIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzcuMjQzMzMxNDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkxODA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkxODE6XFx0XFxuOTE4MjpcXHRcXHQvKlxcbjkxODM6XFx0XFx0ICogQUlEIGFuZCBsaXN0ZW5faW50ZXJ2YWwgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHVuYXNzb2NpYXRlZFxcbjkxODQ6XFx0XFx0ICogc3RhdGlvbi4gSW5jbHVkZSB0aGVzZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIHdpbGwgY2hlY2sgdGhlbSBpblxcbjkxODU6XFx0XFx0ICogY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2UoKS5cXG45MTg2OlxcdFxcdCAqL1xcbjkxODc6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSlcXG45MTg4OlxcdFxcdFxcdHBhcmFtcy5haWQgPSBubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pO1xcbjkxODk6XFx0XFxuOTE5MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKVxcbjkxOTE6XFx0XFx0XFx0cGFyYW1zLnZsYW5faWQgPSBubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkxBTl9JRF0pO1xcbjkxOTI6XFx0XFxuOTE5MzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKVxcbjkxOTQ6XFx0XFx0XFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9XFxuOTE5NTpcXHRcXHRcXHQgICAgIG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSk7XFxuOTE5NjpcXHRcXHRlbHNlXFxuOTE5NzpcXHRcXHRcXHRwYXJhbXMubGlzdGVuX2ludGVydmFsID0gLTE7XFxuOTE5ODpcXHRcXG45MTk5OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRfUDJQX1BTXSlcXG45MjAwOlxcdFxcdFxcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9XFxuOTIwMTpcXHRcXHRcXHRcXHRubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVF9QMlBfUFNdKTtcXG45MjAyOlxcdFxcdGVsc2VcXG45MjAzOlxcdFxcdFxcdHBhcmFtcy5zdXBwb3J0X3AycF9wcyA9IC0xO1xcbjkyMDQ6XFx0XFxuOTIwNTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKVxcbjkyMDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIwNzpcXHRcXG45MjA4OlxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA9XFxuOTIwOTpcXHRcXHRcXHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuOTIxMDpcXHRcXG45MjExOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XFxuOTIxMjpcXHRcXHRcXHQvKiBJZiBNTERfQUREUiBhdHRyaWJ1dGUgaXMgc2V0IHRoZW4gdGhpcyBpcyBhbiBNTEQgc3RhdGlvblxcbjkyMTM6XFx0XFx0XFx0ICogYW5kIHRoZSBNTERfQUREUiBhdHRyaWJ1dGUgaG9sZHMgdGhlIE1MRCBhZGRyZXNzIGFuZCB0aGVcXG45MjE0OlxcdFxcdFxcdCAqIE1BQyBhdHRyaWJ1dGUgaG9sZHMgZm9yIHRoZSBMSU5LIGFkZHJlc3MuXFxuOTIxNTpcXHRcXHRcXHQgKiBJbiB0aGF0IGNhc2UsIHRoZSBsaW5rX2lkIGlzIGFsc28gZXhwZWN0ZWQgdG8gYmUgdmFsaWQuXFxuOTIxNjpcXHRcXHRcXHQgKi9cXG45MjE3OlxcdFxcdFxcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXFx1MDAzYyAwKVxcbjkyMTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzcuMjQ0MzUxMTE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjMwMzY2MjE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBmb2N1c2luZyBvbiB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgdXBvbiBzZWVpbmcgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGBubDgwMjExX3NldF9zdGF0aW9uYDpcblxuKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIG5sODAyMTFfc2V0X3N0YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGBubDgwMjExX3NldF9zdGF0aW9uYOKApiByaWdodCwgdGhpcyBpcyB3aGVyZSB3ZSBiZWdpbiB0byBjb25maWd1cmUgc3RhdGlvbiBwYXJhbWV0ZXJzIHRocm91Z2ggdGhlIG5sODAyMTEgaW50ZXJmYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBjb250ZXh0IGhlcmUuIFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHMgYmVpbmcgc2V0PyBXaGF0IGtpbmQgb2YgY29udHJvbCBmbG93IGFtIEkgbG9va2luZyBhdD8gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGVuY291bnRlcmVkIGF0IHRoaXMgZW50cnkgcG9pbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBhbnkgcHJlbGltaW5hcnkgY2hlY2tzIGFuZCBzYW5pdHkgdmFsaWRhdGlvbnMgdGhhdCBtYXkgdGFrZSBwbGFjZSBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGZ1bmN0aW9uJ3MgbG9naWMuIEkgYW50aWNpcGF0ZSBzb21lIHNpZ25pZmljYW50IGludGVyYWN0aW9uIHdpdGggdGhlIHdpcmVsZXNzIGRldmljZSdzIGRyaXZlciwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBuZXRsaW5rIG1lc3NhZ2UgaXMgcGFyc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIHNvbWV0aGluZyB0aGUgZHJpdmVyIGNhbiB3b3JrIHdpdGguIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjQzLjU0ODAxNTU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzk5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MTUwOlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tpZHhdKVxcbjkxNTE6XFx0XFx0XFx0XFx0XFx0dHhwd3ItXFx1MDAzZXBvd2VyID0gbmxhX2dldF9zMTYoaW5mby1cXHUwMDNlYXR0cnNbaWR4XSk7XFxuOTE1MjpcXHRcXHRcXHRcXHRlbHNlXFxuOTE1MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTU0OlxcdFxcdFxcdH1cXG45MTU1OlxcdFxcbjkxNTY6XFx0XFx0XFx0KnR4cHdyX3NldCA9IHRydWU7XFxuOTE1NzpcXHRcXHR9IGVsc2Uge1xcbjkxNTg6XFx0XFx0XFx0KnR4cHdyX3NldCA9IGZhbHNlO1xcbjkxNTk6XFx0XFx0fVxcbjkxNjA6XFx0XFxuOTE2MTpcXHRcXHRyZXR1cm4gMDtcXG45MTYyOlxcdH1cXG45MTYzOlxcdFxcbjkxNjQ6XFx0c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuOTE2NTpcXHR7XFxuOTE2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG45MTY3OlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG45MTY4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVxcdTAwM2VuZXRkZXY7XFxuOTE2OTpcXHRcXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcXG45MTcwOlxcdFxcdHU4ICptYWNfYWRkcjtcXG45MTcxOlxcdFxcdGludCBlcnI7XFxuOTE3MjpcXHRcXG45MTczOlxcdFxcdG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XFxuOTE3NDpcXHRcXG45MTc1OlxcdFxcdGlmICghZGV2IFxcdTAwMjZcXHUwMDI2IHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gXFx1MDAyNlxcdTAwMjZcXG45MTc2OlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuOTE3NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTc4OlxcdFxcbjkxNzk6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV9zdGF0aW9uKVxcbjkxODA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkxODE6XFx0XFxuOTE4MjpcXHRcXHQvKlxcbjkxODM6XFx0XFx0ICogQUlEIGFuZCBsaXN0ZW5faW50ZXJ2YWwgcHJvcGVydGllcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHVuYXNzb2NpYXRlZFxcbjkxODQ6XFx0XFx0ICogc3RhdGlvbi4gSW5jbHVkZSB0aGVzZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIHdpbGwgY2hlY2sgdGhlbSBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo0My41NTA4NTkxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODU1OTE0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBgZGV2YCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGdvdGNoYSB3aXRoIHRoZSBgZGV2YCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBgZGV2YCBjb3VsZCBiZSBhIE5VTEwgcG9pbnRlciB1bmRlciB0d28gc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgd2Rldi1cdTAwM2VpZnR5cGVgIGlzIGBOTDgwMjExX0lGVFlQRV9OQU5gIG9yIGlmIGl0J3MgYE5BTl9EQVRBYC4gVGhpcyBpcyBhIHByZXR0eSBpbXBvcnRhbnQgZGlzdGluY3Rpb24gdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGRvd25zdHJlYW0gY2hlY2tzIGFyZSBnb2luZyB0byBuZWVkIHRvIGFjY29tbW9kYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBgZGV2YCBiZWluZyBOVUxMIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBsZXQncyBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgYGdldF92bGFuYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIGJsb2NrOlxuXG5gYGBjXG5cdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cblx0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuXHRcdHJldCA9IC1FSU5WQUw7XG5cdFx0Z290byBlcnJvcjtcblx0fVxuYGBgXG5cblRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgVkxBTiBpbnRlcmZhY2UgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlLiBUaGUgdGVzdCBmb3IgYCFkZXZgIGlzIHRoZSBjcnVjaWFsIHBpZWNlIGhlcmUsIGJlY2F1c2UgaXQncyB0aGUgcG90ZW50aWFsIE5VTEwgY2hlY2sgSSB3YXMganVzdCBjb25zaWRlcmluZy4gSWYgYGRldmAgaXMgTlVMTCwgZHVlIHRvIHRoZSBjb25kaXRpb25zIEkgbm90ZWQgYWJvdmUsIHRoZSBjaGVjayB3aWxsIHBhc3MgYW5kIGxlYWQgdG8gYC1FSU5WQUxgLiBUaGlzIG1ha2VzIHNlbnNlLCBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLiBJZiB3ZSAqZG9uJ3QqIGhhdmUgYSB2YWxpZCAnZGV2JyB3ZSBzaG91bGRuJ3QgY29udGludWUuXG5cblNvLCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIGBnZXRfdmxhbmAgZnVuY3Rpb24sIHdlIG5lZWQgdG8gYmUgdmVyeSBzdXJlIHRoYXQgYGRldmAgaXMgdmFsaWQgYmVmb3JlIHdlIGV2ZW4gZ2V0IHRvIHRoZSBgZXRoZXJfYWRkcl9lcXVhbGAgY2FsbC4gT3RoZXJ3aXNlLCB3ZSBjb3VsZCBiZSBydW5uaW5nIGludG8gc29tZSBuYXN0eSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYWxsIG9mIHRoaXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGluIHRoYXQgYXJlYSBub3csIGFzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWTEFOIGludGVyZmFjZSBpcyBzdGFydGluZyB0byBiZSBjbGVhcmVyIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjQ2LjQwNjc3NjcyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTMwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5NTMwOlxcdFxcdC8qIEhUL1ZIVCByZXF1aXJlcyBRb1MsIGJ1dCBpZiB3ZSBkb24ndCBoYXZlIHRoYXQganVzdCBpZ25vcmUgSFQvVkhUXFxuOTUzMTpcXHRcXHQgKiBhcyB1c2Vyc3BhY2UgbWlnaHQganVzdCBwYXNzIHRocm91Z2ggdGhlIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBJRXNcXG45NTMyOlxcdFxcdCAqIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBlbmZvcmNpbmcgdGhpcyByZXN0cmljdGlvbiBhbmQgcmV0dXJuaW5nIGFuXFxuOTUzMzpcXHRcXHQgKiBlcnJvciBpbiB0aGlzIGNhc2UuXFxuOTUzNDpcXHRcXHQgKi9cXG45NTM1OlxcdFxcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFxcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSkpIHtcXG45NTM2OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaHRfY2FwYSA9IE5VTEw7XFxuOTUzNzpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLnZodF9jYXBhID0gTlVMTDtcXG45NTM4OlxcdFxcbjk1Mzk6XFx0XFx0XFx0LyogSEUsIEVIVCBhbmQgVUhSIHJlcXVpcmUgV01FICovXFxuOTU0MDpcXHRcXHRcXHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhX2xlbiB8fFxcbjk1NDE6XFx0XFx0XFx0ICAgIHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfNmdoel9jYXBhIHx8XFxuOTU0MjpcXHRcXHRcXHQgICAgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYV9sZW4gfHxcXG45NTQzOlxcdFxcdFxcdCAgICBwYXJhbXMubGlua19zdGFfcGFyYW1zLnVocl9jYXBhX2xlbilcXG45NTQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjk1NDU6XFx0XFx0fVxcbjk1NDY6XFx0XFxuOTU0NzpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbjk1NDg6XFx0XFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjk1NDk6XFx0XFx0XFx0aWYgKHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXFx1MDAyNiBTVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEKVxcbjk1NTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTU1MTpcXHRcXHRcXHQvKiBOQU4gTk1JIHN0YXRpb24gbXVzdCBiZSBhZGRlZCBpbiBhc3NvY2lhdGVkIG9yIGF1dGhvcml6ZWQgc3RhdGUgKi9cXG45NTUyOlxcdFxcdFxcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFxcdTAwMjYgKEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpIHxcXG45NTUzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpKSkpXFxuOTU1NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45NTU1OlxcdFxcdH1cXG45NTU2OlxcdFxcbjk1NTc6XFx0XFx0LyogRW5zdXJlIHRoYXQgSFQvVkhUIGNhcGFiaWxpdGllcyBhcmUgbm90IHNldCBmb3IgNiBHSHogSEUgU1RBICovXFxuOTU1ODpcXHRcXHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV82Z2h6X2NhcGEgXFx1MDAyNlxcdTAwMjZcXG45NTU5OlxcdFxcdCAgICAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5odF9jYXBhIHx8IHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEpKVxcbjk1NjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTU2MTpcXHRcXG45NTYyOlxcdFxcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXFxuOTU2MzpcXHRcXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOCk7XFxuOTU2NDpcXHRcXG45NTY1OlxcdFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxuOTU2NjpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbjk1Njc6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbjk1Njg6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XFxuOTU2OTpcXHRcXHRcXHQvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovXFxuOTU3MDpcXHRcXHRcXHRpZiAoIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfQVBfVUFQU0QpIHx8XFxuOTU3MTpcXHRcXHRcXHQgICAgIShwYXJhbXMuc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxcbjk1NzI6XFx0XFx0XFx0XFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayBcXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcXG45NTczOlxcdFxcbjk1NzQ6XFx0XFx0XFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6NDYuNDA3NjA1MzI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2NTQ1NTkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIHN0YXJ0IG9mIGBubDgwMjExX25ld19zdGF0aW9uYCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpdmluZyBpbnRvIGBubDgwMjExX25ld19zdGF0aW9uYCDigJMgSW5pdGlhbCBUaG91Z2h0cyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSAqYmVnaW5zKiB3aGVuIGEgbmV3IHN0YXRpb24gY29ubmVjdHMg4oCTIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsJ3Mgd2lyZWxlc3Mgc3Vic3lzdGVtIGdldHMgaXRzIGhvb2tzIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBpbml0aWFsaXplZCBhbmQgaG93IHRoaXMgY29ubmVjdGlvbiBpcyBiZWluZyByZXByZXNlbnRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBjb25jZXJucyBhcmUgYWx3YXlzIGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG1ha2luZyBzdXJlIHRoaXMgbmV3IHN0YXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlvbidzIGNvbmZpZ3VyYXRpb24gZGF0YSwgbGlrZSBpdHMgTUFDIGFkZHJlc3MsIGFzc29jaWF0ZWQgQlNTSUQsIGFuZCB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24sIGlzIGJlaW5nIHBhc3NlZCBpbi4gQXJlIHdlIHZhbGlkYXRpbmcgdGhpcyBkYXRhIHByb3Blcmx5PyBJcyB0aGVyZSBhbnkgb3Bwb3J0dW5pdHkgZm9yIGluamVjdGlvbiBvZiBtYWxpY2lvdXMgZGF0YSBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGZvciBjaGVja3Mgb24gbGVuZ3RocywgdmFsaWQgTUFDIGFkZHJlc3NlcywgYW5kIGFueSBvdGhlciBzYW5pdHkgY2hlY2tzIHRoZSBkZXZlbG9wZXJzIGhhdmUgaW1wbGVtZW50ZWQuXG5cbk5leHQsIEknbSBnb2luZyB0byBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbmV3IHN0YXRpb24gaXMgYmVpbmcgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gSG93IGFyZSB0aGV5IGxpbmtlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0/IElzIGl0IGEgc2luZ2xlIGFsbG9jYXRpb24sIG9yIGFyZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBJJ2xsIGJlIGtlZXBpbmcgYSBrZWVuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyDigJMgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBNZW1vcnkgbWFuYWdlbWVudCB3aWxsIGJlIGNyaXRpY2FsIOKAkyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBhbmQgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBhbGxvY2F0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHRoYXQgZGVhbGxvY2F0aW9uIGhhcHBlbnMgaW4gdGhlIGNvcnJlY3Qgc2l0dWF0aW9ucywgYXZvaWRpbmcgbWVtb3J5IGxlYWtzLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBldmVudCBvciBjYWxsYmFjayByZWdpc3RyYXRpb24uIERvZXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyIG90aGVyIGFjdGlvbnMgb3Igc2V0IHVwIGZ1dHVyZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3RhdGlvbj8gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdGF0aW9uJ3Mgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhhdCBpbmZvcm1hdGlvbiBpcyBtYWRlIGFjY2Vzc2libGUgdG8gb3RoZXIgc3Vic3lzdGVtcywgbGlrZSB0aGUgbmV0d29ya2luZyBzdGFjayBvciBhbnkgdXNlcnNwYWNlIG1vbml0b3JpbmcgdG9vbHMuIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVuc3VyZSBhbGwgaW5pdGlhbGlzYXRpb24gcm91dGluZXMgYXJlIGNhbGxlZCBhbmQgdGhhdCB0aGUgc3RydWN0dXJlIG9mIHRoZSBzdGF0aW9uIGlzIGluaXRpYWxpemVkIHRvIGEgdmFsaWQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDEzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo1MS4wNjIxNjc1OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTQ1MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKSB7XFxuOTQ1MTpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlX2NhcGEgPVxcbjk0NTI6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKTtcXG45NDUzOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYV9sZW4gPVxcbjk0NTQ6XFx0XFx0XFx0XFx0bmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xcbjk0NTU6XFx0XFxuOTQ1NjpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VIVF9DQVBBQklMSVRZXSkge1xcbjk0NTc6XFx0XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSA9XFxuOTQ1ODpcXHRcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKTtcXG45NDU5OlxcdFxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuID1cXG45NDYwOlxcdFxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VIVF9DQVBBQklMSVRZXSk7XFxuOTQ2MTpcXHRcXG45NDYyOlxcdFxcdFxcdFxcdGlmICghaWVlZTgwMjExX2VodF9jYXBhX3NpemVfb2soKGNvbnN0IHU4ICopcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhLFxcbjk0NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0KGNvbnN0IHU4ICopcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYSxcXG45NDY0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGFfbGVuLFxcbjk0NjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UpKVxcbjk0NjY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTQ2NzpcXHRcXHRcXHR9XFxuOTQ2ODpcXHRcXHR9XFxuOTQ2OTpcXHRcXG45NDcwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKSB7XFxuOTQ3MTpcXHRcXHRcXHRpZiAoIXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuZWh0X2NhcGEpXFxuOTQ3MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45NDczOlxcdFxcbjk0NzQ6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy51aHJfY2FwYSA9XFxuOTQ3NTpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVUhSX0NBUEFCSUxJVFldKTtcXG45NDc2OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudWhyX2NhcGFfbGVuID1cXG45NDc3OlxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1VIUl9DQVBBQklMSVRZXSk7XFxuOTQ3ODpcXHRcXHR9XFxuOTQ3OTpcXHRcXG45NDgwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKSB7XFxuOTQ4MTpcXHRcXHRcXHRwYXJhbXMuZW1sX2NhcF9wcmVzZW50ID0gdHJ1ZTtcXG45NDgyOlxcdFxcdFxcdHBhcmFtcy5lbWxfY2FwID1cXG45NDgzOlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xcbjk0ODQ6XFx0XFx0fVxcbjk0ODU6XFx0XFxuOTQ4NjpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pXFxuOTQ4NzpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSA9XFxuOTQ4ODpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSk7XFxuOTQ4OTpcXHRcXG45NDkwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUzFHX0NBUEFCSUxJVFldKVxcbjk0OTE6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5zMWdfY2FwYSA9XFxuOTQ5MjpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUzFHX0NBUEFCSUxJVFldKTtcXG45NDkzOlxcdFxcbjk0OTQ6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9PUE1PREVfTk9USUZdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjUxLjA2Mjk4ODYyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjM1MjE1Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBJJ20gZGVhbGluZyB3aXRoIGBubDgwMjExX25ld19zdGF0aW9uYCBhbmQgSSdtIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBGdW5jdGlvbidzIEhpc3RvcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgbGluZWFnZSwgdG8gc2VlIHRoZSBjYWxscyB0aGF0IGxlYWQgdXAgdG8gaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMgcGFyYW1vdW50IGhlcmUuIFNvIEnigJltIG1lbnRhbGx5IHNjYW5uaW5nIGJhY2sgdGhyb3VnaCB0aGUgZWFybGllciBsaW5lcywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZC4uLiB3aGF0IHRyaWdnZXJzIHRoaXMgYG5ld19zdGF0aW9uYCBldmVudD8gSXMgaXQgYSBiZWFjb24sIGEgcHJvYmUgcmVxdWVzdCwgYSBtYW5hZ2VtZW50IGZyYW1lPyBLbm93aW5nIHRoYXQgd2lsbCBkZWZpbmUgdGhlIHBvdGVudGlhbCBzaWduaWZpY2FuY2Ugb2YgYW55IGlzc3VlcyBJIGZpbmQuIEknbSBlc3NlbnRpYWxseSByZXZlcnNlIGVuZ2luZWVyaW5nIHRoZSBleGVjdXRpb24gcGF0aCwgbWVudGFsbHkgYnVpbGRpbmcgYSBtZW50YWwgc3RhY2sgb2YgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2VkaW5nIGNvbmRpdGlvbnMuIEknbSBleHBlY3Rpbmcgc29tZSBjbHVlcyB0byBzdXJmYWNlIHNvb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDg3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo1NS4yOTgyMDgxMTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTM2NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTM2NTpcXHRcXG45MzY2OlxcdFxcdFxcdFxcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cXG45MzY3OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcXG45MzY4OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XFxuOTM2OTpcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxcbjkzNzA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM3MTpcXHRcXHRcXHR9XFxuOTM3MjpcXHRcXHR9IGVsc2Uge1xcbjkzNzM6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXFxuOTM3NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45Mzc1OlxcdFxcbjkzNzY6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXFxuOTM3NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45Mzc4OlxcdFxcbjkzNzk6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXFx1MDAyNlxcdTAwMjZcXG45MzgwOlxcdFxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcXG45MzgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzODI6XFx0XFx0fVxcbjkzODM6XFx0XFxuOTM4NDpcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxcbjkzODU6XFx0XFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcbjkzODY6XFx0XFxuOTM4NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MRF9BRERSXSkge1xcbjkzODg6XFx0XFx0XFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcXG45Mzg5OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubWxkX21hYyA9IG1hY19hZGRyO1xcbjkzOTA6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYyA9XFxuOTM5MTpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuOTM5MjpcXHRcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX21hYykpXFxuOTM5MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45Mzk0OlxcdFxcdH0gZWxzZSB7XFxuOTM5NTpcXHRcXHRcXHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG45Mzk2OlxcdFxcdH1cXG45Mzk3OlxcdFxcbjkzOTg6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSkge1xcbjkzOTk6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5zdXBwb3J0ZWRfcmF0ZXMgPVxcbjk0MDA6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKTtcXG45NDAxOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuc3VwcG9ydGVkX3JhdGVzX2xlbiA9XFxuOTQwMjpcXHRcXHRcXHRcXHRubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7XFxuOTQwMzpcXHRcXHR9XFxuOTQwNDpcXHRcXG45NDA1OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXFxuOTQwNjpcXHRcXHRcXHRwYXJhbXMubGlzdGVuX2ludGVydmFsID1cXG45NDA3OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSk7XFxuOTQwODpcXHRcXG45NDA5OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkxBTl9JRF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjU1LjI5OTAxMDA4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDg2MjY1MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBiZWdpbm5pbmcgb2YgYG5sODAyMTFfbmV3X3N0YXRpb25gLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24gYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQncyBnb2luZyBvbiBoZXJlLiBGaXJzdCB0aGluZyBJJ20gZXhwZWN0aW5nIGlzIHRoZSB1c3VhbCBzZXR1cDogc29tZSBwcmVsaW1pbmFyeSBjaGVja3MgdG8gbWFrZSBzdXJlIHdlJ3JlIGV2ZW4gYWxsb3dlZCB0byBkbyB0aGlzIOKAkyBhcmUgd2Ugcm9vdD8gSXMgdGhpcyBuZXRsaW5rIG1lc3NhZ2Ugd2VsbC1mb3JtZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbW90ZWx5IHNhbmU/IEkgbmVlZCB0byB2ZXJpZnkgYWxsIHRoZSBpbnB1dHM6IHRoZSBpbnRlcmZhY2UgKG9idmlvdXNseSEpLCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5ldyBzdGF0aW9uLCBhbmQgYW55IGluaXRpYWwgcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9uIGhpbnRzLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIG9wZXJhdGlvbjsgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBpcyBhIGJpZyBkZWFsIGluIHRoZSA4MDIuMTEgd29ybGQsIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayBpZiBhbGwgdGhlIHBhcmFtZXRlcnMgYXJlIGFjY2VwdGFibGUsIGJlY2F1c2UgdGhlIHdyb25nIHZhbHVlcyBjYW4gZGFtYWdlIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gV2UncmUgY3JlYXRpbmcgYSBuZXcgc3RhdGlvbiBlbnRyeSwgc28gd2UgbmVlZCBtZW1vcnkgZm9yIHRoYXQgZGF0YSBzdHJ1Y3R1cmUuIEl0J3MgbGlrZWx5IHdlJ2xsIGJlIGFsbG9jYXRpbmcgYSBuZXcgYGNmZzgwMjExX3N0YXRpb25gIHN0cnVjdHVyZSBvciBzaW1pbGFyLCBwcm9iYWJseSBsaW5raW5nIGl0IGludG8gc29tZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgYSBwZXItaW50ZXJmYWNlIGxpc3QuIFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiB0aGlzIG5ldyBzdGF0aW9uLiBOb3cgaXMgdGhlIHRpbWUgdG8gY2hlY2sgdGhlIHJlc291cmNlcyBhdmFpbGFibGUuIElzIHRoZXJlIG1lbW9yeSBhdmFpbGFibGU/XG5cbk9uY2Ugd2UgaGF2ZSBvdXIgbWVtb3J5LCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHNldHRpbmcgdXAgdGhlIHN0YXRpb24ncyBpbml0aWFsIHN0YXRlLiBBcmUgd2UgdXNpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGV2ZXJ5dGhpbmcgb3IsIG1vcmUgbGlrZWx5LCBhcmUgd2UgZ3JhYmJpbmcgc29tZSBvZiB0aGUgcGFyYW1ldGVycyBmcm9tIHRoZSBuZXRsaW5rIG1lc3NhZ2U/IFdlJ2xsIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGFkZHJlc3MsIGl0cyBjb25uZWN0aW9uIHN0YXRlIChhc3NvY2lhdGVkLCBhdXRoZW50aWNhdGVkLCBldGMuKSwgaXRzIGNhcGFiaWxpdGllcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSB2YWx1ZXMgYmVpbmcgc2V0IGFyZSB2YWxpZC4gQXJlIHdlIGNyZWF0aW5nIGEgc3RhdGlvbiBmb3IgYSBzdXBwb3J0ZWQgcmFkaW8/IElzIHRoaXMgYSBzdGFuZGFyZCBhc3NvY2lhdGlvbj9cblxuVGhlIHdob2xlIHByb2Nlc3MgcHJvYmFibHkgaW5jbHVkZXMgc29tZSBsb2NraW5nLiBDcmVhdGluZyBhIG5ldyBzdGF0aW9uIGlzIGEgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YXRlLiBJIGV4cGVjdCBhIG11dGV4IG9yIHJlYWQvd3JpdGUgbG9jayB3aWxsIGJlIGludm9sdmVkLCB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZSBuZXRsaW5rIHJlcXVlc3RzIGRvbid0IHN0b21wIG9uIGVhY2ggb3RoZXIgd2hpbGUgbWVzc2luZyB3aXRoIHRoZSBzYW1lIGhhcmR3YXJlIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBjYWxsYmFja3MgdG8gdGhlIGhhcmR3YXJlIGRyaXZlciBpbnZvbHZlZCBhdCB0aGlzIHN0YWdlIOKAkyB0ZWxsaW5nIHRoZSB3aXJlbGVzcyBjYXJkIHRoYXQgYSBuZXcgc3RhdGlvbiBpcyBjb21pbmcgb24gYm9hcmQuXG5cbkFuZCBmaW5hbGx5LCBvZiBjb3Vyc2UsIGF0IHRoZSBlbmQsIGlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCB0aGVyZSdsbCBiZSBzb21lIG5ldGxpbmsgcmVzcG9uc2UuIEVpdGhlciBhbiBBQ0sgdG8gc2F5LCBcIlllcCwgc3RhdGlvbiBjcmVhdGVkLFwiIG9yIHNvbWUga2luZCBvZiBlcnJvciBjb2RlIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nLiBXZSBhcmUgZXhwZXJ0cywgYW5kIHdlIGtub3cgaG93IHRvIGNoZWNrIHRoZSBjb2Rlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBleHBlY3QgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjU5LjM4NTI3OTI2MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTMzMDpcXHQgb3V0X3B1dF92bGFuOlxcbjkzMzE6XFx0XFx0ZGV2X3B1dChwYXJhbXMudmxhbik7XFxuOTMzMjpcXHRcXG45MzMzOlxcdFxcdHJldHVybiBlcnI7XFxuOTMzNDpcXHR9XFxuOTMzNTpcXHRcXG45MzM2OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjkzMzc6XFx0e1xcbjkzMzg6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuOTMzOTpcXHRcXHRpbnQgZXJyO1xcbjkzNDA6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjkzNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXFx1MDAzZW5ldGRldjtcXG45MzQyOlxcdFxcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xcbjkzNDM6XFx0XFx0dTggKm1hY19hZGRyID0gTlVMTDtcXG45MzQ0OlxcdFxcdHUzMiBhdXRoX2Fzc29jID0gQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkgfFxcbjkzNDU6XFx0XFx0XFx0XFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xcbjkzNDY6XFx0XFxuOTM0NzpcXHRcXHRtZW1zZXQoXFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xcbjkzNDg6XFx0XFxuOTM0OTpcXHRcXHRpZiAoIWRldiBcXHUwMDI2XFx1MDAyNiB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbjkzNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM1MTpcXHRcXG45MzUyOlxcdFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VhZGRfc3RhdGlvbilcXG45MzUzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45MzU0OlxcdFxcbjkzNTU6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG45MzU2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNTc6XFx0XFxuOTM1ODpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbjkzNTk6XFx0XFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkzNjA6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcXG45MzYxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNjI6XFx0XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkzNjM6XFx0XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX05NSV9NQUNdKVxcbjkzNjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM2NTpcXHRcXG45MzY2OlxcdFxcdFxcdFxcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cXG45MzY3OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcXG45MzY4OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XFxuOTM2OTpcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTo1OS4zODY5NzUzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAyMzUwNzg1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYDpcblxuKipEaXNzZWN0aW5nIG5sODAyMTEuYydzIENvcmUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDk1OTUtOTYyNSB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dCDigJMgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkIGluIHRoYXQgc2VjdGlvbj8gV2l0aG91dCBrbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpdCdzIGhhcmQgdG8gYmUgcHJlY2lzZSwgYnV0IGJhc2VkIG9uIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgSSdkIHdhZ2VyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5ldGxpbmsgbWVzc2FnZSBoYW5kbGVyLCBxdWl0ZSBwb3NzaWJseSByZWxhdGVkIHRvIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3Igc3RhdHVzIHVwZGF0ZXMuXG5cbk15IGd1dCB0ZWxscyBtZSB0aGlzIHNlZ21lbnQgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIE5MODAyMTEgYXR0cmlidXRlIG9yIGNvbW1hbmQuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgbmV0bGluayBtZXNzYWdlIHR5cGUgdGhpcyBzZWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCAoZS5nLiwgYE5MODAyMTFfQ01EX1NFVF9XSVBIWWAsIGBOTDgwMjExX0NNRF9HRVRfU1RBVElPTmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS5cblxuR2l2ZW4gdGhlIHJhbmdlIG9mIGxpbmVzLCBpdCBtaWdodCBiZSBwYXJzaW5nIHNvbWUgdXNlci1wcm92aWRlZCBpbnB1dCwgdmFsaWRhdGluZyBpdCwgYW5kIHRoZW4gcG9zc2libHkgaW52b2tpbmcgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiAobWF5YmUgaW4gdGhlIG1hYzgwMjExIHN0YWNrKSB0byBlZmZlY3QgYSBjaGFuZ2UgaW4gdGhlIHdpcmVsZXNzIGRldmljZSdzIHN0YXRlLiBJJ20ga2VlcGluZyBteSBleWUgb3V0IGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQXR0cmlidXRlIFBhcnNpbmc6KiogQXJlIHRoZXJlIGFueSBjYWxscyB0byBgbmxhX2dldF8qKClgIGZ1bmN0aW9ucyB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgbmV0bGluayBtZXNzYWdlPyBBcmUgd2UgZGVhbGluZyB3aXRoIGludGVnZXJzLCBzdHJpbmdzLCBuZXN0ZWQgYXR0cmlidXRlcz9cbiogICAqKlZhbGlkYXRpb246KiogV2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGUgaW5jb21pbmcgZGF0YT8gQXJlIHRoZXJlIHNhbml0eSBjaGVja3Mgb24gcmFuZ2VzLCBsZW5ndGhzLCBhbmQgdmFsaWQgdmFsdWVzP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGFyZSBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGhhbmRsZWQ/IEFyZSB0aGVyZSBlcnJvciBjb2RlcyBiZWluZyByZXR1cm5lZCB0byB0aGUgdXNlcj9cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gc3RvcmUgdGhlIHBhcnNlZCBkYXRhIChlLmcuLCBgY2ZnODAyMTFfd2lwaHlgLCBgaWVlZTgwMjExX3ZpZmAsIGV0Yy4pPyBBcmUgYW55IG9mIHRob3NlIHN0cnVjdHVyZXMgYmVpbmcgdXBkYXRlZD9cbiogICAqKkZ1bmN0aW9uIENhbGxzOioqIElzIHRoaXMgc2VjdGlvbiBhIHdyYXBwZXI/IFdoYXQgZnVuY3Rpb25zIGFyZSAqYWN0dWFsbHkqIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIHRvIGNoYW5nZSBzdGF0ZSBvciBjb25maWd1cmUgdGhlIGRldmljZT8gSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgYGNmZzgwMjExXypgIG9yIGBpZWVlODAyMTFfKmAgZnVuY3Rpb24gY2FsbHMuXG5cbkknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlc2UgbGluZXMgb2ZmZXIgbWUgYW55IGluc2lnaHQgaW50byByZWNlbnQgY2hhbmdlcywgYnVncywgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSBpdOKAmXMgcGFydCBvZiBhIG5ldyBmZWF0dXJlIGltcGxlbWVudGF0aW9uLCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBzZWN0aW9uIGlzIGRvaW5nLiBEZXBlbmRpbmcgb24gd2hhdCBpdCBpcywgaXQgY291bGQgYmUgYSBjbHVlIHRvd2FyZCBzb21lIHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDAwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjowOS42MjIwNTgxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU5NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTU5NTpcXHRcXHRcXHQgKiBhZGRlZCBhcyBhc3NvY2lhdGVkIGFueXdheSBzaW5jZSB0aGlzIHdhcyB0aGUgcmVxdWlyZWQgZHJpdmVyXFxuOTU5NjpcXHRcXHRcXHQgKiBiZWhhdmlvdXIgYmVmb3JlIE5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSB3YXNcXG45NTk3OlxcdFxcdFxcdCAqIGludHJvZHVjZWQuXFxuOTU5ODpcXHRcXHRcXHQgKiBJbiBvcmRlciB0byBub3QgYm90aGVyIGRyaXZlcnMgd2l0aCB0aGlzIHF1aXJrIGluIHRoZSBBUElcXG45NTk5OlxcdFxcdFxcdCAqIHNldCB0aGUgZmxhZ3MgaW4gYm90aCB0aGUgbWFzayBhbmQgc2V0IGZvciBuZXcgc3RhdGlvbnMgaW5cXG45NjAwOlxcdFxcdFxcdCAqIHRoaXMgY2FzZS5cXG45NjAxOlxcdFxcdFxcdCAqL1xcbjk2MDI6XFx0XFx0XFx0aWYgKCEocGFyYW1zLnN0YV9mbGFnc19tYXNrIFxcdTAwMjYgYXV0aF9hc3NvYykpIHtcXG45NjAzOlxcdFxcdFxcdFxcdHBhcmFtcy5zdGFfZmxhZ3NfbWFzayB8PSBhdXRoX2Fzc29jO1xcbjk2MDQ6XFx0XFx0XFx0XFx0cGFyYW1zLnN0YV9mbGFnc19zZXQgfD0gYXV0aF9hc3NvYztcXG45NjA1OlxcdFxcdFxcdH1cXG45NjA2OlxcdFxcbjk2MDc6XFx0XFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxuOTYwODpcXHRcXHRcXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYsIGRldik7XFxuOTYwOTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcXG45NjEwOlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcXG45NjExOlxcdFxcdFxcdGJyZWFrO1xcbjk2MTI6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbjk2MTM6XFx0XFx0XFx0LyogaWdub3JlIHVBUFNEIGRhdGEgKi9cXG45NjE0OlxcdFxcdFxcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXFx1MDAyNj0gflNUQVRJT05fUEFSQU1fQVBQTFlfVUFQU0Q7XFxuOTYxNTpcXHRcXG45NjE2OlxcdFxcdFxcdC8qIGFzc29jaWF0ZWQgaXMgZGlzYWxsb3dlZCAqL1xcbjk2MTc6XFx0XFx0XFx0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpKVxcbjk2MTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTYxOTpcXHRcXHRcXHQvKiBURExTIHBlZXJzIGNhbm5vdCBiZSBhZGRlZCAqL1xcbjk2MjA6XFx0XFx0XFx0aWYgKChwYXJhbXMuc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUikpIHx8XFxuOTYyMTpcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcXG45NjIyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjk2MjM6XFx0XFx0XFx0YnJlYWs7XFxuOTYyNDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuOTYyNTpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XFxuOTYyNjpcXHRcXHRcXHQvKiBpZ25vcmUgdUFQU0QgZGF0YSAqL1xcbjk2Mjc6XFx0XFx0XFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayBcXHUwMDI2PSB+U1RBVElPTl9QQVJBTV9BUFBMWV9VQVBTRDtcXG45NjI4OlxcdFxcbjk2Mjk6XFx0XFx0XFx0LyogdGhlc2UgYXJlIGRpc2FsbG93ZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6MDkuNjIyODg1MDUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTQ0NzUzNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBWTEFOIEludGVyZmFjZSBDaGVjayBpbiBubDgwMjExKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBnZXRfdmxhbmAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gdmVyaWZ5IGlmIGEgVkxBTiBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBUCBpbnRlcmZhY2UuIFNwZWNpZmljYWxseSwgaXQncyBjb21wYXJpbmcgdGhlIFZMQU4ncyBkZXZpY2UgYWRkcmVzcyAoYHYtXHUwMDNlZGV2X2FkZHJgKSB3aXRoIHRoZSBBUCdzIGRldmljZSBhZGRyZXNzIChgZGV2LVx1MDAzZWRldl9hZGRyYCksIGFuZCBpZiB0aGV5IGRvbid0IG1hdGNoLCBpdCByZXR1cm5zIGFuIGVycm9yIChgLUVJTlZBTGApLiBJdCBzZWVtcyB0aGUgYGRldmAgdmFyaWFibGUgaXMgcGFzc2VkIGludG8gdGhlIGBnZXRfdmxhbigpYCBjYWxsLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlIHRoYXQncyB3b3J0aCBmdXp6aW5nPyBMZXQncyBjb25zdWx0IHRoZSBndWlkZWxpbmVzLlxuXG5SZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZTogY2FuIGl0IGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgbmw4MDIxMWAsIHdoaWNoIGlzIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS4gSSBrbm93IFN5emthbGxlciBnZW5lcmF0ZXMgbmV0bGluayBtZXNzYWdlcyBleHRlbnNpdmVseSBmb3Igbmw4MDIxMS4gU3BlY2lmaWNhbGx5IHVzaW5nIGBzeXpfODAyMTFfam9pbl9pYnNzYCwgd2hpY2ggaXMgYSBuZXRsaW5rIHNvY2tldCBjb21tYW5kLiBBbHNvLCBgbWFjODAyMTFfaHdzaW1gIGNyZWF0ZXMgd2lwaHkvbmV0ZGV2IGluc3RhbmNlcyBmb3Igd2lyZWxlc3MuIFRoaXMgY29uZmlybXMgdGhhdCBubDgwMjExIGlzIHBlcmZlY3RseSByZWFjaGFibGUgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cblxuTm93LCBwb3NpdGl2ZSBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nOiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgdGhpcyBkZWZpbml0ZWx5IGRvZXMuIEl04oCZcyBjb3JlIG5ldHdvcmtpbmcuIEl0IGFsc28gY291bnRzIGFzIGEgZGVmZW5zaXZlIGNoZWNrICh0aGUgVkxBTiBpbnRlcmZhY2UgY2hlY2sgaXRzZWxmKS4gQWxzbywgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gdHJpZ2dlciBpdCB2aWEgYSBuZXRsaW5rIHNvY2tldCBjb21tYW5kLlxuXG5OZWdhdGl2ZSBjcml0ZXJpYTogVGhpcyBpc24ndCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgaXMgY2xlYXJseSBhY2Nlc3NpYmxlIHZpYSB0aGUgbmV0bGluayBzdWJzeXN0ZW0uIFNvIHRoYXQncyBnb29kLlxuXG5TbywgKkkqIGNvbmNsdWRlOiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWdzIGZvciBgbmw4MDIxMS5jYCB0byBlbnN1cmUgaXQncyBjb21waWxlZCwgYW5kIHRoZW4gSSdtIHNldCEgVGltZSB0byBzZWFyY2ggdGhvc2UgTWFrZWZpbGVzIGFuZCBLY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjoyOS41Njc2NDI3NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTUzMTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzA3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjM5OlxcdGJvb2wgXFxcIm5sODAyMTEgdGVzdG1vZGUgY29tbWFuZFxcXCJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy00MC1cXHRoZWxwXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NDE6XFx0ICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTQyLVxcdCAgZmFjdG9yeSBjYWxpYnJhdGlvbiBvciB2YWxpZGF0aW9uIHRvb2xzIGZvciB3aXJlbGVzcyBjaGlwcy5cXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTgtXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjk6Y2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTEwLWNmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cXG4tLVxcbm5ldC93aXJlbGVzcy9hcC5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9jZmc4MDIxMS5oXFx1MDAzZVxcbm5ldC93aXJlbGVzcy9hcC5jOjk6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvYXAuYy0xMC0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2FwLmM9MTQ9c3RhdGljIGludCBfX19jZmc4MDIxMV9zdG9wX2FwKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9hcC5jLTQxLVxcdFxcdGlmIChub3RpZnkpXFxubmV0L3dpcmVsZXNzL2FwLmM6NDI6XFx0XFx0XFx0bmw4MDIxMV9zZW5kX2FwX3N0b3BwZWQod2RldiwgbGlua19pZCk7XFxubmV0L3dpcmVsZXNzL2FwLmMtNDMtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTIzPXZvaWQgY2ZnODAyMTFfY2hhbmRlZl9jcmVhdGUoc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXFxubmV0L3dpcmVsZXNzL2NoYW4uYzoyNTpcXHRcXHRcXHQgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlKVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjYte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNzg9c3RhdGljIGJvb2wgY2ZnODAyMTFfZWRtZ19jaGFuZGVmX3ZhbGlkKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZilcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMjYyLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MjYzOmludCBubDgwMjExX2NoYW5fd2lkdGhfdG9fbWh6KGVudW0gbmw4MDIxMV9jaGFuX3dpZHRoIGNoYW5fd2lkdGgpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0yNjQte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMDUtfVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MzA2OkVYUE9SVF9TWU1CT0wobmw4MDIxMV9jaGFuX3dpZHRoX3RvX21oeik7XFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMDctXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0zMDg9c3RhdGljIGJvb2wgY2ZnODAyMTFfdmFsaWRfY2VudGVyX2ZyZXEodTMyIGNlbnRlcixcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjMwOTpcXHRcXHRcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2NoYW5fd2lkdGggd2lkdGgpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMTAte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0zMTctXFxubmV0L3dpcmVsZXNzL2NoYW4uYzozMTg6XFx0YncgPSBubDgwMjExX2NoYW5fd2lkdGhfdG9fbWh6KHdpZHRoKTtcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTMxOS1cXHRpZiAoYncgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz00ODk9aW50IGNmZzgwMjExX2NoYW5kZWZfcHJpbWFyeShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMsXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo0OTA6XFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfY2hhbl93aWR0aCBwcmltYXJ5X2NoYW5fd2lkdGgsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy00OTEtXFx0XFx0XFx0ICAgICB1MTYgKnB1bmN0dXJlZClcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTQ5Mi17XFxubmV0L3dpcmVsZXNzL2NoYW4uYzo0OTM6XFx0aW50IHByaV93aWR0aCA9IG5sODAyMTFfY2hhbl93aWR0aF90b19taHoocHJpbWFyeV9jaGFuX3dpZHRoKTtcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTQ5NC1cXHRpbnQgd2lkdGggPSBjZmc4MDIxMV9jaGFuZGVmX2dldF93aWR0aChjKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9NzQzPWNoZWNrX2NoYW5kZWZfcHJpbWFyeV9jb21wYXQoY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjMSxcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc0NC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqYzIsXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo3NDU6XFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfY2hhbl93aWR0aCBwcmltYXJ5X2NoYW5fd2lkdGgpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy03NDYte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz04Njc9dm9pZCBjZmc4MDIxMV9zZXRfZGZzX3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NjgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjg2OTpcXHRcXHRcXHQgICAgZW51bSBubDgwMjExX2Rmc19zdGF0ZSBkZnNfc3RhdGUpXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NzAte1xcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz05MTk9Y2ZnODAyMTFfZGZzX3Blcm1pc3NpdmVfY2hlY2tfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo5MjA6XFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy05MjEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9OTYwPXN0YXRpYyBib29sIGNmZzgwMjExX2Rmc19wZXJtaXNzaXZlX2NoYW4oc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjk2MTpcXHRcXHRcXHRcXHRcXHQgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy05NjItXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9OTkxPXN0YXRpYyBpbnQgY2ZnODAyMTFfZ2V0X2NoYW5zX2Rmc19yZXF1aXJlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtOTkyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjk5MzpcXHRcXHRcXHRcXHRcXHQgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSlcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTk5NC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTEwMTU9aW50IGNmZzgwMjExX2NoYW5kZWZfZGZzX3JlcXVpcmVkKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xMDE2LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTAxNzpcXHRcXHRcXHRcXHQgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTAxOC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2MjI9RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jaGFuZGVmX3VzYWJsZSk7XFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjIzLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTYyNDpzdGF0aWMgYm9vbCBjZmc4MDIxMV9pcl9wZXJtaXNzaXZlX2NoZWNrX3dkZXYoZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNjI1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTU9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNjk2OlxcdFxcdFxcdFxcdFxcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTY5Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE3Mzk9c3RhdGljIGJvb2wgX2NmZzgwMjExX3JlZ19jYW5fYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzQwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTc0MTpcXHRcXHRcXHRcXHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTc0Mi1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcm9oaWJpdGVkX2ZsYWdzLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25sODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI2LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI3OiNpbmNsdWRlIFxcXCJubDgwMjExLmhcXFwiXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yOC0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjk9aW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTAtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTE6XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1Mi1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTcxPXN0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxOTU6XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTgtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxOTk6XFx0XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwMC1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjA4LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjA5OlxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTAtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMy1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxNDpcXHRcXHRcXHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjE1LVxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTg3OD1pbnQgd2lwaHlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtODgxLVxcdGludCByZXM7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo4ODI6XFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTg4My1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIxMC1cXHRjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHJkZXYpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTIxMTpcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIxMi1cXHR3aXBoeV91bmxvY2soXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIyNC1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjEyMjU6XFx0XFx0bmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoXFx1MDAyNnJlcXVlc3QpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTIyNi1cXHR9XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTEzMTU9dm9pZCB3aXBoeV91bnJlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTEzMzAtXFx0d2lwaHlfbG9jayhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTMzMTpcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMzMi1cXHRyZGV2LVxcdTAwM2V3aXBoeS5yZWdpc3RlcmVkID0gZmFsc2U7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0MzQ9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ0NDpcXHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDUtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NzktXFx0d2lwaHlfd29ya19jYW5jZWwod2Rldi1cXHUwMDNld2lwaHksIFxcdTAwMjZ3ZGV2LVxcdTAwM2VjcW1fcnNzaV93b3JrKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0ODA6XFx0LyogZGVsZXRlZCBmcm9tIHRoZSBsaXN0LCBzbyBjYW4ndCBiZSBmb3VuZCBmcm9tIG5sODAyMTEgYW55IG1vcmUgKi9cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0ODEtXFx0Y3FtX2NvbmZpZyA9IHJjdV9hY2Nlc3NfcG9pbnRlcih3ZGV2LVxcdTAwM2VjcW1fY29uZmlnKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTUxOT12b2lkIGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTUyMDpcXHRcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsIGludCBudW0pXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTIxLXtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTY3ND12b2lkIGNmZzgwMjExX3JlZ2lzdGVyX3dkZXYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjk3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTY5ODpcXHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTktfVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0yMDYzPXN0YXRpYyBpbnQgX19pbml0IGNmZzgwMjExX2luaXQodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjA3OC1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIwNzk6XFx0ZXJyID0gbmw4MDIxMV9pbml0KCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMDgwLVxcdGlmIChlcnIpXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMDgxOlxcdFxcdGdvdG8gb3V0X2ZhaWxfbmw4MDIxMTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIwODItXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMDAtXFx0ZGVidWdmc19yZW1vdmUoaWVlZTgwMjExX2RlYnVnZnNfZGlyKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxMDE6XFx0bmw4MDIxMV9leGl0KCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTAyOm91dF9mYWlsX25sODAyMTE6XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTAzLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0yMTEzPXN0YXRpYyB2b2lkIF9fZXhpdCBjZmc4MDIxMV9leGl0KHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMTUtXFx0ZGVidWdmc19yZW1vdmUoaWVlZTgwMjExX2RlYnVnZnNfZGlyKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIxMTY6XFx0bmw4MDIxMV9leGl0KCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTE3LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD0zMTc9c3RydWN0IGNmZzgwMjExX2NxbV9jb25maWcge1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC0zMjAtXFx0czMyIGxhc3RfcnNzaV9ldmVudF92YWx1ZTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjMyMTpcXHRlbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IGxhc3RfcnNzaV9ldmVudF90eXBlO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtMzIyLVxcdGJvb2wgdXNlX3JhbmdlX2FwaTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NDc3PWludCBjZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDc4OlxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBubDgwMjExX2lmdHlwZSBudHlwZSxcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTQ3OS1cXHRcXHRcXHQgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD00OTU9dm9pZCBjZmc4MDIxMV9zZXRfZGZzX3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L3dpcmVsZXNzL2NvcmUuaC00OTYtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjQ5NzpcXHRcXHRcXHQgICAgZW51bSBubDgwMjExX2Rmc19zdGF0ZSBkZnNfc3RhdGUpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDk4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01NTM9aW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTU0OlxcdFxcdFxcdFxcdCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgdTMyIGJlYWNvbl9pbnQpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTU1LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NTU2PXZvaWQgY2ZnODAyMTFfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NTc6XFx0XFx0XFx0ICAgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLCBpbnQgbnVtKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU1OC1cXG4tLVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmM9ODQ9c3RhdGljIHNzaXplX3QgaHQ0MGFsbG93X21hcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuYy05MC1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgYnVmX3NpemUgPSBQQUdFX1NJWkUsIGk7XFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuYzo5MTpcXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmMtOTItXFx0c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0LSNpbmNsdWRlIFxcXCJ3ZXh0LWNvbXBhdC5oXFxcIlxcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTU6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE2LSNpbmNsdWRlIFxcXCJyZGV2LW9wcy5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOT12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy00Mi1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjQzOlxcdG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi1cXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cXHUwMDNlYnNzaWQsXFxubmV0L3dpcmVsZXNzL2lic3MuYy00NC1cXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9OTE9aW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTEzLVxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTE0OlxcdFxcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XFxubmV0L3dpcmVsZXNzL2lic3MuYy0xMTUtXFx0XFx0dTMyIGZsYWc7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTIxOT1pbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMjItXFx0c3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjayA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMjM6XFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIyNC1cXHRpbnQgaSwgZXJyO1xcbi0tXFxubmV0L3dpcmVsZXNzL21lc2guYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvbWVzaC5jOjk6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvbWVzaC5jLTEwLSNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWVzaC5jPTEwMj1pbnQgX19jZmc4MDIxMV9qb2luX21lc2goc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21lc2guYy0xMzktXFx0XFx0LyogaWYgd2UgZG9uJ3QgaGF2ZSB0aGF0IGVpdGhlciwgdXNlIHRoZSBmaXJzdCB1c2FibGUgY2hhbm5lbCAqL1xcbm5ldC93aXJlbGVzcy9tZXNoLmM6MTQwOlxcdFxcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XFxubmV0L3dpcmVsZXNzL21lc2guYy0xNDEtXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9ubDgwMjExLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xOS0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjA6I2luY2x1ZGUgXFxcIm5sODAyMTEuaFxcXCJcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIxLSNpbmNsdWRlIFxcXCJyZGV2LW9wcy5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0yND12b2lkIGNmZzgwMjExX3J4X2Fzc29jX3Jlc3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtOTYtXFxubmV0L3dpcmVsZXNzL21sbWUuYzo5NzpcXHRubDgwMjExX3NlbmRfcnhfYXNzb2MocmRldiwgZGV2LCBkYXRhKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTk4LVxcdC8qIHVwZGF0ZSBjdXJyZW50X2JzcyBldGMuLCBjb25zdW1lcyB0aGUgYnNzIHJlZmVyZW5jZSAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU9c3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc19hdXRoKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExOS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMDpcXHRubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCB3ZGV2LVxcdTAwM2VuZXRkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMS1cXHRjZmc4MDIxMV9zbWVfcnhfYXV0aCh3ZGV2LCBidWYsIGxlbik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEyND1zdGF0aWMgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX2RlYXV0aChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMzMtXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMzQ6XFx0bmw4MDIxMV9zZW5kX2RlYXV0aChyZGV2LCB3ZGV2LVxcdTAwM2VuZXRkZXYsIGJ1ZiwgbGVuLCByZWNvbm5lY3QsIEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM1LVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xNDM9c3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc19kaXNhc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xNTItXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxNTM6XFx0bmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHJkZXYsIHdkZXYtXFx1MDAzZW5ldGRldiwgYnVmLCBsZW4sIHJlY29ubmVjdCxcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE1NC1cXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9MjAxPXZvaWQgY2ZnODAyMTFfYXV0aF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0yMDgtXFxubmV0L3dpcmVsZXNzL21sbWUuYzoyMDk6XFx0bmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChyZGV2LCBkZXYsIGFkZHIsIEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjEwLVxcdGNmZzgwMjExX3NtZV9hdXRoX3RpbWVvdXQod2Rldik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTIxND12b2lkIGNmZzgwMjExX2Fzc29jX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjI1LVxcdGlmIChkYXRhLVxcdTAwM2V0aW1lb3V0KSB7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoyMjY6XFx0XFx0bmw4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQocmRldiwgZGV2LCBhZGRyLCBHRlBfS0VSTkVMKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIyNy1cXHRcXHRjZmc4MDIxMV9zbWVfYXNzb2NfdGltZW91dCh3ZGV2KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjI3ODpcXHRcXHRcXHRcXHQgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZSwgaW50IGtleV9pZCxcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI3OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICp0c2MsIGdmcF90IGdmcClcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjk5LVxcdHRyYWNlX2NmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoZGV2LCBhZGRyLCBrZXlfdHlwZSwga2V5X2lkLCB0c2MpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MzAwOlxcdG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShyZGV2LCBkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYywgZ2ZwKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTMwMS19XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwMTA9Ym9vbCBjZmc4MDIxMV9yeF9tZ210X2V4dChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMDUxLVxcdFxcdC8qIEluZGljYXRlIHRoZSByZWNlaXZlZCBBY3Rpb24gZnJhbWUgdG8gdXNlciBzcGFjZSAqL1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTA1MjpcXHRcXHRpZiAobmw4MDIxMV9zZW5kX21nbXQocmRldiwgd2RldiwgcmVnLVxcdTAwM2VubHBvcnRpZCwgaW5mbyxcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEwNTMtXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEwNzM9dm9pZCBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMDgzLVxcdHVuc2lnbmVkIGxvbmcgdGltZV9kZnNfdXBkYXRlO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTA4NDpcXHRlbnVtIG5sODAyMTFfcmFkYXJfZXZlbnQgcmFkYXJfZXZlbnQ7XFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMDg1LVxcdGludCBiYW5kaWQsIGk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTExMjgtXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMTI5OlxcdFxcdFxcdFxcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTEzMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJhZGFyX2V2ZW50LCBOVUxMLFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xMTU1PXZvaWQgX19jZmc4MDIxMV9yYWRhcl9ldmVudChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMTc1LVxcbm5ldC93aXJlbGVzcy9tbG1lLmM6MTE3NjpcXHRubDgwMjExX3JhZGFyX25vdGlmeShyZGV2LCBjaGFuZGVmLCBOTDgwMjExX1JBREFSX0RFVEVDVEVELCBOVUxMLCBnZnApO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE3Ny1cXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9MTE4Mz12b2lkIGNmZzgwMjExX2NhY19ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE4NC1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMTg1OlxcdFxcdFxcdGVudW0gbmw4MDIxMV9yYWRhcl9ldmVudCBldmVudCwgZ2ZwX3QgZ2ZwLFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTE4Ni1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTIyNi1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMjc6XFx0bmw4MDIxMV9yYWRhcl9ub3RpZnkocmRldiwgY2hhbmRlZiwgZXZlbnQsIG5ldGRldiwgZ2ZwKTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyMjgtfVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYz0xMjMyPV9fY2ZnODAyMTFfYmFja2dyb3VuZF9jYWNfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMjM0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZixcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjEyMzU6XFx0XFx0XFx0XFx0ZW51bSBubDgwMjExX3JhZGFyX2V2ZW50IGV2ZW50KVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTIzNi17XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTEyNjUtXFx0bmV0ZGV2ID0gd2RldiA/IHdkZXYtXFx1MDAzZW5ldGRldiA6IE5VTEw7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMjY2OlxcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIGNoYW5kZWYsIGV2ZW50LCBuZXRkZXYsIEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTI2Ny19XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTEzNTM9dm9pZCBjZmc4MDIxMV9zdG9wX3JhZGFyX2RldGVjdGlvbihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL21sbWUuYy0xMzY4LVxcdFxcdGNmZzgwMjExX3NldF9jYWNfc3RhdGUod2lwaHksIFxcdTAwMjZjaGFuZGVmLCBmYWxzZSk7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoxMzY5OlxcdFxcdG5sODAyMTFfcmFkYXJfbm90aWZ5KHJkZXYsIFxcdTAwMjZjaGFuZGVmLCBOTDgwMjExX1JBREFSX0NBQ19BQk9SVEVELFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTM3MC1cXHRcXHRcXHRcXHQgICAgIHdkZXYtXFx1MDAzZW5ldGRldiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTE0MTk9dm9pZCBjZmc4MDIxMV9tbG9fcmVjb25mX2FkZF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTE0NzQtXFx0d2Rldi1cXHUwMDNldmFsaWRfbGlua3MgfD0gZGF0YS1cXHUwMDNlYWRkZWRfbGlua3M7XFxubmV0L3dpcmVsZXNzL21sbWUuYzoxNDc1OlxcdG5sODAyMTFfbWxvX3JlY29uZl9hZGRfZG9uZShkZXYsIGRhdGEpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmMtMTQ3Ni19XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZWVlODAyMTEuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9ubDgwMjExLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwLSNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMTojaW5jbHVkZSBcXFwibmw4MDIxMS5oXFxcIlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzItI2luY2x1ZGUgXFxcInJlZy5oXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0zNC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjM1OnN0YXRpYyBpbnQgbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDAtLyogdGhlIG5ldGxpbmsgZmFtaWx5ICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0MTpzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTFfZmFtO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00My0vKiBtdWx0aWNhc3QgZ3JvdXBzICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NDplbnVtIG5sODAyMTFfbXVsdGljYXN0X2dyb3VwcyB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00NS1cXHROTDgwMjExX01DR1JQX0NPTkZJRyxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NDpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWNncnBzW10gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NS1cXHRbTkw4MDIxMV9NQ0dSUF9DT05GSUddID0geyAubmFtZSA9IE5MODAyMTFfTVVMVElDQVNUX0dST1VQX0NPTkZJRyB9LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz00Mzg9c3RhdGljIGludCB2YWxpZGF0ZV91aHJfb3BlcmF0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ0OS0vKiBwb2xpY3kgZm9yIHRoZSBhdHRyaWJ1dGVzICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05VTV9OTDgwMjExX0FUVFJdO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDUxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NDUzOm5sODAyMTFfZnRtX3Jlc3BvbmRlcl9wb2xpY3lbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDU0LVxcdFtOTDgwMjExX0ZUTV9SRVNQX0FUVFJfRU5BQkxFRF0gPSB7IC50eXBlID0gTkxBX0ZMQUcsIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQ2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ2MjpubDgwMjExX3Btc3JfZnRtX3JlcV9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDYzLVxcdFtOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0FTQVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQ5NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ5NjpubDgwMjExX3Btc3JfcmVxX2RhdGFfcG9saWN5W05MODAyMTFfUE1TUl9UWVBFX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDk3LVxcdFtOTDgwMjExX1BNU1JfVFlQRV9GVE1dID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQ5ODpcXHRcXHROTEFfUE9MSUNZX05FU1RFRChubDgwMjExX3Btc3JfZnRtX3JlcV9hdHRyX3BvbGljeSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00OTktfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTAyOm5sODAyMTFfcG1zcl9yZXFfYXR0cl9wb2xpY3lbTkw4MDIxMV9QTVNSX1JFUV9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTAzLVxcdFtOTDgwMjExX1BNU1JfUkVRX0FUVFJfREFUQV0gPVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTA0OlxcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9yZXFfZGF0YV9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTA1LVxcdFtOTDgwMjExX1BNU1JfUkVRX0FUVFJfR0VUX0FQX1RTRl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTA5Om5sODAyMTFfcG1zcl9wZWVyX2F0dHJfcG9saWN5W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MTAtXFx0W05MODAyMTFfUE1TUl9QRUVSX0FUVFJfQUREUl0gPSBOTEFfUE9MSUNZX0VUSF9BRERSLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTExOlxcdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX0NIQU5dID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEyLVxcdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX1JFUV0gPVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTEzOlxcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKG5sODAyMTFfcG1zcl9yZXFfYXR0cl9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTE0LVxcdFtOTDgwMjExX1BNU1JfUEVFUl9BVFRSX1JFU1BdID0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTIwOm5sODAyMTFfcG1zcl9hdHRyX3BvbGljeVtOTDgwMjExX1BNU1JfQVRUUl9NQVggKyAxXSA9IHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyMS1cXHRbTkw4MDIxMV9QTVNSX0FUVFJfTUFYX1BFRVJTXSA9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTUyNS1cXHRbTkw4MDIxMV9QTVNSX0FUVFJfUEVFUlNdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUyNjpcXHRcXHROTEFfUE9MSUNZX05FU1RFRF9BUlJBWShubDgwMjExX3Btc3JfcGVlcl9hdHRyX3BvbGljeSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MjctfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ1PWhlX2Jzc19jb2xvcl9wb2xpY3lbTkw4MDIxMV9IRV9CU1NfQ09MT1JfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3R4YXR0cl9wb2xpY3lbTkw4MDIxMV9UWFJBVEVfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTItXFx0W05MODAyMTFfVFhSQVRFX0xFR0FDWV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTU1LVxcdFxcdFxcdFxcdC5sZW4gPSBOTDgwMjExX01BWF9TVVBQX0hUX1JBVEVTIH0sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTY6XFx0W05MODAyMTFfVFhSQVRFX1ZIVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV90eHJhdGVfdmh0KSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTctXFx0W05MODAyMTFfVFhSQVRFX0dJXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1ODpcXHRbTkw4MDIxMV9UWFJBVEVfSEVdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oc2l6ZW9mKHN0cnVjdCBubDgwMjExX3R4cmF0ZV9oZSkpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTU5LVxcdFtOTDgwMjExX1RYUkFURV9IRV9HSV0gPSAgTkxBX1BPTElDWV9SQU5HRShOTEFfVTgsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBOTDgwMjExX1JBVEVfSU5GT19IRV80WExURiksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjU6XFx0W05MODAyMTFfVFhSQVRFX0VIVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG5sODAyMTFfdHhyYXRlX2VodCkpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY2LVxcdFtOTDgwMjExX1RYUkFURV9FSFRfR0ldID0gIE5MQV9QT0xJQ1lfUkFOR0UoTkxBX1U4LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NzY6bmw4MDIxMV90aWRfY29uZmlnX2F0dHJfcG9saWN5W05MODAyMTFfVElEX0NPTkZJR19BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTc3LVxcdFtOTDgwMjExX1RJRF9DT05GSUdfQVRUUl9WSUZfU1VQUF0gPSB7IC50eXBlID0gTkxBX1U2NCB9LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTMtXFx0W05MODAyMTFfVElEX0NPTkZJR19BVFRSX1RYX1JBVEVdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU5NDpcXHRcXHRcXHROTEFfUE9MSUNZX05FU1RFRChubDgwMjExX3R4YXR0cl9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTk1LX07XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU5ODpubDgwMjExX2ZpbHNfZGlzY292ZXJ5X3BvbGljeVtOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01OTktXFx0W05MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9JTlRfTUlOXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEwMDAwKSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjA4Om5sODAyMTFfdW5zb2xfYmNhc3RfcHJvYmVfcmVzcF9wb2xpY3lbTkw4MDIxMV9VTlNPTF9CQ0FTVF9QUk9CRV9SRVNQX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02MDktXFx0W05MODAyMTFfVU5TT0xfQkNBU1RfUFJPQkVfUkVTUF9BVFRSX0lOVF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAyMCksXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTYyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjYyNzpubDgwMjExX21ic3NpZF9jb25maWdfcG9saWN5W05MODAyMTFfTUJTU0lEX0NPTkZJR19BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjI4LVxcdFtOTDgwMjExX01CU1NJRF9DT05GSUdfQVRUUl9NQVhfSU5URVJGQUNFU10gPSBOTEFfUE9MSUNZX01JTihOTEFfVTgsIDIpLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Mzk6bmw4MDIxMV9zdGFfd21lX3BvbGljeVtOTDgwMjExX1NUQV9XTUVfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NDAtXFx0W05MODAyMTFfU1RBX1dNRV9VQVBTRF9RVUVVRVNdID0geyAudHlwZSA9IE5MQV9VOCB9LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2NDU6bmw4MDIxMV9zMWdfc2hvcnRfYmVhY29uW05MODAyMTFfUzFHX1NIT1JUX0JFQUNPTl9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjQ2LVxcdFtOTDgwMjExX1MxR19TSE9SVF9CRUFDT05fQVRUUl9IRUFEXSA9XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY1NTpubDgwMjExX25hbl9iYW5kX2NvbmZfcG9saWN5W05MODAyMTFfTkFOX0JBTkRfQ09ORl9BVFRSX01BWCArIDFdID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjU2LVxcdFtOTDgwMjExX05BTl9CQU5EX0NPTkZfQkFORF0gPSBOTEFfUE9MSUNZX01BWChOTEFfVTgsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY2NjpubDgwMjExX25hbl9wZWVyX21hcF9wb2xpY3lbTkw4MDIxMV9OQU5fUEVFUl9NQVBfQVRUUl9NQVggKyAxXSA9IHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY2Ny1cXHRbTkw4MDIxMV9OQU5fUEVFUl9NQVBfQVRUUl9NQVBfSURdID0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCAxNSksXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTY3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjY3MzpubDgwMjExX25hbl9jb25mX3BvbGljeVtOTDgwMjExX05BTl9DT05GX0FUVFJfTUFYICsgMV0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NzQtXFx0W05MODAyMTFfTkFOX0NPTkZfQ0xVU1RFUl9JRF0gPVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02ODItXFx0W05MODAyMTFfTkFOX0NPTkZfQkFORF9DT05GSUdTXSA9XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2ODM6XFx0XFx0TkxBX1BPTElDWV9ORVNURURfQVJSQVkobmw4MDIxMV9uYW5fYmFuZF9jb25mX3BvbGljeSksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02ODQtXFx0W05MODAyMTFfTkFOX0NPTkZfU0NBTl9QRVJJT0RdID0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjkwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjkxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlID0ge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjkyLVxcdC5taW4gPSAwLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcV9yYW5nZSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjk5LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzAwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTcwMS1cXHRbMF0gPSB7IC5zdHJpY3Rfc3RhcnRfdHlwZSA9IE5MODAyMTFfQVRUUl9IRV9PQlNTX1BEIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgwNC1cXHRbTkw4MDIxMV9BVFRSX1NUQV9GTEFHUzJdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjgwNTpcXHRcXHROTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV9zdGFfZmxhZ191cGRhdGUpKSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgwNi1cXHRbTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODYxLVxcdFtOTDgwMjExX0FUVFJfUk9BTV9TVVBQT1JUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODYyOlxcdFtOTDgwMjExX0FUVFJfU1RBX1dNRV0gPSBOTEFfUE9MSUNZX05FU1RFRChubDgwMjExX3N0YV93bWVfcG9saWN5KSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg2My1cXHRbTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fTUFUQ0hdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTU5LVxcdFtOTDgwMjExX0FUVFJfQkFORFNdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk2MDpcXHRbTkw4MDIxMV9BVFRSX05BTl9DT05GSUddID0gTkxBX1BPTElDWV9ORVNURUQobmw4MDIxMV9uYW5fY29uZl9wb2xpY3kpLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTYxLVxcdFtOTDgwMjExX0FUVFJfTkFOX0ZVTkNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTY4LVxcdFtOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9SU1NJX0FESlVTVF0gPSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5Njk6XFx0XFx0LmxlbiA9IHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV9ic3Nfc2VsZWN0X3Jzc2lfYWRqdXN0KVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTcwLVxcdH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk5MS1cXHRbTkw4MDIxMV9BVFRSX0ZUTV9SRVNQT05ERVJdID1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjk5MjpcXHRcXHROTEFfUE9MSUNZX05FU1RFRChubDgwMjExX2Z0bV9yZXNwb25kZXJfcG9saWN5KSxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6MzAuMTI3MTc5ODcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxMzcyNDMyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBjZmc4MDIxMSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBjZmc4MDIxMWAgS2NvbmZpZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGljdGF0ZSB0aGUgY2FwYWJpbGl0aWVzIGFuZCBmZWF0dXJlcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgd2lyZWxlc3Mgc3RhY2suIEknbGwgd2FudCB0byBxdWlja2x5IHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGRhdGFiYXNlIGFuZCBkcml2ZXIgbW9kZWwsIGVuc3VyaW5nIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvdmVybHkgcmVzdHJpY3RpdmUgZGVmYXVsdHMuIEFyZSB0aGVyZSBhbnkgbmV3IGFkZGl0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZmVhdHVyZSBzZXRzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgd2lyZWxlc3Mgc3RhbmRhcmRzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaXMgYWJsZSB0byBjdXN0b21pemUgdGhlIHdpcmVsZXNzIGVudmlyb25tZW50IGluIHRoZSBrZXJuZWwgd2l0aCB0aGVzZSBjb25maWd1cmF0aW9ucy4gRXNzZW50aWFsbHksIEknbSBjaGVja2luZyBmb3IgYW55dGhpbmcgdGhhdCdzIGNoYW5nZWQgZnVuZGFtZW50YWxseSwgYnJva2VuLCBvciBuZWVkcyBvcHRpbWl6YXRpb24uIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgcG9zc2liaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgdGhhdCB0aGUgS2NvbmZpZyBpbXBvc2VzIG9uIHRoZSBjb3JlIG9mIG91ciB3aXJlbGVzcyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzMzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozOC4yNjQ0MjYwMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGlmIENGRzgwMjExXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuICAzOTpcXHRcXHRib29sIFxcXCJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjM4LjI2NDU1NDAwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzI3NjE4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBNb2R1bGUgQ29uc3RydWN0aW9uIC0gQ0ZHODAyMTEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBjZmc4MDIxMWAgZ2V0cyBidWlsdCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgQ0ZHODAyMTFgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGF0J3Mgd2hhdCBjb250cm9scyB0aGUgY3JlYXRpb24gb2YgYG5ldC93aXJlbGVzcy9jZmc4MDIxMS5rb2AsIG9yLCBvZiBjb3Vyc2UsIGlmIGl0J3MgYmFrZWQgaW50byB0aGUga2VybmVsLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLCBzbyBsZXQncyBkaWcgaW50byB0aGUgYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuXG5cblllcCwgdGhlcmUgaXQgaXMuIFRoZSBNYWtlZmlsZSBzaG93cyBgY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vYCwgcHJvdmluZyB0aGF0IGBubDgwMjExLm9gIGlzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IG9mIHRoZSBgY2ZnODAyMTFgIG1vZHVsZS4gQW5kLCBhcyBleHBlY3RlZCwgYG9iai0kKENPTkZJR19DRkc4MDIxMSkgKz0gY2ZnODAyMTEub2AgY29uZmlybXMgdGhhdCB0aGUgd2hvbGUgYGNmZzgwMjExLm9gIG9iamVjdCBpcyBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYENGRzgwMjExYCBjb25maWd1cmF0aW9uIHNldHRpbmcuIE5vdGhpbmcgc3VycHJpc2luZyBoZXJlLCBidXQgZ29vZCB0byBoYXZlIGEgc29saWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjQzLjk5MjE3NTc5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxuICAgMzpcXHRvYmoteSArPSB0ZXN0cy9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgKz0gd2V4dC1jb3JlLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19XRVhUX1BST0MpICs9IHdleHQtcHJvYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfV0VYVF9QUklWKSArPSB3ZXh0LXByaXYub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm9cXG4gIDEwOlxcdGNmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cXG4gIDExOlxcdGNmZzgwMjExLXkgKz0gbWljaGFlbC1taWMubyBwbXNyLm9cXG4gIDEyOlxcdGNmZzgwMjExLSQoQ09ORklHX09GKSArPSBvZi5vXFxuICAxMzpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm9cXG4gIDE0OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbiAgMTc6XFx0XFxuICAxODpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVMpICs9IHNoaXBwZWQtY2VydHMub1xcbiAgMTk6XFx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxcbiAgMjA6XFx0Y2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0XFxuICAyMzpcXHQkKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxcbiAgMjQ6XFx0XFx0QCQoa2VjaG8pIFxcXCIgIEdFTiAgICAgJEBcXFwiXFxuICAyNTpcXHRcXHQkKFEpKGVjaG8gJyNpbmNsdWRlIFxcXCJyZWcuaFxcXCInOyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjQzLjk5MjI3ODc0NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjY3NjI2Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGllY2UgaGVyZSBpcyBgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGNvcmUuIE5vdywgaWYgSSdtIHNpbXVsYXRpbmcgd2lyZWxlc3MgZGV2aWNlcywgd2hpY2ggSSBvZnRlbiBkbyBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQsIHRoZSByZWFsIGRyaXZlciBsaWtlbHkgYmVjb21lcyBlaXRoZXIgYE1BQzgwMjExX0hXU0lNYCBvciBwb3RlbnRpYWxseSBqdXN0IHVzaW5nIGBOTDgwMjExYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGlzIGJ5IGRpZ2dpbmcgZGVlcGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9IV1NJTWAsIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NDguNjU5OTA5NjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYxNzI5Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjUwLjgyMTY0NTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzODE5OTgwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqSW52ZXN0aWdhdGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgSSBtaWdodCBmaW5kIHdpdGhpbiBhIEtjb25maWcgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4gSXQncyBsaWtlbHkgZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipGZWF0dXJlIEZsYWdzOioqIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHZpcnR1YWwgd2lyZWxlc3MgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWU/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBvcHRpb24uXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGVzZSB2aXJ0dWFsIGRyaXZlcnM/IFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoZXNlIGRyaXZlcnMgYmVjb21lIGF2YWlsYWJsZT8gSSBleHBlY3QgdG8gZmluZCBkZXBlbmRlbmNpZXMgb24gY29yZSB3aXJlbGVzcyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIG9yIHBlcmhhcHMgc3BlY2lmaWMgaGFyZHdhcmUuXG4qICAgKipEZWZhdWx0czoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucz8gQXJlIHRoZXkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGJ5IGRlZmF1bHQsIG9yIGFyZSB0aGV5IG1vZHVsYXJpemVkPyBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgb3V0IG9mIHRoZSBib3guXG4qICAgKipIZWxwIFRleHQ6KiogSSBob3BlIHRoZSBLY29uZmlnIGZpbGUgaGFzIHdlbGwtd3JpdHRlbiBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBvcHRpb25zIGFuZCBleHBsYWluIHRoZWlyIHB1cnBvc2UuIFRoZSBjbGFyaXR5IG9mIHRoZSBoZWxwIHRleHQgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZy5cbiogICAqKkFyY2hpdGVjdHVyZS1TcGVjaWZpYyBPcHRpb25zOioqIElzIHRoZXJlIGFueXRoaW5nIGNvbmRpdGlvbmFsPyBBcmUgYW55IG9mIHRoZSBvcHRpb25zIHRpZWQgdG8gc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBvciBoYXJkd2FyZSBwbGF0Zm9ybXM/IEkgd2lsbCBhbHNvIGxvb2sgZm9yIGhpbnRzIG9mIGhvdyBpdCBkaWZmZXJzLlxuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBNeSBob3BlIGlzIHRoYXQgaXQgcmVmZXJlbmNlcyBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciByZWxhdGVkIGZpbGVzLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgdGhpcyBpbiB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24uXG5cbkVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBjdXN0b21pemF0aW9uLCBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmsgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTcuMjAzNjQ2NjExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjb25maWcgTUFDODAyMTFfSFdTSU1cXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAgIDY6XFx0XFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gICA3OlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcXG4gICA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xcbiAgIDk6XFx0XFx0ICB0byB1c2UgdGhpcyB0b29sLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgMTI6XFx0XFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVklSVF9XSUZJXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XFxuICAxOTpcXHRcXHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTcuMjAzNzc0NjExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMjU1ODE4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiB0aGUgV2lyZWxlc3MgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGdvZXMgbGlrZSB0aGlzOiBmaXJzdCwgbGV0J3MgcGlucG9pbnQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZ2V0X3ZsYW5gLCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHJlc2lkaW5nIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gR29vZCwgZ290IHRoYXQuIE5vdywgYWxvbmdzaWRlIHRoYXQsIEkgc2VlIGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFyZSBhbHNvIGludm9sdmVkLlxuXG5NeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgaW5kZWVkIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBubDgwMjExLmNgIGFzIEkgc3VzcGVjdC4gQWZ0ZXIgdGhpcywgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIFNvIEknbGwgaW1tZWRpYXRlbHkgc2hpZnQgdG8gdHJhY2luZyB0aGVpciByZWZlcmVuY2VzIHdpdGhpbiB0aGUgc2FtZSBmaWxlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIFRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbnNpZ2h0cyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggd2lsbCBicmVhayBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMjAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzowMS4zMjkzNTkxMTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NjQxNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfc2V0X3N0YXRpb258bmw4MDIxMV9uZXdfc3RhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmM9OTA1MT1zdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfc3RhX2NoYW5uZWxfaW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MDc2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTA3NzpzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb25fdGRscyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTA3OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz05MTMxPXN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9zdGFfdHhwb3dlcl9zZXR0aW5nKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNjMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MTY0OnN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTE2NS17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDItXFx0LyogSW5jbHVkZSBwYXJhbWV0ZXJzIGZvciBURExTIHBlZXIgKHdpbGwgY2hlY2sgbGF0ZXIpICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzAzOlxcdGVyciA9IG5sODAyMTFfc2V0X3N0YXRpb25fdGRscyhpbmZvLCBcXHUwMDI2cGFyYW1zKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDQtXFx0aWYgKGVycilcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtOTMzNS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjkzMzY6c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MzM3LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzNy1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTgzODpcXHRcXHQuZG9pdCA9IG5sODAyMTFfc2V0X3N0YXRpb24sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTgzOS1cXHRcXHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTg0NC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTg0NTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfbmV3X3N0YXRpb24sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTg0Ni1cXHRcXHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzowMS40MTYwMDc0NTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM2ODg4MzA4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBTeW1ib2wgVmlzaWJpbGl0eSBpbiBjZmc4MDIxMSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgY2ZnODAyMTFgIGhhbmRsZXMgc3RhdGlvbiBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBgTkw4MDIxMV9DTURfU0VUX1NUQVRJT05gIGFuZCBgTkw4MDIxMV9DTURfTkVXX1NUQVRJT05gLiBJIHNlZSB0aGF0IGBubDgwMjExX3NldF9zdGF0aW9uYCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFyZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLCB0aGUgYGRvaXRgIG1ldGhvZHMgd2l0aGluIGBnZW5sX29wc2AsIGZvciB0aGVzZSBjb21tYW5kcy4gVGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cy5cblxuQW5kIGNydWNpYWxseSwgYGdldF92bGFuYCBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSAqYm90aCogb2YgdGhvc2UgZnVuY3Rpb25zLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHNvIGBnZXRfdmxhbmAgaXMgaW1tZWRpYXRlbHkgcmVsYXRlZC5cblxuTm93LCB0aG9zZSBgbmw4MDIxMV8qYCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGBzdGF0aWNgIGluIGBubDgwMjExLmNgLCBJIGJlbGlldmUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgdGhleSdyZSBsb2NhbCB0byB0aGF0IGNvbXBpbGF0aW9uIHVuaXQuIEhvd2V2ZXIsIGJlY2F1c2UgdGhleSBhcmUgZXhwb3NlZCB0aHJvdWdoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlLCB0aGV5ICphcmUqIGVudHJ5IHBvaW50cy4gVGhlcmVmb3JlLCBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBhcmUgZGVmaW5pdGVseSBwcmVzZW50IGFuZCB2aXNpYmxlIGluIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlLCB3aGV0aGVyIHdlJ3JlIGxvb2tpbmcgYXQgYHZtbGludXhgIG9yIGBjZmc4MDIxMS5rb2AuIEknbSBjZXJ0YWluIG9mIHRoYXQuXG5cblRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBgZ2V0X3ZsYW5gLiBJdCAqbWlnaHQqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCB3aGljaCB3b3VsZCBtZWFuIGl0IHdvdWxkbid0IGhhdmUgaXRzIG93biBzeW1ib2wuIFNvLCBpbmNsdWRpbmcgYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGEgdmVyeSBwcmVjaXNlIHdheSB0byBpZGVudGlmeSByZWxhdGVkIGNvZGUuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGNoZWNrIHRvIHNlZSBpZiBgZ2V0X3ZsYW5gIGlzIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZS4gR290dGEgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzoyNS4xMDQ4NDExMjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzIyMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFxiZ2V0X3ZsYW5cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmM9ODk2Nj1FWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3MS0gKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NzI6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3OlxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDgtXFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkzMzY9c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDctXFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5NjA4OlxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDktXFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ3OjI1LjE5MjE3MzAwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTI0ODgyOTI4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFZMQU4gSW50ZXJmYWNlIFZhbGlkYXRpb24gaW4gbmw4MDIxMSBTdGF0aW9uIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBpbiBgZ2V0X3ZsYW4oKWAsIGFuZCBpdCdzIGEgbmV3IGNoZWNrOiBlbnN1cmluZyB0aGUgVkxBTiBpbnRlcmZhY2UgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgQVAgaW50ZXJmYWNlIGJ5IGNvbXBhcmluZyBFdGhlcm5ldCBhZGRyZXNzZXMuIFByZXZpb3VzbHksIGl0IG9ubHkgY2hlY2tlZCBpZiBpdCB3YXMgYW4gQVAtcmVsYXRlZCBpbnRlcmZhY2UgYW5kIGlmIGl0IHdhcyBydW5uaW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBhZGRpdGlvbiBmb3Igc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSB3aXRoaW4gdGhlIGBubDgwMjExYCBjb250ZXh0LlxuXG5Ob3csIGNvbnNpZGVyaW5nIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgYG5sODAyMTFgIG5ldGxpbmsgaGFuZGxlcnMgKGBubDgwMjExX3NldF9zdGF0aW9uYCwgYG5sODAyMTFfbmV3X3N0YXRpb25gKSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB0aGV5IHBhc3MgdGhlIGBkZXZgIHBhcmFtZXRlciB0byBgZ2V0X3ZsYW4oKWAuIEJlY2F1c2UgdGhlIHZhbGlkYXRpb24gbG9naWMgYW5kIGVycm9yIGhhbmRsaW5nIGhhdmUgY2hhbmdlZCBpbiBob3cgVkxBTiBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkLCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIFwiV29ydGhGdXp6aW5nPXRydWVcIi5cblxuVG8gcHJlcGFyZSBmb3IgZnV6emluZywgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIEJhc2VkIG9uIG15IHF1aWNrIGFuYWx5c2lzLCBpdCBhcHBlYXJzIHRoYXQgdGhlIGBDRkc4MDIxMWAgY29uZmlndXJhdGlvbiwgd2hpY2ggY29tcGlsZXMgYG5sODAyMTEuY2AsIGlzIGZ1bmRhbWVudGFsLiBJdCBsb29rcyBsaWtlIGBNQUM4MDIxMV9IV1NJTWAgd2lsbCBhbHNvIGJlIHJlcXVpcmVkIGJlY2F1c2UgaXQgZW5hYmxlcyB2aXJ0dWFsIFdpLUZpIGRldmljZXMgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdml0YWwgZm9yIHJlYWNoaW5nIHRoZSBzdGF0aW9uIG9wZXJhdGlvbnMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZDogYGdldF92bGFuYCwgYG5sODAyMTFfc2V0X3N0YXRpb25gLCBhbmQgYG5sODAyMTFfbmV3X3N0YXRpb25gIC0gdGhvc2UgYXJlIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMuXG5cbkluIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlLlxuKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgZ2V0X3ZsYW5gLCBgbmw4MDIxMV9zZXRfc3RhdGlvbmAsIGBubDgwMjExX25ld19zdGF0aW9uYC5cbiogICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLlxuKiAgICoqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggbW9kaWZpZXMgVkxBTiBpbnRlcmZhY2UgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldGxpbmsgaW50ZXJmYWNlIChgbmw4MDIxMWApLiBJdCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSB1c2VyIHNwYWNlIG5ldGxpbmsgc29ja2V0cywgZXNwZWNpYWxseSB3aXRoIGBtYWM4MDIxMV9od3NpbWAuIEZ1enppbmcgdGhpcyBuZXcgdmFsaWRhdGlvbiBzdGVwIGNvdWxkIGhlbHAgaWRlbnRpZnkgcG90ZW50aWFsIGludmFsaWQgc3RhdGUgaGFuZGxpbmcgb3IgcmVncmVzc2lvbnMgaW4gVkxBTiBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU0NCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTA6MzcuNjgwNDcwMzU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTcyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfdmxhblwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIHRhcmdldCBBUC9QMlBfR08gaW50ZXJmYWNlIHdoZW4gc2V0dGluZyBvciBhZGRpbmcgYSBzdGF0aW9uIGluIG5sODAyMTEuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgcmVxdWVzdCBoYW5kbGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwvc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfdmxhblwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIHRhcmdldCBBUC9QMlBfR08gaW50ZXJmYWNlIHdoZW4gc2V0dGluZyBvciBhZGRpbmcgYSBzdGF0aW9uIGluIG5sODAyMTEuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgcmVxdWVzdCBoYW5kbGluZyBpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwvc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTA6MzcuODkwNDU0NTg1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2MjMxMzMzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MDozNy44OTEyNjY1ODVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODc2MjIzMTY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVxcdTAwM2VkZXZfYWRkcmAgbWF0Y2hlcyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcy4gVGhlIGBkZXZfYWRkcmAgZmllbGRzIGJlaW5nIGNvbXBhcmVkIGJlbG9uZyB0byBleGlzdGluZywgcmVnaXN0ZXJlZCBuZXR3b3JrIGRldmljZXMgKGBuZXRfZGV2aWNlYCkgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIHBvaW50ZXIgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQ4MGNkZTgzYjA4NzExMmRkYWE4ZDQxODI3MTIzZjE1NTJkMmQ3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA4OjQ1OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDg5OWI2Mzc0YzU1MDYuLjBmMzM4ODMxMmNjZDggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtODk2NiwxMCArODk2NiwxMiBAQCBpbnQgY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcbiBcbiAvKlxuLSAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nIGFuZCBvbiB0aGUgcmlnaHQgd2lwaHkuXG4rICogR2V0IHZsYW4gaW50ZXJmYWNlIG1ha2luZyBzdXJlIGl0IGlzIHJ1bm5pbmcsIG9uIHRoZSByaWdodCB3aXBoeVxuKyAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X3ZsYW4oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbitcdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqdjtcbkBAIC04OTk5LDYgKzkwMDEsMTIgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRnb3RvIGVycm9yO1xuIFx0fVxuIFxuK1x0LyogQ2hlY2sgaWYgdGhlIFZMQU4gaW50ZXJmYWNlIGJlbG9uZ3MgdG8gdGhlIEFQIGludGVyZmFjZSAqL1xuK1x0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycm9yO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHY7XG4gIGVycm9yOlxuIFx0ZGV2X3B1dCh2KTtcbkBAIC05Mjk2LDcgKzkzMDQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwYXJhbXMudmxhbiA9IGdldF92bGFuKGluZm8sIHJkZXYpO1xuK1x0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuIFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBhcmFtcy52bGFuKTtcbiBcbkBAIC05NTk3LDcgKzk2MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFxuIFx0XHQvKiBtdXN0IGJlIGxhc3QgaW4gaGVyZSBmb3IgZXJyb3IgaGFuZGxpbmcgKi9cbi1cdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2KTtcbitcdFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xuIFx0XHRpZiAoSVNfRVJSKHBhcmFtcy52bGFuKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XG4gXHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTA6MzcuODkxMjY4NzU1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMjE4MzA0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV2lyZWxlc3MgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGlzIHRoZSBjb3JlIG9mIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl0IGxvb2tzIGxpa2UgaXQncyBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiBWTEFOIG1hbmFnZW1lbnQgaW4gdGhlIHdpcmVsZXNzIGNvbnRleHQuIFRoZSBjaGFuZ2UgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgZ2V0X3ZsYW4oKWAgZnVuY3Rpb24uIEknbSBzZWVpbmcgYSBuZXcgcGFyYW1ldGVyLCBgc3RydWN0IG5ldF9kZXZpY2UgKmRldmAsIGJlaW5nIGFkZGVkIHRvIGBnZXRfdmxhbigpYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGV5J3JlIHRyeWluZyB0byBhc3NvY2lhdGUgVkxBTnMgd2l0aCBzcGVjaWZpYyBuZXR3b3JrIGRldmljZXMsIGEgY29tbW9uIGFwcHJvYWNoIGZvciB3aXJlbGVzcyBBUCBjb25maWd1cmF0aW9ucy5cblxuRGl2aW5nIGludG8gdGhlIGNvZGUgc25pcHBldCwgdGhhdCBgaWZgIHN0YXRlbWVudCB3aXRoaW4gYGdldF92bGFuKClgIGlzIGtleTogaXQncyBwZXJmb3JtaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBWTEFOIGludGVyZmFjZSAoYHYtXHUwMDNlZGV2X2FkZHJgKSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKGBkZXYtXHUwMDNlZGV2X2FkZHJgKS4gSWYgaXQgZG9lc24ndCBtYXRjaCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBpcyBhIGNydWNpYWwgdmFsaWRhdGlvbiBzdGVwLiBJdCBtYWtlcyBzZW5zZTsgd2Ugd291bGRuJ3Qgd2FudCB0byBhbGxvdyBWTEFOcyB0byBiZSBpbmNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIHdyb25nIHdpcmVsZXNzIGludGVyZmFjZS4gVGhpcyBpcyBhIGNvbW1vbiBzZWN1cml0eSBtZWFzdXJlIGZvciBzZXBhcmF0aW5nIHVzZXIgbmV0d29ya3Mgb24gdGhlIHNhbWUgcmFkaW8uXG5cblRoZSBuZXh0IHRoaW5nIEknbSBsb29raW5nIGF0IGFyZSB0aGUgY2FsbHMgdG8gYGdldF92bGFuKClgIHdpdGhpbiBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gVGhleSdyZSBub3cgcGFzc2luZyB0aGUgbmV0d29yayBkZXZpY2UgKGBkZXZgKSBhcyBhbiBhcmd1bWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aG9zZSBmdW5jdGlvbnMuIExldCdzIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBicm9hZGVyIHdpcmVsZXNzIHN0YWNrLiBUaGV5IGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIHNldHRpbmcgdXAgYW5kIGFkZGluZyB3aXJlbGVzcyBzdGF0aW9ucy4gR2V0dGluZyB0aGUgVkxBTiBpbmZvcm1hdGlvbiBpcyBtb3N0IGxpa2VseSBhYm91dCBhc3NvY2lhdGluZyB0aGUgc3RhdGlvbiB3aXRoIGEgVkxBTi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGV2YCBwYXJhbWV0ZXIgZ2V0cyBwb3B1bGF0ZWQgaW4gdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUwOjUxLjEwOTU3NjE4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA5NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODk2NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODk2NTpcXHR9XFxuODk2NjpcXHRFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcXG44OTY3OlxcdFxcbjg5Njg6XFx0LypcXG44OTY5OlxcdCAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBydW5uaW5nLCBvbiB0aGUgcmlnaHQgd2lwaHlcXG44OTcwOlxcdCAqIGFuZCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBBUC9QMlBfR08gaW50ZXJmYWNlLlxcbjg5NzE6XFx0ICovXFxuODk3MjpcXHRzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuODk3MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuODk3NDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjg5NzU6XFx0e1xcbjg5NzY6XFx0XFx0c3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dO1xcbjg5Nzc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnY7XFxuODk3ODpcXHRcXHRpbnQgcmV0O1xcbjg5Nzk6XFx0XFxuODk4MDpcXHRcXHRpZiAoIXZsYW5hdHRyKVxcbjg5ODE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuODk4MjpcXHRcXG44OTgzOlxcdFxcdHYgPSBkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksIG5sYV9nZXRfdTMyKHZsYW5hdHRyKSk7XFxuODk4NDpcXHRcXHRpZiAoIXYpXFxuODk4NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG44OTg2OlxcdFxcbjg5ODc6XFx0XFx0aWYgKCF2LVxcdTAwM2VpZWVlODAyMTFfcHRyIHx8IHYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5ICE9IFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSkge1xcbjg5ODg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG44OTg5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuODk5MDpcXHRcXHR9XFxuODk5MTpcXHRcXG44OTkyOlxcdFxcdGlmICh2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiBcXHUwMDI2XFx1MDAyNlxcbjg5OTM6XFx0XFx0ICAgIHYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCBcXHUwMDI2XFx1MDAyNlxcbjg5OTQ6XFx0XFx0ICAgIHYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfR08pIHtcXG44OTk1OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuODk5NjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjg5OTc6XFx0XFx0fVxcbjg5OTg6XFx0XFxuODk5OTpcXHRcXHRpZiAoIW5ldGlmX3J1bm5pbmcodikpIHtcXG45MDAwOlxcdFxcdFxcdHJldCA9IC1FTkVURE9XTjtcXG45MDAxOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuOTAwMjpcXHRcXHR9XFxuOTAwMzpcXHRcXG45MDA0OlxcdFxcdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cXG45MDA1OlxcdFxcdGlmICghZGV2IHx8ICFldGhlcl9hZGRyX2VxdWFsKHYtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbjkwMDY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG45MDA3OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuOTAwODpcXHRcXHR9XFxuOTAwOTpcXHRcXG45MDEwOlxcdFxcdHJldHVybiB2O1xcbjkwMTE6XFx0IGVycm9yOlxcbjkwMTI6XFx0XFx0ZGV2X3B1dCh2KTtcXG45MDEzOlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuOTAxNDpcXHR9XFxuOTAxNTpcXHRcXG45MDE2OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9zdGFfd21lKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuOTAxNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKVxcbjkwMTg6XFx0e1xcbjkwMTk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9TVEFfV01FX01BWCArIDFdO1xcbjkwMjA6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbjkwMjE6XFx0XFx0aW50IGVycjtcXG45MDIyOlxcdFxcbjkwMjM6XFx0XFx0LyogcGFyc2UgV01FIGF0dHJpYnV0ZXMgaWYgcHJlc2VudCAqL1xcbjkwMjQ6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1dNRV0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUwOjUxLjExMTE5MDUzOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODA5OTAyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZvY3VzaW5nIG9uIHdoZXJlIEknZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgZGV2YCBpbiBubDgwMjExIFN0YXRpb24gT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCB1c2FnZSBvZiB0aGUgYGRldmAgdmFyaWFibGUgd2l0aGluIHRoZSBgbmw4MDIxMV9zZXRfc3RhdGlvbmAgYW5kIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbnMuIEJvdGggYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIHN0YXRpb24gZW50cmllcyBpbiBubDgwMjExLiBUaGlzIG1lYW5zIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcG9pbnRzIHdoZXJlIGNoYW5nZXMgdG8gc3RhdGlvbnMgZ2V0IHJlZ2lzdGVyZWQsIGFkZGVkLCBhbmQgbWFuaXB1bGF0ZWQuXG5cbk15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBmb2xsb3cgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLiBJcyBpdCBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQ/IElzIGl0IGFsbG9jYXRlZCwgb3IgZGVyaXZlZCBmcm9tIGFub3RoZXIgc3RydWN0dXJlPyBBcmUgdGhlcmUgZ2xvYmFsIHZhcmlhYmxlcz8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgYGRldmAgaXMgaW5pdGlhbGx5IGludHJvZHVjZWQgaW4gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYW5kIHRoZW4gdHJhY2UgYmFjayBmcm9tIHRoZXJlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBkZWJ1Z2dpbmcgb3IgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIOKAkyBwcm9iYWJseSBgZ3JlcGAsIGBjc2NvcGVgLCBgY3RhZ3NgLCBhbmQvb3IgbXkgSURFJ3MgXCJmaW5kIGRlZmluaXRpb25cIiBvciBcImZpbmQgdXNhZ2VzXCIgZmVhdHVyZXMg4oCTIHRvIGVmZmljaWVudGx5IHRyYWNrIGl0cyBwcm92ZW5hbmNlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBkZXZgIGlzIGJlaW5nIHVzZWQgYW5kIG1vZGlmaWVkLCBhbmQgYnkgd2hhdC4gQXJlIHRoZSBjYWxscyB1c2luZyBgZGV2YCBwdXJlbHkgcmVhZGluZyBpdHMgdmFsdWUsIG9yIGlzIGBkZXZgIGJlaW5nIHdyaXR0ZW4gdG8/IElmIHdyaXRlcywgSSdtIGdvaW5nIHRvIGxvb2sgYXQgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIG1pZ2h0IGFsc28gYmUgbG9va2luZyBhdCBhc3NvY2lhdGVkIHN0cnVjdHMgb3IgZGF0YSBidWZmZXJzIHRoYXQgYXJlIG1vZGlmaWVkIHdoZW4gYGRldmAgY2hhbmdlcy4gSXMgaXQgYSBwb2ludGVyIHRvIGEgZGV2aWNlIHN0cnVjdHVyZSwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldGxpbmsgc29ja2V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cblxuRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBgZGV2YCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgcG9pbnRlciB0byBhIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgdG8gYW4gaW5kZXggaW50byBhbiBhcnJheSwgdG8gYW4gaWRlbnRpZmllciBmb3IgYW4gdW5kZXJseWluZyBoYXJkd2FyZSBpbnRlcmZhY2UuIElkZW50aWZ5aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgZGV2LCB0aGUgdW5kZXJseWluZyBkYXRhIHR5cGUsIHdpbGwgYmUgZXNzZW50aWFsLCBidXQgaXQgd29uJ3QgYmUgZW5vdWdoLiBJJ2xsIGFsc28gbG9vayBhdCB0aGUgdHlwZXMgb2Ygb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYGRldmAuIEFyZSB3ZSBhY2Nlc3NpbmcgZGV2aWNlIGF0dHJpYnV0ZXMsIG1hbmlwdWxhdGluZyBpbnRlcm5hbCBmbGFncywgb3IgY29uZmlndXJpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzP1xuXG5PbmNlIEkgdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgZGV2YCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBJIGNhbiBleHBhbmQgb3V0d2FyZCwgZm9sbG93aW5nIGhvdyBpdHMgdmFsdWUgcHJvcGFnYXRlcyB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBubDgwMjExIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIHRyYWNrIGNhbGxzIGFuZCBzZWUgd2hvIGlzIGNhbGxpbmcgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgdGhhdCBoZWxwIG1lIGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyB2YXJpYWJsZS5cblxuSSBleHBlY3QgdG8gaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBwdXJwb3NlIGFuZCBpdHMgZmxvdyB3aXRoaW4gdGhlIHN5c3RlbSB3aXRoIGEgY29tYmluYXRpb24gb2Ygc3RhdGljIGFuYWx5c2lzIGFuZCB0YXJnZXRlZCBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUwOjU3LjkyMTA5NzY1MloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTI4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTI4MDpcXHRcXG45MjgxOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKSB7XFxuOTI4MjpcXHRcXHRcXHRwYXJhbXMuZW1sX2NhcF9wcmVzZW50ID0gdHJ1ZTtcXG45MjgzOlxcdFxcdFxcdHBhcmFtcy5lbWxfY2FwID1cXG45Mjg0OlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xcbjkyODU6XFx0XFx0fVxcbjkyODY6XFx0XFxuOTI4NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSlcXG45Mjg4OlxcdFxcdFxcdHBhcmFtcy5haXJ0aW1lX3dlaWdodCA9XFxuOTI4OTpcXHRcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKTtcXG45MjkwOlxcdFxcbjkyOTE6XFx0XFx0aWYgKHBhcmFtcy5haXJ0aW1lX3dlaWdodCBcXHUwMDI2XFx1MDAyNlxcbjkyOTI6XFx0XFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuOTI5MzpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQUlSVElNRV9GQUlSTkVTUykpXFxuOTI5NDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuOTI5NTpcXHRcXG45Mjk2OlxcdFxcdGVyciA9IG5sODAyMTFfcGFyc2Vfc3RhX3R4cG93ZXJfc2V0dGluZyhpbmZvLFxcbjkyOTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBhcmFtcy5saW5rX3N0YV9wYXJhbXMudHhwd3IsXFxuOTI5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy50eHB3cl9zZXQpO1xcbjkyOTk6XFx0XFx0aWYgKGVycilcXG45MzAwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTMwMTpcXHRcXG45MzAyOlxcdFxcdC8qIEluY2x1ZGUgcGFyYW1ldGVycyBmb3IgVERMUyBwZWVyICh3aWxsIGNoZWNrIGxhdGVyKSAqL1xcbjkzMDM6XFx0XFx0ZXJyID0gbmw4MDIxMV9zZXRfc3RhdGlvbl90ZGxzKGluZm8sIFxcdTAwMjZwYXJhbXMpO1xcbjkzMDQ6XFx0XFx0aWYgKGVycilcXG45MzA1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTMwNjpcXHRcXG45MzA3OlxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG45MzA4OlxcdFxcdGlmIChJU19FUlIocGFyYW1zLnZsYW4pKVxcbjkzMDk6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGFyYW1zLnZsYW4pO1xcbjkzMTA6XFx0XFxuOTMxMTpcXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbjkzMTI6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG45MzEzOlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG45MzE0OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxcbjkzMTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxcbjkzMTY6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbjkzMTc6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG45MzE4OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG45MzE5OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MDo1Ny45MjI1Nzk1NzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM4NTM1ODk2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIGBubDgwMjExX3NldF9zdGF0aW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkZXZgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBubDgwMjExX3NldF9zdGF0aW9uYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSdtIHJldmVyc2UgZW5naW5lZXJpbmcgY29kZSBvciBkZWJ1Z2dpbmcgYSBuZXR3b3JrIGRyaXZlciBpc3N1ZSByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gSSdtIGFzc3VtaW5nIGBkZXZgIGlzIGxpa2VseSBhIHBvaW50ZXIgdG8gYSBuZXRfZGV2aWNlIHN0cnVjdHVyZSBvciBhIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUg4oCTIHBlcmhhcHMgYSBkZXZpY2Utc3BlY2lmaWMgY29udGV4dC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBoZXJlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIHZhcmlhYmxlIGdldHMgaXRzIHZhbHVlLiBUaGUgdWx0aW1hdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyZmFjZSBoYW5kbGVzIHN0YXRpb24gY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIG5sODAyMTEgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6MjEuNzc2MTcyMTg4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MTgwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45MTgxOlxcdFxcbjkxODI6XFx0XFx0LypcXG45MTgzOlxcdFxcdCAqIEFJRCBhbmQgbGlzdGVuX2ludGVydmFsIHByb3BlcnRpZXMgY2FuIGJlIHNldCBvbmx5IGZvciB1bmFzc29jaWF0ZWRcXG45MTg0OlxcdFxcdCAqIHN0YXRpb24uIEluY2x1ZGUgdGhlc2UgcGFyYW1ldGVycyBoZXJlIGFuZCB3aWxsIGNoZWNrIHRoZW0gaW5cXG45MTg1OlxcdFxcdCAqIGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKCkuXFxuOTE4NjpcXHRcXHQgKi9cXG45MTg3OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pXFxuOTE4ODpcXHRcXHRcXHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcXG45MTg5OlxcdFxcbjkxOTA6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WTEFOX0lEXSlcXG45MTkxOlxcdFxcdFxcdHBhcmFtcy52bGFuX2lkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZMQU5fSURdKTtcXG45MTkyOlxcdFxcbjkxOTM6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSlcXG45MTk0OlxcdFxcdFxcdHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPVxcbjkxOTU6XFx0XFx0XFx0ICAgICBubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pO1xcbjkxOTY6XFx0XFx0ZWxzZVxcbjkxOTc6XFx0XFx0XFx0cGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9IC0xO1xcbjkxOTg6XFx0XFxuOTE5OTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JUX1AyUF9QU10pXFxuOTIwMDpcXHRcXHRcXHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPVxcbjkyMDE6XFx0XFx0XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRfUDJQX1BTXSk7XFxuOTIwMjpcXHRcXHRlbHNlXFxuOTIwMzpcXHRcXHRcXHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPSAtMTtcXG45MjA0OlxcdFxcbjkyMDU6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG45MjA2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkyMDc6XFx0XFxuOTIwODpcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxcbjkyMDk6XFx0XFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcbjkyMTA6XFx0XFxuOTIxMTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MRF9BRERSXSkge1xcbjkyMTI6XFx0XFx0XFx0LyogSWYgTUxEX0FERFIgYXR0cmlidXRlIGlzIHNldCB0aGVuIHRoaXMgaXMgYW4gTUxEIHN0YXRpb25cXG45MjEzOlxcdFxcdFxcdCAqIGFuZCB0aGUgTUxEX0FERFIgYXR0cmlidXRlIGhvbGRzIHRoZSBNTEQgYWRkcmVzcyBhbmQgdGhlXFxuOTIxNDpcXHRcXHRcXHQgKiBNQUMgYXR0cmlidXRlIGhvbGRzIGZvciB0aGUgTElOSyBhZGRyZXNzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MToyMS43Nzc4OTE2MzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMyMTkyODYzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHVwb24gc2VlaW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiBgbmw4MDIxMV9zZXRfc3RhdGlvbmA6XG5cbioqSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiBubDgwMjExX3NldF9zdGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBgbmw4MDIxMV9zZXRfc3RhdGlvbmDigKYgcmlnaHQsIHRoaXMgaXMgd2hlcmUgd2UgYmVnaW4gdG8gY29uZmlndXJlIHN0YXRpb24gcGFyYW1ldGVycyB0aHJvdWdoIHRoZSBubDgwMjExIGludGVyZmFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGhpZ2gtbGV2ZWwgY29udGV4dCBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzIGJlaW5nIHNldD8gV2hhdCBraW5kIG9mIGNvbnRyb2wgZmxvdyBhbSBJIGxvb2tpbmcgYXQ/IE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBlbmNvdW50ZXJlZCBhdCB0aGlzIGVudHJ5IHBvaW50LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgYW55IHByZWxpbWluYXJ5IGNoZWNrcyBhbmQgc2FuaXR5IHZhbGlkYXRpb25zIHRoYXQgbWF5IHRha2UgcGxhY2UgYmVmb3JlIHdlIGdldCB0b28gZGVlcCBpbnRvIHRoZSBmdW5jdGlvbidzIGxvZ2ljLiBJIGFudGljaXBhdGUgc29tZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB3aXJlbGVzcyBkZXZpY2UncyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBtZXNzYWdlIGlzIHBhcnNlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBzb21ldGhpbmcgdGhlIGRyaXZlciBjYW4gd29yayB3aXRoLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDQxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTozNC45OTcxODMyMzFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTE0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTE0MDpcXHRcXHRcXHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG45MTQxOlxcdFxcdFxcdFxcdFxcdFxcdCBOTDgwMjExX0VYVF9GRUFUVVJFX1NUQV9UWF9QV1IpKVxcbjkxNDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkxNDM6XFx0XFxuOTE0NDpcXHRcXHRcXHRpZHggPSBOTDgwMjExX0FUVFJfU1RBX1RYX1BPV0VSX1NFVFRJTkc7XFxuOTE0NTpcXHRcXHRcXHR0eHB3ci1cXHUwMDNldHlwZSA9IG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbaWR4XSk7XFxuOTE0NjpcXHRcXG45MTQ3OlxcdFxcdFxcdGlmICh0eHB3ci1cXHUwMDNldHlwZSA9PSBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQpIHtcXG45MTQ4OlxcdFxcdFxcdFxcdGlkeCA9IE5MODAyMTFfQVRUUl9TVEFfVFhfUE9XRVI7XFxuOTE0OTpcXHRcXG45MTUwOlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tpZHhdKVxcbjkxNTE6XFx0XFx0XFx0XFx0XFx0dHhwd3ItXFx1MDAzZXBvd2VyID0gbmxhX2dldF9zMTYoaW5mby1cXHUwMDNlYXR0cnNbaWR4XSk7XFxuOTE1MjpcXHRcXHRcXHRcXHRlbHNlXFxuOTE1MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTU0OlxcdFxcdFxcdH1cXG45MTU1OlxcdFxcbjkxNTY6XFx0XFx0XFx0KnR4cHdyX3NldCA9IHRydWU7XFxuOTE1NzpcXHRcXHR9IGVsc2Uge1xcbjkxNTg6XFx0XFx0XFx0KnR4cHdyX3NldCA9IGZhbHNlO1xcbjkxNTk6XFx0XFx0fVxcbjkxNjA6XFx0XFxuOTE2MTpcXHRcXHRyZXR1cm4gMDtcXG45MTYyOlxcdH1cXG45MTYzOlxcdFxcbjkxNjQ6XFx0c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuOTE2NTpcXHR7XFxuOTE2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG45MTY3OlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG45MTY4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVxcdTAwM2VuZXRkZXY7XFxuOTE2OTpcXHRcXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcXG45MTcwOlxcdFxcdHU4ICptYWNfYWRkcjtcXG45MTcxOlxcdFxcdGludCBlcnI7XFxuOTE3MjpcXHRcXG45MTczOlxcdFxcdG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XFxuOTE3NDpcXHRcXG45MTc1OlxcdFxcdGlmICghZGV2IFxcdTAwMjZcXHUwMDI2IHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gXFx1MDAyNlxcdTAwMjZcXG45MTc2OlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuOTE3NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MTc4OlxcdFxcbjkxNzk6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV9zdGF0aW9uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTozNC45OTc5OTIzMzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE4NTM5MTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBubDgwMjExX25ld19zdGF0aW9uYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBzdGF0aW9uIGVudHJ5IHdpdGhpbiB0aGUgbmw4MDIxMSBmcmFtZXdvcmssIHJpZ2h0PyBTbywgdGhpcyBpcyAqdGhlKiBwb2ludCB3aGVyZSB3ZSdyZSBpbnN0YW50aWF0aW5nIGEgbmV3IFNUQSwgYXNzb2NpYXRpbmcgaXQgd2l0aCBhbiBpbnRlcmZhY2UsIGFuZCBlc3NlbnRpYWxseSwgZ2l2aW5nIGl0IGEgcHJlc2VuY2Ugb24gdGhlIHdpcmVsZXNzIG1lZGl1bS4gTXkgbWluZCdzIHJ1bm5pbmcgdGhyb3VnaCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBuZXRfZGV2aWNlYCwgdGhlIGBjZmc4MDIxMV9zdGF0aW9uYCwgbGlrZWx5IHNvbWUgcmVsYXRlZCBzdHJ1Y3R1cmVzIGluIHRoZSBtYWM4MDIxMSBsYXllci4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBsb2NraW5nIGludm9sdmVkOyBpdCdzIGNyaXRpY2FsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIG1hbmlwdWxhdGluZyB0aGlzIHNoYXJlZCBzdGF0ZS4gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBBcmUgdGhleSBwcm9wZXJseSBjaGVja2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXM/IFRoaXMgaXMgY29yZSBmdW5jdGlvbmFsaXR5OyBhbnkgbWlzc2VkIGVycm9yIGhhbmRsaW5nIGhlcmUgd2lsbCBiZSBhIGRpc2FzdGVyLiBJIG5lZWQgdG8gbG9vayBmb3IgdGhhdC4gQWxzbywgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBrZXkuIFdoYXQgYXJndW1lbnRzIGFyZSB3ZSBleHBlY3Rpbmc/IFdoYXQgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGZyb20gdXNlciBzcGFjZSwgYW5kIGhvdyBpcyBpdCB2YWxpZGF0ZWQ/IEFueSB1bmNoZWNrZWQgdXNlci1wcm92aWRlZCBkYXRhIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIEknbSBleHBlY3RpbmcgY2hlY2tzIG9uIHRoZSBNQUMgYWRkcmVzcywgdGhlIGludGVyZmFjZSBpbmRleCwgbGlrZWx5IHNvbWUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24uIElzIHRoZXJlIGFueSBpbnB1dCBzYW5pdGl6YXRpb24gZ29pbmcgb24sIG9yIGFyZSB3ZSBqdXN0IHRydXN0aW5nIHdoYXQncyBjb21pbmcgaW4gZnJvbSB0aGUgdXNlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBuZWVkcyBhIHRob3JvdWdoIHJldmlldy4gRmluYWxseSwgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3Jvbmc7IGRvZXMgaXQgZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgbmw4MDIxMSBldmVudCB0byBub3RpZnkgdXNlciBzcGFjZSBvZiB0aGUgZmFpbHVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NDAuMTgzMzg1ODlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTQyMDpcXHRcXHRcXHRwYXJhbXMuc3VwcG9ydF9wMnBfcHMgPVxcbjk0MjE6XFx0XFx0XFx0XFx0d2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTztcXG45NDIyOlxcdFxcdH1cXG45NDIzOlxcdFxcbjk0MjQ6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QRUVSX0FJRF0pXFxuOTQyNTpcXHRcXHRcXHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSk7XFxuOTQyNjpcXHRcXHRlbHNlIGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pXFxuOTQyNzpcXHRcXHRcXHRwYXJhbXMuYWlkID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKTtcXG45NDI4OlxcdFxcbjk0Mjk6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQ0FQQUJJTElUWV0pIHtcXG45NDMwOlxcdFxcdFxcdHBhcmFtcy5jYXBhYmlsaXR5ID1cXG45NDMxOlxcdFxcdFxcdFxcdG5sYV9nZXRfdTE2KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQ0FQQUJJTElUWV0pO1xcbjk0MzI6XFx0XFx0XFx0cGFyYW1zLnN0YV9tb2RpZnlfbWFzayB8PSBTVEFUSU9OX1BBUkFNX0FQUExZX0NBUEFCSUxJVFk7XFxuOTQzMzpcXHRcXHR9XFxuOTQzNDpcXHRcXG45NDM1OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0VYVF9DQVBBQklMSVRZXSkge1xcbjk0MzY6XFx0XFx0XFx0cGFyYW1zLmV4dF9jYXBhYiA9XFxuOTQzNzpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0VYVF9DQVBBQklMSVRZXSk7XFxuOTQzODpcXHRcXHRcXHRwYXJhbXMuZXh0X2NhcGFiX2xlbiA9XFxuOTQzOTpcXHRcXHRcXHRcXHRubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfRVhUX0NBUEFCSUxJVFldKTtcXG45NDQwOlxcdFxcdH1cXG45NDQxOlxcdFxcbjk0NDI6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSlcXG45NDQzOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaHRfY2FwYSA9XFxuOTQ0NDpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0pO1xcbjk0NDU6XFx0XFxuOTQ0NjpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSlcXG45NDQ3OlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMudmh0X2NhcGEgPVxcbjk0NDg6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSk7XFxuOTQ0OTpcXHRcXG45NDUwOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pIHtcXG45NDUxOlxcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfY2FwYSA9XFxuOTQ1MjpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pO1xcbjk0NTM6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV9jYXBhX2xlbiA9XFxuOTQ1NDpcXHRcXHRcXHRcXHRubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSk7XFxuOTQ1NTpcXHRcXG45NDU2OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRUhUX0NBUEFCSUxJVFldKSB7XFxuOTQ1NzpcXHRcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmVodF9jYXBhID1cXG45NDU4OlxcdFxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FSFRfQ0FQQUJJTElUWV0pO1xcbjk0NTk6XFx0XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5laHRfY2FwYV9sZW4gPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTo0MC4xODQxMzQ3NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDYzMzEzMjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBzdGFydCBvZiBgbmw4MDIxMV9uZXdfc3RhdGlvbmAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaXZpbmcgaW50byBgbmw4MDIxMV9uZXdfc3RhdGlvbmAg4oCTIEluaXRpYWwgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgKmJlZ2lucyogd2hlbiBhIG5ldyBzdGF0aW9uIGNvbm5lY3RzIOKAkyB0aGUgcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCdzIHdpcmVsZXNzIHN1YnN5c3RlbSBnZXRzIGl0cyBob29rcyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGhvdyB0aGlzIGNvbm5lY3Rpb24gaXMgYmVpbmcgcmVwcmVzZW50ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgY29uY2VybnMgYXJlIGFsd2F5cyBhcm91bmQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBtYWtpbmcgc3VyZSB0aGlzIG5ldyBzdGF0aW9uIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cbkknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBob3cgdGhlIHN0YXRpb24ncyBjb25maWd1cmF0aW9uIGRhdGEsIGxpa2UgaXRzIE1BQyBhZGRyZXNzLCBhc3NvY2lhdGVkIEJTU0lELCBhbmQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBpcyBiZWluZyBwYXNzZWQgaW4uIEFyZSB3ZSB2YWxpZGF0aW5nIHRoaXMgZGF0YSBwcm9wZXJseT8gSXMgdGhlcmUgYW55IG9wcG9ydHVuaXR5IGZvciBpbmplY3Rpb24gb2YgbWFsaWNpb3VzIGRhdGEgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBmb3IgY2hlY2tzIG9uIGxlbmd0aHMsIHZhbGlkIE1BQyBhZGRyZXNzZXMsIGFuZCBhbnkgb3RoZXIgc2FuaXR5IGNoZWNrcyB0aGUgZGV2ZWxvcGVycyBoYXZlIGltcGxlbWVudGVkLlxuXG5OZXh0LCBJJ20gZ29pbmcgdG8gYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIG5ldyBzdGF0aW9uIGlzIGJlaW5nIHJlcHJlc2VudGVkIGludGVybmFsbHkuIFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHVzZWQ/IEhvdyBhcmUgdGhleSBsaW5rZWQgaW50byB0aGUgcmVzdCBvZiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtPyBJcyBpdCBhIHNpbmdsZSBhbGxvY2F0aW9uLCBvciBhcmUgbXVsdGlwbGUgc3RydWN0dXJlcyBpbnZvbHZlZD8gSSdsbCBiZSBrZWVwaW5nIGEga2VlbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3Mg4oCTIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gTWVtb3J5IG1hbmFnZW1lbnQgd2lsbCBiZSBjcml0aWNhbCDigJMgSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga21hbGxvY2Agb3Igc2ltaWxhciwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgYWxsb2NhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGF0IGRlYWxsb2NhdGlvbiBoYXBwZW5zIGluIHRoZSBjb3JyZWN0IHNpdHVhdGlvbnMsIGF2b2lkaW5nIG1lbW9yeSBsZWFrcy5cblxuRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXZlbnQgb3IgY2FsbGJhY2sgcmVnaXN0cmF0aW9uLiBEb2VzIHRoaXMgZnVuY3Rpb24gdHJpZ2dlciBvdGhlciBhY3Rpb25zIG9yIHNldCB1cCBmdXR1cmUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN0YXRpb24/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3RhdGlvbidzIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoYXQgaW5mb3JtYXRpb24gaXMgbWFkZSBhY2Nlc3NpYmxlIHRvIG90aGVyIHN1YnN5c3RlbXMsIGxpa2UgdGhlIG5ldHdvcmtpbmcgc3RhY2sgb3IgYW55IHVzZXJzcGFjZSBtb25pdG9yaW5nIHRvb2xzLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgYWxsIGluaXRpYWxpc2F0aW9uIHJvdXRpbmVzIGFyZSBjYWxsZWQgYW5kIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3RhdGlvbiBpcyBpbml0aWFsaXplZCB0byBhIHZhbGlkIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjkzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTo0My42NDc0NTE2MzZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTM2MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTM2MDpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxcbjkzNjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM2MjpcXHRcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XFxuOTM2MzpcXHRcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXFxuOTM2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzY1OlxcdFxcbjkzNjY6XFx0XFx0XFx0XFx0LyogT25seSBOTUkgc3RhdGlvbnMgcmVjZWl2ZSB0aGUgSFQvVkhUL0hFIGNhcGFiaWxpdGllcyAqL1xcbjkzNjc6XFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSB8fFxcbjkzNjg6XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9WSFRfQ0FQQUJJTElUWV0gfHxcXG45MzY5OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfQ0FQQUJJTElUWV0pXFxuOTM3MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzcxOlxcdFxcdFxcdH1cXG45MzcyOlxcdFxcdH0gZWxzZSB7XFxuOTM3MzpcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSlcXG45Mzc0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNzU6XFx0XFxuOTM3NjpcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcXG45Mzc3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzNzg6XFx0XFxuOTM3OTpcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSBcXHUwMDI2XFx1MDAyNlxcbjkzODA6XFx0XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUEVFUl9BSURdKVxcbjkzODE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM4MjpcXHRcXHR9XFxuOTM4MzpcXHRcXG45Mzg0OlxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA9XFxuOTM4NTpcXHRcXHRcXHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuOTM4NjpcXHRcXG45Mzg3OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XFxuOTM4ODpcXHRcXHRcXHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pO1xcbjkzODk6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XFxuOTM5MDpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfbWFjID1cXG45MzkxOlxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG45MzkyOlxcdFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfbWFjKSlcXG45MzkzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkzOTQ6XFx0XFx0fSBlbHNlIHtcXG45Mzk1OlxcdFxcdFxcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xcbjkzOTY6XFx0XFx0fVxcbjkzOTc6XFx0XFxuOTM5ODpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKSB7XFxuOTM5OTpcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLnN1cHBvcnRlZF9yYXRlcyA9XFxuOTQwMDpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pO1xcbjk0MDE6XFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5zdXBwb3J0ZWRfcmF0ZXNfbGVuID1cXG45NDAyOlxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKTtcXG45NDAzOlxcdFxcdH1cXG45NDA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MTo0My42NDgyNTIzNTZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIzODU1MTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgSSdtIGRlYWxpbmcgd2l0aCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYW5kIEknbSBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgRnVuY3Rpb24ncyBIaXN0b3J5KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBubDgwMjExX25ld19zdGF0aW9uYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgaXRzIGxpbmVhZ2UsIHRvIHNlZSB0aGUgY2FsbHMgdGhhdCBsZWFkIHVwIHRvIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIHBhcmFtb3VudCBoZXJlLiBTbyBJ4oCZbSBtZW50YWxseSBzY2FubmluZyBiYWNrIHRocm91Z2ggdGhlIGVhcmxpZXIgbGluZXMsIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQuLi4gd2hhdCB0cmlnZ2VycyB0aGlzIGBuZXdfc3RhdGlvbmAgZXZlbnQ/IElzIGl0IGEgYmVhY29uLCBhIHByb2JlIHJlcXVlc3QsIGEgbWFuYWdlbWVudCBmcmFtZT8gS25vd2luZyB0aGF0IHdpbGwgZGVmaW5lIHRoZSBwb3RlbnRpYWwgc2lnbmlmaWNhbmNlIG9mIGFueSBpc3N1ZXMgSSBmaW5kLiBJJ20gZXNzZW50aWFsbHkgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgZXhlY3V0aW9uIHBhdGgsIG1lbnRhbGx5IGJ1aWxkaW5nIGEgbWVudGFsIHN0YWNrIG9mIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNlZGluZyBjb25kaXRpb25zLiBJJ20gZXhwZWN0aW5nIHNvbWUgY2x1ZXMgdG8gc3VyZmFjZSBzb29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NDYuODg2ODA3OTI1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTU2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MzMwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MzMwOlxcdCBvdXRfcHV0X3ZsYW46XFxuOTMzMTpcXHRcXHRkZXZfcHV0KHBhcmFtcy52bGFuKTtcXG45MzMyOlxcdFxcbjkzMzM6XFx0XFx0cmV0dXJuIGVycjtcXG45MzM0OlxcdH1cXG45MzM1OlxcdFxcbjkzMzY6XFx0c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuOTMzNzpcXHR7XFxuOTMzODpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG45MzM5OlxcdFxcdGludCBlcnI7XFxuOTM0MDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuOTM0MTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi1cXHUwMDNlbmV0ZGV2O1xcbjkzNDI6XFx0XFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XFxuOTM0MzpcXHRcXHR1OCAqbWFjX2FkZHIgPSBOVUxMO1xcbjkzNDQ6XFx0XFx0dTMyIGF1dGhfYXNzb2MgPSBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8XFxuOTM0NTpcXHRcXHRcXHRcXHQgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCk7XFxuOTM0NjpcXHRcXG45MzQ3OlxcdFxcdG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XFxuOTM0ODpcXHRcXG45MzQ5OlxcdFxcdGlmICghZGV2IFxcdTAwMjZcXHUwMDI2IHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pXFxuOTM1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzUxOlxcdFxcbjkzNTI6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWFkZF9zdGF0aW9uKVxcbjkzNTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjkzNTQ6XFx0XFxuOTM1NTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKVxcbjkzNTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM1NzpcXHRcXG45MzU4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8XFxuOTM1OTpcXHRcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XFxuOTM2MDpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxcbjkzNjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTM2MjpcXHRcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XFxuOTM2MzpcXHRcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXFxuOTM2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NDYuODg5MzA3OTA1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NjgzNjY1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBubDgwMjExX25ld19zdGF0aW9uYCDigJMgV2hhdCdzIE5leHQ/KipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAuIFdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBub3cgSSBuZWVkIHRvIHNlZSB0aGUgcmVzdCBvZiBpdC4gV2hhdCBhcmUgd2UgbG9va2luZyBhdCBoZXJlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBuZXh0IHNlY3Rpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dCB0aGF0IHdpbGwgbmVlZCB0byBiZSBhZGRyZXNzZWQ/IElzIHRoZXJlIGEgcmVhc29uIHdoeSB3ZSBhcmUgbG9va2luZyBoZXJlPyBXaGF0IGlzIHRoZSBiaWdnZXIgcGljdHVyZT8gT2theSwgbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NTAuNDU3Njc4MzU5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk1OTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTU5MTpcXHRcXG45NTkyOlxcdFxcdFxcdC8qIE9sZGVyIHVzZXJzcGFjZSwgb3IgdXNlcnNwYWNlIHdhbnRpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoXFxuOTU5MzpcXHRcXHRcXHQgKiAhTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFLCB3aWxsIG5vdCBzZXQgdGhlIGF1dGhcXG45NTk0OlxcdFxcdFxcdCAqIGFuZCBhc3NvYyBmbGFncyBpbiB0aGUgbWFzaywgYnV0IGFzc3VtZXMgdGhlIHN0YXRpb24gd2lsbCBiZVxcbjk1OTU6XFx0XFx0XFx0ICogYWRkZWQgYXMgYXNzb2NpYXRlZCBhbnl3YXkgc2luY2UgdGhpcyB3YXMgdGhlIHJlcXVpcmVkIGRyaXZlclxcbjk1OTY6XFx0XFx0XFx0ICogYmVoYXZpb3VyIGJlZm9yZSBOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUgd2FzXFxuOTU5NzpcXHRcXHRcXHQgKiBpbnRyb2R1Y2VkLlxcbjk1OTg6XFx0XFx0XFx0ICogSW4gb3JkZXIgdG8gbm90IGJvdGhlciBkcml2ZXJzIHdpdGggdGhpcyBxdWlyayBpbiB0aGUgQVBJXFxuOTU5OTpcXHRcXHRcXHQgKiBzZXQgdGhlIGZsYWdzIGluIGJvdGggdGhlIG1hc2sgYW5kIHNldCBmb3IgbmV3IHN0YXRpb25zIGluXFxuOTYwMDpcXHRcXHRcXHQgKiB0aGlzIGNhc2UuXFxuOTYwMTpcXHRcXHRcXHQgKi9cXG45NjAyOlxcdFxcdFxcdGlmICghKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcXHUwMDI2IGF1dGhfYXNzb2MpKSB7XFxuOTYwMzpcXHRcXHRcXHRcXHRwYXJhbXMuc3RhX2ZsYWdzX21hc2sgfD0gYXV0aF9hc3NvYztcXG45NjA0OlxcdFxcdFxcdFxcdHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IHw9IGF1dGhfYXNzb2M7XFxuOTYwNTpcXHRcXHRcXHR9XFxuOTYwNjpcXHRcXG45NjA3OlxcdFxcdFxcdC8qIG11c3QgYmUgbGFzdCBpbiBoZXJlIGZvciBlcnJvciBoYW5kbGluZyAqL1xcbjk2MDg6XFx0XFx0XFx0cGFyYW1zLnZsYW4gPSBnZXRfdmxhbihpbmZvLCByZGV2LCBkZXYpO1xcbjk2MDk6XFx0XFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuOTYxMDpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbXMudmxhbik7XFxuOTYxMTpcXHRcXHRcXHRicmVhaztcXG45NjEyOlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG45NjEzOlxcdFxcdFxcdC8qIGlnbm9yZSB1QVBTRCBkYXRhICovXFxuOTYxNDpcXHRcXHRcXHRwYXJhbXMuc3RhX21vZGlmeV9tYXNrIFxcdTAwMjY9IH5TVEFUSU9OX1BBUkFNX0FQUExZX1VBUFNEO1xcbjk2MTU6XFx0XFxuOTYxNjpcXHRcXHRcXHQvKiBhc3NvY2lhdGVkIGlzIGRpc2FsbG93ZWQgKi9cXG45NjE3OlxcdFxcdFxcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVEKSlcXG45NjE4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjk2MTk6XFx0XFx0XFx0LyogVERMUyBwZWVycyBjYW5ub3QgYmUgYWRkZWQgKi9cXG45NjIwOlxcdFxcdFxcdGlmICgocGFyYW1zLnN0YV9mbGFnc19zZXQgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIpKSB8fFxcbjk2MjE6XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QRUVSX0FJRF0pXFxuOTYyMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45NjIzOlxcdFxcdFxcdGJyZWFrO1xcbjk2MjQ6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbjk2MjU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxcbjk2MjY6XFx0XFx0XFx0LyogaWdub3JlIHVBUFNEIGRhdGEgKi9cXG45NjI3OlxcdFxcdFxcdHBhcmFtcy5zdGFfbW9kaWZ5X21hc2sgXFx1MDAyNj0gflNUQVRJT05fUEFSQU1fQVBQTFlfVUFQU0Q7XFxuOTYyODpcXHRcXG45NjI5OlxcdFxcdFxcdC8qIHRoZXNlIGFyZSBkaXNhbGxvd2VkICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUxOjUwLjQ1ODUyNjA3OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTU0NzA0NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYGdldF92bGFuYCBoYXMgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCBub3cgbG9va3MgbGlrZTpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuXHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5gYGBcblxuVGhhdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIFRoZSB0aGlyZCBwYXJhbWV0ZXIsIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCwgaXMgdGhlIG5ldyBhZGRpdGlvbi4gTm93LCB0aGUgY29kZSBpbmNsdWRlcyBhIHZhbGlkYXRpb24gY2hlY2sgd2l0aGluIGBnZXRfdmxhbmAuIEl0J3MgZW5zdXJpbmcgdGhhdCB0aGUgVkxBTiBpbnRlcmZhY2UgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgaW50ZW5kZWQgQVAgaW50ZXJmYWNlLlxuXG5gYGBjXG5cdC8qIENoZWNrIGlmIHRoZSBWTEFOIGludGVyZmFjZSBiZWxvbmdzIHRvIHRoZSBBUCBpbnRlcmZhY2UgKi9cblx0aWYgKCFkZXYgfHwgIWV0aGVyX2FkZHJfZXF1YWwodi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuXHRcdHJldCA9IC1FSU5WQUw7XG5cdFx0Z290byBlcnJvcjtcblx0fVxuYGBgXG5cbkdvb2QsIHRoYXQncyBzb3VuZCBsb2dpYyDigJMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBtaXNjb25maWd1cmF0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIE5vdywgdGhlIGBkZXZgIHBhcmFtZXRlciBpcyBiZWluZyBwYXNzZWQgdG8gYGdldF92bGFuYCBpbiB0aGUgYG5sODAyMTFfc2V0X3N0YXRpb25gIGFuZCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHNlbnNlIGNvbnNpZGVyaW5nIHRoZSBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlLiBJIHdvdWxkIGV4cGVjdCB0aGVzZSB0byBiZSB0aGUgbGlrZWx5IGNhbGxpbmcgc2l0ZXMgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgVkxBTiBtYW5pcHVsYXRpb24gaW4gc3RhdGlvbiBjb25maWd1cmF0aW9uLlxuXG5Ib2xkIG9uIGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgY2hhbmdlIHRvIGBnZXRfdmxhbmAgY291bGQgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdtIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggdG8gY29uZmlybSB0aGF0IGBnZXRfdmxhbmAgaGFzIG5vIG90aGVyIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTEzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTE6NTUuNDEzMjMzNzgyWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjMwNjY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3ZsYW5cXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmM9ODk2Nj1FWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3MS0gKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NzI6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkxNjQ9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MzA3OlxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkzMDgtXFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkzMzY9c3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDctXFx0XFx0LyogbXVzdCBiZSBsYXN0IGluIGhlcmUgZm9yIGVycm9yIGhhbmRsaW5nICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5NjA4OlxcdFxcdHBhcmFtcy52bGFuID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTk2MDktXFx0XFx0aWYgKElTX0VSUihwYXJhbXMudmxhbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUxOjU2LjA3NjMwNjkyMVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDA5MzU1OTg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2V0X3ZsYW5gIENhbGxlcnMgYW5kIERldmljZSBBZGRyZXNzIENvbXBhcmlzb24qKlxuXG5Pa2F5LCBzbyBvbmx5IHR3byBjYWxsZXJzIGFyZSBoaXR0aW5nIHRoaXMgYGdldF92bGFuYCBmdW5jdGlvbi4gVGhhdCdzIGdvb2Q7IGl0IGtlZXBzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIG1hbmFnZWFibGUuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgYSBjcnVjaWFsIGFzc3VtcHRpb246IGNhbiBgZGV2X2FkZHJgIOKAkyB0aGUgZGV2aWNlIGFkZHJlc3Mg4oCTIG9mIGVpdGhlciB0aGUgYGRldmAgb3IgYHZgIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGJlIHVuaW5pdGlhbGl6ZWQ/XG5cbkxldCdzIGJyZWFrIGRvd24gd2hlcmUgdGhlc2UgdmFyaWFibGVzIGNvbWUgZnJvbS4gYHZgIGlzIGEgYG5ldF9kZXZpY2VgIG9idGFpbmVkIHRocm91Z2ggYGRldl9nZXRfYnlfaW5kZXgoLi4uKWAuIEFuZCBgZGV2YCBpcyBhY2Nlc3NlZCB2aWEgYHdkZXYtXHUwMDNlbmV0ZGV2YC4gVGhlc2UgYXJlIGJvdGggbmV0d29yayBkZXZpY2VzLCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIFRoYXQgbWVhbnMsIGJ5IGRlZmluaXRpb24sIHRoZWlyIEV0aGVybmV0IGFkZHJlc3NlcyAoYGRldl9hZGRyYCkgc2hvdWxkIGJlIHN0YW5kYXJkLCBwcm9wZXJseSBpbml0aWFsaXplZCBNQUMgYWRkcmVzc2VzIOKAkyB0aGV5IGdldCBzZXQgZHVyaW5nIHRoZSBuZXRkZXYgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMuIFNvLCB0aGUgY2hhbmNlcyBvZiB0aGVtIGJlaW5nIHVuaW5pdGlhbGl6ZWQgYXJlIHZlcnksIHZlcnkgbG93LCBpZiB0aGUgbmV0d29yayBzdGFjayBpcyBiZWhhdmluZyBhcyBleHBlY3RlZC5cblxuVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGhpbmdlcyBvbiBgZXRoZXJfYWRkcl9lcXVhbCh2LVx1MDAzZWRldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIpYC4gVGhpcyBjb21wYXJlcyBzaXggYnl0ZXMuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGV0aGVyX2FkZHJfZXF1YWxgIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0IGl0IHRvLiBUaGUgY29kZSBpcyBsaWtlbHkgb3B0aW1pemVkIGZvciBzcGVlZCwgYnV0IEkgc2hvdWxkIHNhbml0eSBjaGVjayB0aGF0IGl0J3MgZG9pbmcgYSBwcm9wZXIsIGJ5dGUtYnktYnl0ZSBjb21wYXJpc29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo1MzozNy4wMTE5MTAxMzFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MzQ4MjE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIGJvb2wgZXRoZXJfYWRkcl9lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfaW5oZXJpdChzdHJ1Y3QgbmV0X2RldmljZSAqZHN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTM1Mi0gKi9cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6MzUzOnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsKGNvbnN0IHU4ICphZGRyMSwgY29uc3QgdTggKmFkZHIyKVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTM4MS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6MzgyOnN0YXRpYyBpbmxpbmUgYm9vbCBldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhjb25zdCB1OCAqYWRkcjEsIGNvbnN0IHU4ICphZGRyMilcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MDUtICovXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjQwNjpzdGF0aWMgaW5saW5lIGJvb2wgZXRoZXJfYWRkcl9lcXVhbF91bmFsaWduZWQoY29uc3QgdTggKmFkZHIxLCBjb25zdCB1OCAqYWRkcjIpXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTQwNy17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNDI0LSAqL1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDo0MjU6c3RhdGljIGlubGluZSBib29sIGV0aGVyX2FkZHJfZXF1YWxfbWFza2VkKGNvbnN0IHU4ICphZGRyMSwgY29uc3QgdTggKmFkZHIyLFxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00MjYtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTggKm1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjUzOjM3LjcwNTM5ODU4WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc4MDgxNTQ4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBIZXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgZXhwb3NlcyByaXNrcyBkZXRlY3RhYmxlICpvbmx5KiBieSBLTVNBTi4gSSdtIGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRmlyc3QsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhlIHBhdGNoJ3MgYWN0aW9uczogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiB0aGUgYGdldF92bGFuKClgIGZ1bmN0aW9uIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gVGhpcyBjaGVjayB2ZXJpZmllcyB0aGF0IHRoZSBWTEFOIGRldmljZSAoYHZgKSBoYXMgdGhlIHNhbWUgTUFDIGFkZHJlc3MgYXMgdGhlIHBhcmVudCBBUC9QMlBfR08gZGV2aWNlIChgZGV2YCkuIENydWNpYWxseSwgdGhpcyBpcyBhIHZhbGlkYXRpb24sIGFuICppbnB1dCBjaGVjayouIFRoZSBmdW5jdGlvbiBub3cgYWNjZXB0cyBgZGV2YCBhbmQgdGhlIGNhbGxlciBzZXRzIGBkZXZgIHRvIHRoZSBwcm9wZXIgbmV0X2RldmljZS4gVGhlIHZhbGlkYXRpb24gbG9naWMgbm93IGNvbXBhcmVzIGB2LVx1MDAzZWRldl9hZGRyYCBhbmQgYGRldi1cdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWxgLCByZXR1cm5pbmcgYC1FSU5WQUxgIGlmIHRoZSBhZGRyZXNzZXMgZG9uJ3QgbWF0Y2guXG5cbk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGVzZSBxdWVzdGlvbnM6XG5cbjEuICAqKkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgZGF0YSB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgYW5kIHNlbnQgdG8gdXNlcnNwYWNlPyoqIE5vLiBJdCBkb2VzIG5vdCBzZW5kIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuXG4yLiAgKipEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogIE5vLCBgZGV2YCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBhIHdlbGwtZGVmaW5lZCBgZGV2YCBhbmQgYSBgdmAgYWNxdWlyZWQgdGhyb3VnaCBgZGV2X2dldF9ieV9pbmRleGAgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZC5cbjMuICAqKkFyZSB0aGVyZSBuZXcgYWxsb2NhdGlvbnMgb3IgY2hhbmdlcyB0byBleGlzdGluZyBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyoqIE5vLCB0aGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgaW50cm9kdWNlZCBvciBjaGFuZ2VkLlxuNC4gICoqQXJlIHRoZXJlIHBvdGVudGlhbCBib3VuZHMgY2hlY2tzIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIE5vLiBUaGUgcGF0Y2ggaW1wb3NlcyBhIHN0cmljdGVyIHJlc3RyaWN0aW9uLiBJdOKAmXMgYSB2YWxpZGF0aW9uIHRoYXQgZ3VhcmFudGVlcyBhbGlnbm1lbnQgb2YgVkxBTiB0byB0aGUgcGFyZW50IGRldmljZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYXJlIGFscmVhZHkgZW5hYmxlZC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMqLiBUaGUgY3JpdGljYWwgcnVsZSBpcywgaWYgS0FTQU4gKG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzKSBjYW4gY2F0Y2ggYSBidWcsIEtNU0FOIGlzICpub3QqIG5lY2Vzc2FyeS4gS01TQU4gZnV6emluZyBpcyBleHBlbnNpdmUuXG5cbkluIHRoaXMgc3BlY2lmaWMgY2FzZSwgYm90aCBgdmAgYW5kIGBkZXZgIGFyZSwgYXQgdGhlIHBvaW50IG9mIGFjY2VzcywgdmFsaWQsIHJlZ2lzdGVyZWQgYG5ldF9kZXZpY2VgIHBvaW50ZXJzIHdob3NlIGBkZXZfYWRkcmAgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgbmV0d29yayBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIGBkZXZgIG9yIGB2YCDigJMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciBsaWZlY3ljbGUgcHJvYmxlbXMg4oCTIGFyZSBhbHJlYWR5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgY2F1Z2h0IGJ5IGV4aXN0aW5nIHRvb2xzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgc29saWQsIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBzcGVjaWFsIEtNU0FOIGNvbnNpZGVyYXRpb25zLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhIGNoZWNrIGZvciBhbGlnbm1lbnQgb2YgdGhlIFZMQU4gdG8gdGhlIHBhcmVudCBkZXZpY2UsIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBoZXJlLiBUaW1lIHRvIGZsYWcgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3MSwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NTM6NDUuNTEzNTU4NDU4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBnZXRfdmxhbigpYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgdG8gdGFrZSBhbiBhZGRpdGlvbmFsIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCBhcmd1bWVudCBhbmQgdmVyaWZpZXMgdGhhdCBgZGV2YCBpcyB2YWxpZCBhbmQgdGhhdCBgdi1cXHUwMDNlZGV2X2FkZHJgIG1hdGNoZXMgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHVzaW5nIGBldGhlcl9hZGRyX2VxdWFsKClgLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMuIFRoZSBgZGV2X2FkZHJgIGZpZWxkcyBiZWluZyBjb21wYXJlZCBiZWxvbmcgdG8gZXhpc3RpbmcsIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2VzIChgbmV0X2RldmljZWApIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBwb2ludGVyIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGdldF92bGFuKClgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB0byB0YWtlIGFuIGFkZGl0aW9uYWwgYHN0cnVjdCBuZXRfZGV2aWNlICpkZXZgIGFyZ3VtZW50IGFuZCB2ZXJpZmllcyB0aGF0IGBkZXZgIGlzIHZhbGlkIGFuZCB0aGF0IGB2LVxcdTAwM2VkZXZfYWRkcmAgbWF0Y2hlcyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdXNpbmcgYGV0aGVyX2FkZHJfZXF1YWwoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcy4gVGhlIGBkZXZfYWRkcmAgZmllbGRzIGJlaW5nIGNvbXBhcmVkIGJlbG9uZyB0byBleGlzdGluZywgcmVnaXN0ZXJlZCBuZXR3b3JrIGRldmljZXMgKGBuZXRfZGV2aWNlYCkgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIHBvaW50ZXIgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[1] Phase: Succeeded StartedAt: 2026-09-14 08:53:56 +0000 UTC FinishedAt: 2026-09-14 08:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 08:53:56 +0000 UTC FinishedAt: 2026-09-14 08:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2] Phase: Succeeded StartedAt: 2026-09-14 08:53:56 +0000 UTC FinishedAt: 2026-09-14 12:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 08:53:56 +0000 UTC FinishedAt: 2026-09-14 12:49:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 08:53:56 +0000 UTC FinishedAt: 2026-09-14 08:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 08:53:56 +0000 UTC FinishedAt: 2026-09-14 08:54:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowcvhwq/series-workflowcvhwq-convert-artifact-1079963493/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 08:54:07 +0000 UTC FinishedAt: 2026-09-14 09:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 08:54:07 +0000 UTC FinishedAt: 2026-09-14 09:13:05 +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:*1f61fdbe-5f95-4e19-8ed0-97a9f60c3643,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-workflowcvhwq/series-workflowcvhwq-convert-artifact-1079963493/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": "093a2a40-f213-42e1-9ba9-76ff2c2d5dd1", "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-workflowcvhwq/series-workflowcvhwq-build-action-1860299659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 08:54:07 +0000 UTC FinishedAt: 2026-09-14 09:12:54 +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:*1f61fdbe-5f95-4e19-8ed0-97a9f60c3643,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-workflowcvhwq/series-workflowcvhwq-convert-artifact-1079963493/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": "093a2a40-f213-42e1-9ba9-76ff2c2d5dd1", "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-workflowcvhwq/series-workflowcvhwq-build-action-1860299659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 09:13:05 +0000 UTC FinishedAt: 2026-09-14 09:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 09:13:06 +0000 UTC FinishedAt: 2026-09-14 09:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 09:13:06 +0000 UTC FinishedAt: 2026-09-14 09:13:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 09:13:06 +0000 UTC FinishedAt: 2026-09-14 09:13:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowcvhwq/series-workflowcvhwq-convert-artifact-3131898432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 09:13:19 +0000 UTC FinishedAt: 2026-09-14 09:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 09:13:19 +0000 UTC FinishedAt: 2026-09-14 09:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*093a2a40-f213-42e1-9ba9-76ff2c2d5dd1,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-workflowcvhwq/series-workflowcvhwq-build-action-1860299659/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-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 09:15:26 +0000 UTC FinishedAt: 2026-09-14 09:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:15:26 +0000 UTC FinishedAt: 2026-09-14 09:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 09:15:26 +0000 UTC FinishedAt: 2026-09-14 09:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 09:15:26 +0000 UTC FinishedAt: 2026-09-14 09:42:34 +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:*1f61fdbe-5f95-4e19-8ed0-97a9f60c3643,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-workflowcvhwq/series-workflowcvhwq-convert-artifact-3131898432/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": "dbe9b130-36e0-49e0-a7b0-601b1dcb3f7d", "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-workflowcvhwq/series-workflowcvhwq-build-action-3846566073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Failed StartedAt: 2026-09-14 09:15:26 +0000 UTC FinishedAt: 2026-09-14 09:15:35 +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:*1f61fdbe-5f95-4e19-8ed0-97a9f60c3643,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-workflowcvhwq/series-workflowcvhwq-convert-artifact-3131898432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(1) Phase: Succeeded StartedAt: 2026-09-14 09:24:36 +0000 UTC FinishedAt: 2026-09-14 09:42:23 +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:*1f61fdbe-5f95-4e19-8ed0-97a9f60c3643,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-workflowcvhwq/series-workflowcvhwq-convert-artifact-3131898432/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": "dbe9b130-36e0-49e0-a7b0-601b1dcb3f7d", "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-workflowcvhwq/series-workflowcvhwq-build-action-3846566073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 09:42:34 +0000 UTC FinishedAt: 2026-09-14 09:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 09:42:35 +0000 UTC FinishedAt: 2026-09-14 09:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 09:42:35 +0000 UTC FinishedAt: 2026-09-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 09:42:35 +0000 UTC FinishedAt: 2026-09-14 09:44:27 +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:*dbe9b130-36e0-49e0-a7b0-601b1dcb3f7d,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-workflowcvhwq/series-workflowcvhwq-build-action-3846566073/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-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 09:44:38 +0000 UTC FinishedAt: 2026-09-14 12:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 09:44:38 +0000 UTC FinishedAt: 2026-09-14 12:49:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*093a2a40-f213-42e1-9ba9-76ff2c2d5dd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dbe9b130-36e0-49e0-a7b0-601b1dcb3f7d,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-workflowcvhwq/series-workflowcvhwq-build-action-1860299659/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-workflowcvhwq/series-workflowcvhwq-build-action-3846566073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 09:44:38 +0000 UTC FinishedAt: 2026-09-14 09:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 09:44:38 +0000 UTC FinishedAt: 2026-09-14 09:44:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcvhwq/series-workflowcvhwq-convert-artifact-104802201/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 09:44:38 +0000 UTC FinishedAt: 2026-09-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:44:38 +0000 UTC FinishedAt: 2026-09-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 09:44:39 +0000 UTC FinishedAt: 2026-09-14 09:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 09:44:51 +0000 UTC FinishedAt: 2026-09-14 12:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvhwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["get_vlan","nl80211_set_station","nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2acabf7847fba2ebd0af7ea393fa0a7a35c46238","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"1d56ef4e-a1d3-470b-9428-82bc34270923","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 09:44:51 +0000 UTC FinishedAt: 2026-09-14 12:49:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*093a2a40-f213-42e1-9ba9-76ff2c2d5dd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dbe9b130-36e0-49e0-a7b0-601b1dcb3f7d,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-workflowcvhwq/series-workflowcvhwq-build-action-1860299659/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-workflowcvhwq/series-workflowcvhwq-build-action-3846566073/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-workflowcvhwq/series-workflowcvhwq-convert-artifact-104802201/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,}