Name: series-workflowzh5xq Phase: Succeeded StartedAt: 2026-09-11 07:14:33 +0000 UTC FinishedAt: 2026-09-11 11:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[0] Phase: Succeeded StartedAt: 2026-09-11 07:14:33 +0000 UTC FinishedAt: 2026-09-11 07:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 07:14:33 +0000 UTC FinishedAt: 2026-09-11 07:38:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "BRCMFMAC", "BRCMFMAC_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "BRCMFMAC", "BRCMFMAC_USB" ], "series_id": "6475b3ff-9c85-4aa7-a28e-e43753a65ca7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_set_pmk", "nl80211_del_pmk", "brcmf_set_key_mgmt", "brcmf_cfg80211_connect", "brcmf_cfg80211_set_pmk", "brcmf_bss_roaming_done", "brcmf_bss_connect_done", "brcmf_setup_wiphy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0dXBfd2lwaHkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cblxuS2V5IG9ic2VydmF0aW9ucyByZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXG4zLiBUaGUgbmV3IElFIHBhcnNpbmcgZnVuY3Rpb24gYGJyY21mX2hhc19wbWtpZGAgb3BlcmF0ZXMgd2l0aCBsZW5ndGggYW5kIG9mZnNldCBib3VuZHMgY2hlY2tzIG9uIGluY29taW5nIElFIGJ5dGUgYXJyYXlzOyBhbnkgb3V0LW9mLWJvdW5kcyByZWFkaW5nIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtaW5nIG9mZmxvYWQgKEZCVCAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcgLSBPS0MpIGFuZCBQTUsgb2ZmbG9hZCBhY3Jvc3MgdGhlIGNvcmUgbmw4MDIxMSBzdWJzeXN0ZW0gYW5kIHRoZSBicmNtZm1hYyBkcml2ZXIuIEl0IHVwZGF0ZXMgbmV0bGluayB2YWxpZGF0aW9uIGxvZ2ljIGluIG5sODAyMTFfc2V0X3Btay9ubDgwMjExX2RlbF9wbWssIGludHJvZHVjZXMgUlNOIFBNS0lEIElFIHBhcnNpbmcsIG1vZGlmaWVzIGNvbm5lY3QgYW5kIHJvYW0gY29tcGxldGlvbiBzdGF0ZSBoYW5kbGluZywgYW5kIHVwZGF0ZXMgV0FSTl9PTiBhc3NlcnRpb25zIGluIGNvbm5lY3Rpb24vUE1LIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZXNlIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChubDgwMjExKSBhbmQgdmlydHVhbGl6ZWQgVVNCIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYThhMThkNjg2MGI3ZGU0YjVhZDE3M2M2YjEwMmJiMjg3ZmZlMGU3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDg3MmM0ODgwNmQwOTEuLjUxOWRlOTZiMDQyZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0yMTEyLDkgJiM0MzsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRzMzIgdmFsO1xuIFx0czMyIGVycjtcbiYjNDM7XHRzMzIgb2tjX2VuYWJsZTtcbiBcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTtcbiBcdGNvbnN0IHU4ICppZTtcbiBcdHUzMiBpZV9sZW47XG4mIzQzO1x0Ym9vbCBmd3N1cF9yb2FtO1xuIFx0dTMyIG9mZnNldDtcbiBcdHUxNiByc25fY2FwO1xuIFx0dTMyIG1mcDtcbkBAIC0yMTIyLDYgJiM0MzsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FO1xuIFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IGZhbHNlO1xuJiM0MztcdHByb2ZpbGUtXHUwMDNlaXNfb2tjID0gZmFsc2U7XG4mIzQzO1x0ZndzdXBfcm9hbSA9IGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fFxuJiM0MztcdFx0ICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7XG4gXG4gXHRpZiAoIXNtZS1cdTAwM2VjcnlwdG8ubl9ha21fc3VpdGVzKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yMTM4LDYgJiM0MzsyMTQzLDggQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHR2YWwgPSBXUEFfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4mIzQzO1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOlxuIFx0XHRcdHZhbCA9IFdQQV9BVVRIX1BTSztcbkBAIC0yMTUzLDExICYjNDM7MjE2MCwxNSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4mIzQzO1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfODAyMVhfU0hBMjU2OlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XG4gXHRcdFx0aWYgKHNtZS1cdTAwM2V3YW50XzF4KVxuIFx0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xuJiM0MztcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuJiM0MztcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1BTS19TSEEyNTY6XG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1BTS19TSEEyNTY7XG5AQCAtMjE3MCwxMCAmIzQzOzIxODEsMTYgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4mIzQzO1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfRlRfUFNLOlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfRlQ7XG4gXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IHRydWU7XG4mIzQzO1x0XHRcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSlcbiYjNDM7XHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuJiM0MztcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuJiM0MztcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XG4gXHRcdFx0dmFsID0gV0ZBX0FVVEhfRFBQO1xuQEAgLTIyMDQsOCAmIzQzOzIyMjEsMjIgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKVxuIFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgMVggb2ZmbG9hZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG4mIzQzO1x0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkge1xuJiM0MztcdFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXCYjMzQ7b2tjX2VuYWJsZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcdTAwMjZva2NfZW5hYmxlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7Z2V0IG9rY19lbmFibGUgZmFpbGVkICglZClcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7b2tjX2VuYWJsZSAoJWQpXFxuXCYjMzQ7LCBva2NfZW5hYmxlKTtcbiYjNDM7XHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19va2MgPSBva2NfZW5hYmxlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSlcbiBcdFx0YnJjbWZfZGJnKElORk8sIFwmIzM0O3VzaW5nIFNBRSBvZmZsb2FkXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKVxuJiM0MztcdFx0YnJjbWZfZGJnKElORk8sIFwmIzM0O3VzaW5nIHJvYW1pbmcgb2ZmbG9hZFxcblwmIzM0Oyk7XG4gXG4gXHRpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSlcbiBcdFx0Z290byBza2lwX21mcF9jb25maWc7XG5AQCAtMjQ5NCwxMyAmIzQzOzI1MjUsMTQgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0aWYgKHNtZS1cdTAwM2VjcnlwdG8ucHNrIFx1MDAyNlx1MDAyNiAhaXNfc2FlX2FrbSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFKSB7XG4tXHRcdFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT1cbi1cdFx0XHRcdCAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XG4mIzQzO1x0XHRcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcbiYjNDM7XHRcdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuJiM0MztcdFx0XHRcdFx0ICAgQlJDTUZfUFJPRklMRV9GV1NVUF9QU0spKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBkb25lO1xuIFx0XHRcdH1cbi1cdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcXG5cJiMzNDspO1xuLVx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbiBcdFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuIFx0XHRcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xuQEAgLTU5NTMsMTcgJiM0Mzs1OTg1LDI5IEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2V0X3BtayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgKmNvbmYpXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4mIzQzO1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtlbnRlclxcblwmIzM0Oyk7XG4gXG4tXHQvKiBleHBlY3QgdXNpbmcgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgMVggKi9cbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpZiAoV0FSTl9PTihpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpKVxuJiM0MztcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbiYjNDM7XHRpZiAoV0FSTl9PTihpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19mdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLmlzX29rYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGNvbmYtXHUwMDNlcG1rX2xlbiBcdTAwM2UgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTilcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4mIzQzO1x0aWYgKGlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19va2MpIHtcbiYjNDM7XHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O29rY19pbmZvX3Bta1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O29rY19pbmZvX3BtayBpb3ZhciBmYWlsZWQ6IHJldD0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGJyY21mX3NldF9wbWsoaWZwLCBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbiB9XG4gXG5AQCAtNjQyMiw2ICYjNDM7NjQ2Niw0NyBAQCBzdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicmNtZl9oYXNfcG1raWQoY29uc3QgdTggKnBhcnNlLCB1MzIgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJyY21mX3RsdiAqcnNuX2llO1xuJiM0MztcdGNvbnN0IHU4ICppZTtcbiYjNDM7XHR1MzIgaWVfbGVuO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0dTE2IGNvdW50O1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhcnNlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7XG4mIzQzO1x0aWYgKCFyc25faWUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGllID0gKGNvbnN0IHU4ICopcnNuX2llO1xuJiM0MztcdGllX2xlbiA9IHJzbl9pZS1cdTAwM2VsZW4gJiM0MzsgVExWX0hEUl9MRU47XG4mIzQzO1xuJiM0MztcdG9mZnNldCA9IFRMVl9IRFJfTEVOICYjNDM7IFdQQV9JRV9WRVJTSU9OX0xFTiAmIzQzOyBXUEFfSUVfTUlOX09VSV9MRU47XG4mIzQzO1x0aWYgKG9mZnNldCAmIzQzOyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOIFx1MDAzZT0gaWVfbGVuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IGllW29mZnNldF0gJiM0MzsgKGllW29mZnNldCAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICYjNDM7IGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xuJiM0MztcdGlmIChvZmZzZXQgJiM0MzsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiBcdTAwM2U9IGllX2xlbilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdG9mZnNldCAmIzQzOz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmIzQzOyBjb3VudCAqIFdQQV9JRV9NSU5fT1VJX0xFTjtcbiYjNDM7XHRpZiAob2Zmc2V0ICYjNDM7IFJTTl9DQVBfTEVOIFx1MDAzZT0gaWVfbGVuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IFJTTl9DQVBfTEVOO1xuJiM0MztcdGlmIChvZmZzZXQgJiM0MzsgUlNOX1BNS0lEX0NPVU5UX0xFTiBcdTAwM2UgaWVfbGVuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IGllW29mZnNldF0gJiM0MzsgKGllW29mZnNldCAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3VudCBcdTAwM2UgMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgczMyXG4gYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtNjQzNiw2ICYjNDM7NjUyMSw3IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHN0cnVjdCBicmNtZl9ic3NfaW5mb19sZSAqYmk7XG4gXHRzdHJ1Y3QgYnJjbXVfY2hhbiBjaDtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yb2FtX2luZm8gcm9hbV9pbmZvID0ge307XG4mIzQzO1x0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHR1MzIgZnJlcTtcbiBcdHMzMiBlcnIgPSAwO1xuIFx0dTggKmJ1ZjtcbkBAIC02NDgyLDE0ICYjNDM7NjU2OCwxOCBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRyb2FtX2luZm8ucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0cm9hbV9pbmZvLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLVx1MDAzZXJlc3BfaWVfbGVuO1xuIFxuJiM0MztcdGlmICgocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxuJiM0MztcdCAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGJyY21mX2hhc19wbWtpZChyb2FtX2luZm8ucmVxX2llLCByb2FtX2luZm8ucmVxX2llX2xlbikgfHxcbiYjNDM7XHQgICAgIHByb2ZpbGUtXHUwMDNlaXNfZnQgfHwgcHJvZmlsZS1cdTAwM2Vpc19va2MpKVxuJiM0MztcdFx0YXV0aG9yaXplZCA9IHRydWU7XG4mIzQzO1xuIFx0Y2ZnODAyMTFfcm9hbWVkKG5kZXYsIFx1MDAyNnJvYW1faW5mbywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGF1dGhvcml6ZWQpXG4mIzQzO1x0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiBcdGJyY21mX2RiZyhDT05OLCBcJiMzNDtSZXBvcnQgcm9hbWluZyByZXN1bHRcXG5cJiMzNDspO1xuIFxuLVx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggXHUwMDI2XHUwMDI2IHByb2ZpbGUtXHUwMDNlaXNfZnQpIHtcbi1cdFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXHUwMDNlYnNzaWQsIE5VTEwsIDAsIEdGUF9LRVJORUwpO1xuLVx0XHRicmNtZl9kYmcoQ09OTiwgXCYjMzQ7UmVwb3J0IHBvcnQgYXV0aG9yaXplZFxcblwmIzM0Oyk7XG4tXHR9XG4tXG4gXHRzZXRfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQ09OTkVDVEVELCBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXNtZV9zdGF0ZSk7XG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0V4aXRcXG5cJiMzNDspO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02NTA0LDYgJiM0Mzs2NTk0LDcgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGU7XG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSBjZmdfdG9fY29ubihjZmcpO1xuIFx0c3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7XG4mIzQzO1x0Ym9vbCBhdXRob3JpemVkO1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4gXG5AQCAtNjUyOCw3ICYjNDM7NjYxOSwxNSBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVxX2llX2xlbjtcbiBcdFx0Y29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0XHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llX2xlbjtcbiYjNDM7XHRcdGF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcbiYjNDM7XHRcdFx0ICAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLFxuJiM0MztcdFx0XHRcdFx0ICAgICBjb25uX3BhcmFtcy5yZXFfaWVfbGVuKTtcbiBcdFx0Y2ZnODAyMTFfY29ubmVjdF9kb25lKG5kZXYsIFx1MDAyNmNvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmIChhdXRob3JpemVkKVxuJiM0MztcdFx0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuIFx0XHRicmNtZl9kYmcoQ09OTiwgXCYjMzQ7UmVwb3J0IGNvbm5lY3QgcmVzdWx0IC0gY29ubmVjdGlvbiAlc1xcblwmIzM0OyxcbiBcdFx0XHQgIGNvbXBsZXRlZCA/IFwmIzM0O3N1Y2NlZWRlZFwmIzM0OyA6IFwmIzM0O2ZhaWxlZFwmIzM0Oyk7XG4gXHR9XG5AQCAtNzczMSw2ICYjNDM7NzgzMCwxMCBAQCBzdGF0aWMgaW50IGJyY21mX3NldHVwX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIFx0fVxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFX0VYVCkpXG4gXHRcdHdpcGh5LVx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9TQUU7XG4mIzQzO1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fFxuJiM0MztcdCAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQykpXG4mIzQzO1x0XHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksXG4mIzQzO1x0XHRcdFx0ICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7XG4gXHR3aXBoeS1cdTAwM2VtZ210X3N0eXBlcyA9IGJyY21mX3R4cnhfc3R5cGVzO1xuIFx0d2lwaHktXHUwMDNlbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDtcbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BOTykpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2M2U1MzQ1MjNmNTE4Li4xYWE5OTM5MGE5NTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMTI3LDcgJiM0MzsxMjcsOCBAQCBlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAge1xuIFx0QlJDTUZfUFJPRklMRV9GV1NVUF9OT05FLFxuIFx0QlJDTUZfUFJPRklMRV9GV1NVUF9QU0ssXG4gXHRCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYLFxuLVx0QlJDTUZfUFJPRklMRV9GV1NVUF9TQUVcbiYjNDM7XHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSxcbiYjNDM7XHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU1cbiB9O1xuIFxuIC8qKlxuQEAgLTE2NCw2ICYjNDM7MTY1LDcgQEAgZW51bSBicmNtZl9tZ210X3R4X3N0YXR1cyB7XG4gICogQGJzc2lkOiBic3NpZCBvZiBqb2luZWQvam9pbmluZyBpYnNzLlxuICAqIEBzZWM6IHNlY3VyaXR5IGluZm9ybWF0aW9uLlxuICAqIEBrZXk6IGtleSBpbmZvcm1hdGlvblxuJiM0MzsgKiBAaXNfb2tjOiBPS0MgaXMgdXNlZCBmb3IgY3VycmVudCBjb25uZWN0aW9uLlxuICAqL1xuIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbkBAIC0xNzIsNiAmIzQzOzE3NCw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB1c2VfZndzdXA7XG4gXHR1MTYgdXNlX2Z3YXV0aDtcbiBcdGJvb2wgaXNfZnQ7XG4mIzQzO1x0Ym9vbCBpc19va2M7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuY1xuaW5kZXggNDg4MzY0ZWY4ZmYyYS4uY2MxOWU1ZTdlYmY1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcbkBAIC00NSw2ICYjNDM7NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7XG4gXHR7IEJSQ01GX0ZFQVRfU0FFLCBcJiMzNDtzYWUgXCYjMzQ7IH0sXG4gXHR7IEJSQ01GX0ZFQVRfRldBVVRILCBcJiMzNDtpZGF1dGhcJiMzNDsgfSxcbiBcdHsgQlJDTUZfRkVBVF9TQUVfRVhULCBcJiMzNDtzYWVfZXh0XCYjMzQ7IH0sXG4mIzQzO1x0eyBCUkNNRl9GRUFUX0ZCVCwgXCYjMzQ7ZmJ0IFwmIzM0OyB9LFxuJiM0MztcdHsgQlJDTUZfRkVBVF9PS0MsIFwmIzM0O29rY1wmIzM0OyB9LFxuIH07XG4gXG4gI2lmZGVmIERFQlVHXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmhcbmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG5AQCAtNTksNyAmIzQzOzU5LDkgQEBcbiBcdEJSQ01GX0ZFQVRfREVGKFNDQU5fVjIpIFxcXG4gXHRCUkNNRl9GRUFUX0RFRihQTUtJRF9WMikgXFxcbiBcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcXFxuLVx0QlJDTUZfRkVBVF9ERUYoU0FFX0VYVClcbiYjNDM7XHRCUkNNRl9GRUFUX0RFRihTQUVfRVhUKSBcXFxuJiM0MztcdEJSQ01GX0ZFQVRfREVGKEZCVCkgXFxcbiYjNDM7XHRCUkNNRl9GRUFUX0RFRihPS0MpXG4gXG4gLypcbiAgKiBRdWlya3M6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjkyMGQ1ZTJkOTk2NjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtNzExMCw2ICYjNDM7NzExMCwxMCBAQCBlbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7XG4gICogQE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPQkVfQVA6IERyaXZlciBzdXBwb3J0cyBwcm9iaW5nIHRoZSBhc3NvY2lhdGVkIEFQXG4gICpcdGluIFNUQSBtb2RlIHVzaW5nIEBOTDgwMjExX0NNRF9QUk9CRV9QRUVSLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEOiBEcml2ZXIgc3VwcG9ydHMgZmFzdCByb2FtaW5nXG4mIzQzOyAqXHRvZmZsb2FkIGluIHN0YXRpb24gbW9kZSwgaW5jbHVkaW5nIEZhc3QgVHJhbnNpdGlvbiBvciBPcHBvcnR1bmlzdGljXG4mIzQzOyAqXHRLZXkgQ2FjaGluZy5cbiYjNDM7ICpcbiAgKiBATlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBudW1iZXIgb2YgZXh0ZW5kZWQgZmVhdHVyZXMuXG4gICogQE1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUzogaGlnaGVzdCBleHRlbmRlZCBmZWF0dXJlIGluZGV4LlxuICAqL1xuQEAgLTcxOTIsNiAmIzQzOzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xuIFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9ST0NfQUREUl9GSUxURVIsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1NFVF9LRVlfTFRGX1NFRUQsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLFxuJiM0MztcdE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQsXG4gXG4gXHQvKiBhZGQgbmV3IGZlYXR1cmVzIGJlZm9yZSB0aGUgZGVmaW5pdGlvbiBiZWxvdyAqL1xuIFx0TlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA0NGYyYmFkMDg2NzA1Li5lNDg1MDEyOWE1ODJiIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTE4NDM0LDYgJiM0MzsxODQzNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4mIzQzO1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFx1MDAyNnJkZXYtXHUwMDNld2lwaHk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9O1xuQEAgLTE4NDQyLDcgJiM0MzsxODQ0Myw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuJiM0MztcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuIFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbkBAIC0xODQ3Miw2ICYjNDM7MTg0NzUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbiYjNDM7XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIFx0Y29uc3QgdTggKmFhO1xuQEAgLTE4NDgwLDcgJiM0MzsxODQ4NCw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuJiM0MztcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuIFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX3NldF9wbWsmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfcG1rJiMzNDssCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfYnNzX3JvYW1pbmdfZG9uZSYjMzQ7LAogICAgJiMzNDticmNtZl9ic3NfY29ubmVjdF9kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX3NldHVwX3dpcGh5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtaW5nIG9mZmxvYWQgKEZCVCAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcgLSBPS0MpIGFuZCBQTUsgb2ZmbG9hZCBhY3Jvc3MgdGhlIGNvcmUgbmw4MDIxMSBzdWJzeXN0ZW0gYW5kIHRoZSBicmNtZm1hYyBkcml2ZXIuIEl0IHVwZGF0ZXMgbmV0bGluayB2YWxpZGF0aW9uIGxvZ2ljIGluIG5sODAyMTFfc2V0X3Btay9ubDgwMjExX2RlbF9wbWssIGludHJvZHVjZXMgUlNOIFBNS0lEIElFIHBhcnNpbmcsIG1vZGlmaWVzIGNvbm5lY3QgYW5kIHJvYW0gY29tcGxldGlvbiBzdGF0ZSBoYW5kbGluZywgYW5kIHVwZGF0ZXMgV0FSTl9PTiBhc3NlcnRpb25zIGluIGNvbm5lY3Rpb24vUE1LIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZXNlIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChubDgwMjExKSBhbmQgdmlydHVhbGl6ZWQgVVNCIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYThhMThkNjg2MGI3ZGU0YjVhZDE3M2M2YjEwMmJiMjg3ZmZlMGU3MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwppbmRleCA4NzJjNDg4MDZkMDkxLi41MTlkZTk2YjA0MmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwpAQCAtMjExMiw5ICYjNDM7MjExMiwxMSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCXN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtJmd0O2RydnI7CiAJczMyIHZhbDsKIAlzMzIgZXJyOwomIzQzOwlzMzIgb2tjX2VuYWJsZTsKIAljb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7CiAJY29uc3QgdTggKmllOwogCXUzMiBpZV9sZW47CiYjNDM7CWJvb2wgZndzdXBfcm9hbTsKIAl1MzIgb2Zmc2V0OwogCXUxNiByc25fY2FwOwogCXUzMiBtZnA7CkBAIC0yMTIyLDYgJiM0MzsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIAogCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORTsKIAlwcm9maWxlLSZndDtpc19mdCA9IGZhbHNlOwomIzQzOwlwcm9maWxlLSZndDtpc19va2MgPSBmYWxzZTsKJiM0MzsJZndzdXBfcm9hbSA9IGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fAomIzQzOwkJICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7CiAKIAlpZiAoIXNtZS0mZ3Q7Y3J5cHRvLm5fYWttX3N1aXRlcykKIAkJcmV0dXJuIDA7CkBAIC0yMTM4LDYgJiM0MzsyMTQzLDggQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIAkJCXZhbCA9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEOwogCQkJaWYgKHNtZS0mZ3Q7d2FudF8xeCkKIAkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX1BTSzoKIAkJCXZhbCA9IFdQQV9BVVRIX1BTSzsKQEAgLTIxNTMsMTEgJiM0MzsyMTYwLDE1IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJCQl2YWwgPSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQ7CiAJCQlpZiAoc21lLSZndDt3YW50XzF4KQogCQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7CiYjNDM7CQkJZWxzZSBpZiAoZndzdXBfcm9hbSkKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9BS01fU1VJVEVfODAyMVhfU0hBMjU2OgogCQkJdmFsID0gV1BBMl9BVVRIXzFYX1NIQTI1NjsKIAkJCWlmIChzbWUtJmd0O3dhbnRfMXgpCiAJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDsKJiM0MzsJCQllbHNlIGlmIChmd3N1cF9yb2FtKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FLTV9TVUlURV9QU0tfU0hBMjU2OgogCQkJdmFsID0gV1BBMl9BVVRIX1BTS19TSEEyNTY7CkBAIC0yMTcwLDEwICYjNDM7MjE4MSwxNiBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCQkJcHJvZmlsZS0mZ3Q7aXNfZnQgPSB0cnVlOwogCQkJaWYgKHNtZS0mZ3Q7d2FudF8xeCkKIAkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX0ZUX1BTSzoKIAkJCXZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfRlQ7CiAJCQlwcm9maWxlLSZndDtpc19mdCA9IHRydWU7CiYjNDM7CQkJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRldTVVApKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKJiM0MzsJCQllbHNlIGlmIChmd3N1cF9yb2FtKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQOgogCQkJdmFsID0gV0ZBX0FVVEhfRFBQOwpAQCAtMjIwNCw4ICYjNDM7MjIyMSwyMiBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCiAJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKQogCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyAxWCBvZmZsb2FkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fAomIzQzOwkgICAgcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgewomIzQzOwkJZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgJiMzNDtva2NfZW5hYmxlJiMzNDssCiYjNDM7CQkJCQkgICAgICAgJmFtcDtva2NfZW5hYmxlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlicGh5X2VycihkcnZyLCAmIzM0O2dldCBva2NfZW5hYmxlIGZhaWxlZCAoJWQpXG4mIzM0OywgZXJyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJYnJjbWZfZGJnKElORk8sICYjMzQ7b2tjX2VuYWJsZSAoJWQpXG4mIzM0Oywgb2tjX2VuYWJsZSk7CiYjNDM7CQkJcHJvZmlsZS0mZ3Q7aXNfb2tjID0gb2tjX2VuYWJsZTsKJiM0MzsJCX0KJiM0MzsJfQogCWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpCiAJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIFNBRSBvZmZsb2FkXG4mIzM0Oyk7CiYjNDM7CWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKQomIzQzOwkJYnJjbWZfZGJnKElORk8sICYjMzQ7dXNpbmcgcm9hbWluZyBvZmZsb2FkXG4mIzM0Oyk7CiAKIAlpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSkKIAkJZ290byBza2lwX21mcF9jb25maWc7CkBAIC0yNDk0LDEzICYjNDM7MjUyNSwxNCBAQCBicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCiAJCWlmIChzbWUtJmd0O2NyeXB0by5wc2sgJmFtcDsmYW1wOyAhaXNfc2FlX2FrbSAmYW1wOyZhbXA7CiAJCSAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHsKLQkJCWlmIChXQVJOX09OKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPQotCQkJCSAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7CiYjNDM7CQkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHsKJiM0MzsJCQkJYnJjbWZfZGJnKElORk8sICYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcbiYjMzQ7KTsKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7CiYjNDM7CQkJfSBlbHNlIGlmIChXQVJOX09OKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPQomIzQzOwkJCQkJICAgQlJDTUZfUFJPRklMRV9GV1NVUF9QU0spKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9Ci0JCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxuJiMzNDspOwotCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7CiAJCX0KIAkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHsKIAkJCS8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqLwpAQCAtNTk1MywxNyAmIzQzOzU5ODUsMjkgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IGJyY21mX2lmICppZnA7CiYjNDM7CXN0cnVjdCBicmNtZl9wdWIgKmRydnI7CiYjNDM7CWludCByZXQ7CiAKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7ZW50ZXJcbiYjMzQ7KTsKIAotCS8qIGV4cGVjdCB1c2luZyBmaXJtd2FyZSBzdXBwbGljYW50IGZvciAxWCAqLwogCWlmcCA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKFdBUk5fT04oaWZwLSZndDt2aWYtJmd0O3Byb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpKQomIzQzOwlkcnZyID0gaWZwLSZndDtkcnZyOwomIzQzOwlpZiAoV0FSTl9PTihpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWlmcC0mZ3Q7dmlmLSZndDtwcm9maWxlLmlzX2Z0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaWZwLSZndDt2aWYtJmd0O3Byb2ZpbGUuaXNfb2tjKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29uZi0mZ3Q7cG1rX2xlbiAmZ3Q7IEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pCiAJCXJldHVybiAtRVJBTkdFOwogCiYjNDM7CWlmIChpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19va2MpIHsKJiM0MzsJCXJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsICYjMzQ7b2tjX2luZm9fcG1rJiMzNDssCiYjNDM7CQkJCQkgICAgICAgY29uZi0mZ3Q7cG1rLCBjb25mLSZndDtwbWtfbGVuKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWJwaHlfZXJyKGRydnIsICYjMzQ7b2tjX2luZm9fcG1rIGlvdmFyIGZhaWxlZDogcmV0PSVkXG4mIzM0OywKJiM0MzsJCQkJIHJldCk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gYnJjbWZfc2V0X3BtayhpZnAsIGNvbmYtJmd0O3BtaywgY29uZi0mZ3Q7cG1rX2xlbik7CiB9CiAKQEAgLTY0MjIsNiAmIzQzOzY0NjYsNDcgQEAgc3RhdGljIHMzMiBicmNtZl9nZXRfYXNzb2NfaWVzKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBib29sIGJyY21mX2hhc19wbWtpZChjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7CiYjNDM7CWNvbnN0IHU4ICppZTsKJiM0MzsJdTMyIGllX2xlbjsKJiM0MzsJdTMyIG9mZnNldDsKJiM0MzsJdTE2IGNvdW50OwomIzQzOwomIzQzOwlpZiAoIXBhcnNlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7CiYjNDM7CWlmICghcnNuX2llKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZSA9IChjb25zdCB1OCAqKXJzbl9pZTsKJiM0MzsJaWVfbGVuID0gcnNuX2llLSZndDtsZW4gJiM0MzsgVExWX0hEUl9MRU47CiYjNDM7CiYjNDM7CW9mZnNldCA9IFRMVl9IRFJfTEVOICYjNDM7IFdQQV9JRV9WRVJTSU9OX0xFTiAmIzQzOyBXUEFfSUVfTUlOX09VSV9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmZ3Q7PSBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNvdW50ID0gaWVbb2Zmc2V0XSAmIzQzOyAoaWVbb2Zmc2V0ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwlvZmZzZXQgJiM0Mzs9IFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gJiM0MzsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmZ3Q7PSBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNvdW50ID0gaWVbb2Zmc2V0XSAmIzQzOyAoaWVbb2Zmc2V0ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwlvZmZzZXQgJiM0Mzs9IFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gJiM0MzsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgUlNOX0NBUF9MRU4gJmd0Oz0gaWVfbGVuKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvZmZzZXQgJiM0Mzs9IFJTTl9DQVBfTEVOOwomIzQzOwlpZiAob2Zmc2V0ICYjNDM7IFJTTl9QTUtJRF9DT1VOVF9MRU4gJmd0OyBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNvdW50ID0gaWVbb2Zmc2V0XSAmIzQzOyAoaWVbb2Zmc2V0ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwomIzQzOwlyZXR1cm4gY291bnQgJmd0OyAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzMzIKIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LApAQCAtNjQzNiw2ICYjNDM7NjUyMSw3IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAlzdHJ1Y3QgYnJjbWZfYnNzX2luZm9fbGUgKmJpOwogCXN0cnVjdCBicmNtdV9jaGFuIGNoOwogCXN0cnVjdCBjZmc4MDIxMV9yb2FtX2luZm8gcm9hbV9pbmZvID0ge307CiYjNDM7CWJvb2wgYXV0aG9yaXplZCA9IGZhbHNlOwogCXUzMiBmcmVxOwogCXMzMiBlcnIgPSAwOwogCXU4ICpidWY7CkBAIC02NDgyLDE0ICYjNDM7NjU2OCwxOCBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJcm9hbV9pbmZvLnJlc3BfaWUgPSBjb25uX2luZm8tJmd0O3Jlc3BfaWU7CiAJcm9hbV9pbmZvLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLSZndDtyZXNwX2llX2xlbjsKIAomIzQzOwlpZiAoKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8CiYjNDM7CSAgICAgcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgJmFtcDsmYW1wOwomIzQzOwkgICAgKGJyY21mX2hhc19wbWtpZChyb2FtX2luZm8ucmVxX2llLCByb2FtX2luZm8ucmVxX2llX2xlbikgfHwKJiM0MzsJICAgICBwcm9maWxlLSZndDtpc19mdCB8fCBwcm9maWxlLSZndDtpc19va2MpKQomIzQzOwkJYXV0aG9yaXplZCA9IHRydWU7CiYjNDM7CiAJY2ZnODAyMTFfcm9hbWVkKG5kZXYsICZhbXA7cm9hbV9pbmZvLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGF1dGhvcml6ZWQpCiYjNDM7CQljZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS0mZ3Q7YnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCQkgR0ZQX0tFUk5FTCk7CiAJYnJjbWZfZGJnKENPTk4sICYjMzQ7UmVwb3J0IHJvYW1pbmcgcmVzdWx0XG4mIzM0Oyk7CiAKLQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggJmFtcDsmYW1wOyBwcm9maWxlLSZndDtpc19mdCkgewotCQljZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS0mZ3Q7YnNzaWQsIE5VTEwsIDAsIEdGUF9LRVJORUwpOwotCQlicmNtZl9kYmcoQ09OTiwgJiMzNDtSZXBvcnQgcG9ydCBhdXRob3JpemVkXG4mIzM0Oyk7Ci0JfQotCiAJc2V0X2JpdChCUkNNRl9WSUZfU1RBVFVTX0NPTk5FQ1RFRCwgJmFtcDtpZnAtJmd0O3ZpZi0mZ3Q7c21lX3N0YXRlKTsKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RXhpdFxuJiMzNDspOwogCXJldHVybiBlcnI7CkBAIC02NTA0LDYgJiM0Mzs2NTk0LDcgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gJmFtcDtpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZTsKIAlzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSBjZmdfdG9fY29ubihjZmcpOwogCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zOwomIzQzOwlib29sIGF1dGhvcml6ZWQ7CiAKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RW50ZXJcbiYjMzQ7KTsKIApAQCAtNjUyOCw3ICYjNDM7NjYxOSwxNSBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJCWNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tJmd0O3JlcV9pZV9sZW47CiAJCWNvbm5fcGFyYW1zLnJlc3BfaWUgPSBjb25uX2luZm8tJmd0O3Jlc3BfaWU7CiAJCWNvbm5fcGFyYW1zLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLSZndDtyZXNwX2llX2xlbjsKJiM0MzsJCWF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8CiYjNDM7CQkJICAgICAgcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgYnJjbWZfaGFzX3Bta2lkKGNvbm5fcGFyYW1zLnJlcV9pZSwKJiM0MzsJCQkJCSAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7CiAJCWNmZzgwMjExX2Nvbm5lY3RfZG9uZShuZGV2LCAmYW1wO2Nvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmIChhdXRob3JpemVkKQomIzQzOwkJCWNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLSZndDtic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWJyY21mX2RiZyhDT05OLCAmIzM0O1JlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcbiYjMzQ7LAogCQkJICBjb21wbGV0ZWQgPyAmIzM0O3N1Y2NlZWRlZCYjMzQ7IDogJiMzNDtmYWlsZWQmIzM0Oyk7CiAJfQpAQCAtNzczMSw2ICYjNDM7NzgzMCwxMCBAQCBzdGF0aWMgaW50IGJyY21mX3NldHVwX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBicmNtZl9pZiAqaWZwKQogCX0KIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9TQUVfRVhUKSkKIAkJd2lwaHktJmd0O2ZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9TQUU7CiYjNDM7CWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZCVCkgfHwKJiM0MzsJICAgIGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfT0tDKSkKJiM0MzsJCXdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwKJiM0MzsJCQkJICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7CiAJd2lwaHktJmd0O21nbXRfc3R5cGVzID0gYnJjbWZfdHhyeF9zdHlwZXM7CiAJd2lwaHktJmd0O21heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbiA9IDUwMDA7CiAJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE5PKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAppbmRleCA2M2U1MzQ1MjNmNTE4Li4xYWE5OTM5MGE5NTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaApAQCAtMTI3LDcgJiM0MzsxMjcsOCBAQCBlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAgewogCUJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSwKIAlCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSywKIAlCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYLAotCUJSQ01GX1BST0ZJTEVfRldTVVBfU0FFCiYjNDM7CUJSQ01GX1BST0ZJTEVfRldTVVBfU0FFLAomIzQzOwlCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0KIH07CiAKIC8qKgpAQCAtMTY0LDYgJiM0MzsxNjUsNyBAQCBlbnVtIGJyY21mX21nbXRfdHhfc3RhdHVzIHsKICAqIEBic3NpZDogYnNzaWQgb2Ygam9pbmVkL2pvaW5pbmcgaWJzcy4KICAqIEBzZWM6IHNlY3VyaXR5IGluZm9ybWF0aW9uLgogICogQGtleToga2V5IGluZm9ybWF0aW9uCiYjNDM7ICogQGlzX29rYzogT0tDIGlzIHVzZWQgZm9yIGN1cnJlbnQgY29ubmVjdGlvbi4KICAqLwogc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgewogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTE3Miw2ICYjNDM7MTc0LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgewogCWVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB1c2VfZndzdXA7CiAJdTE2IHVzZV9md2F1dGg7CiAJYm9vbCBpc19mdDsKJiM0MzsJYm9vbCBpc19va2M7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jCmluZGV4IDQ4ODM2NGVmOGZmMmEuLmNjMTllNWU3ZWJmNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYwpAQCAtNDUsNiAmIzQzOzQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0gewogCXsgQlJDTUZfRkVBVF9TQUUsICYjMzQ7c2FlICYjMzQ7IH0sCiAJeyBCUkNNRl9GRUFUX0ZXQVVUSCwgJiMzNDtpZGF1dGgmIzM0OyB9LAogCXsgQlJDTUZfRkVBVF9TQUVfRVhULCAmIzM0O3NhZV9leHQmIzM0OyB9LAomIzQzOwl7IEJSQ01GX0ZFQVRfRkJULCAmIzM0O2ZidCAmIzM0OyB9LAomIzQzOwl7IEJSQ01GX0ZFQVRfT0tDLCAmIzM0O29rYyYjMzQ7IH0sCiB9OwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oCmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaApAQCAtNTksNyAmIzQzOzU5LDkgQEAKIAlCUkNNRl9GRUFUX0RFRihTQ0FOX1YyKSBcCiAJQlJDTUZfRkVBVF9ERUYoUE1LSURfVjIpIFwKIAlCUkNNRl9GRUFUX0RFRihQTUtJRF9WMykgXAotCUJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpCiYjNDM7CUJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpIFwKJiM0MzsJQlJDTUZfRkVBVF9ERUYoRkJUKSBcCiYjNDM7CUJSQ01GX0ZFQVRfREVGKE9LQykKIAogLyoKICAqIFF1aXJrczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCmluZGV4IDAyMDM4N2Q3NjQxMjIuLjkyMGQ1ZTJkOTk2NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaApAQCAtNzExMCw2ICYjNDM7NzExMCwxMCBAQCBlbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7CiAgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9QUk9CRV9BUDogRHJpdmVyIHN1cHBvcnRzIHByb2JpbmcgdGhlIGFzc29jaWF0ZWQgQVAKICAqCWluIFNUQSBtb2RlIHVzaW5nIEBOTDgwMjExX0NNRF9QUk9CRV9QRUVSLgogICoKJiM0MzsgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRDogRHJpdmVyIHN1cHBvcnRzIGZhc3Qgcm9hbWluZwomIzQzOyAqCW9mZmxvYWQgaW4gc3RhdGlvbiBtb2RlLCBpbmNsdWRpbmcgRmFzdCBUcmFuc2l0aW9uIG9yIE9wcG9ydHVuaXN0aWMKJiM0MzsgKglLZXkgQ2FjaGluZy4KJiM0MzsgKgogICogQE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUzogbnVtYmVyIG9mIGV4dGVuZGVkIGZlYXR1cmVzLgogICogQE1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUzogaGlnaGVzdCBleHRlbmRlZCBmZWF0dXJlIGluZGV4LgogICovCkBAIC03MTkyLDYgJiM0Mzs3MTk2LDcgQEAgZW51bSBubDgwMjExX2V4dF9mZWF0dXJlX2luZGV4IHsKIAlOTDgwMjExX0VYVF9GRUFUVVJFX1JPQ19BRERSX0ZJTFRFUiwKIAlOTDgwMjExX0VYVF9GRUFUVVJFX1NFVF9LRVlfTFRGX1NFRUQsCiAJTkw4MDIxMV9FWFRfRkVBVFVSRV9QUk9CRV9BUCwKJiM0MzsJTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCwKIAogCS8qIGFkZCBuZXcgZmVhdHVyZXMgYmVmb3JlIHRoZSBkZWZpbml0aW9uIGJlbG93ICovCiAJTlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNDRmMmJhZDA4NjcwNS4uZTQ4NTAxMjlhNTgyYiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xODQzNCw2ICYjNDM7MTg0MzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tJmd0O3VzZXJfcHRyWzBdOwomIzQzOwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmFtcDtyZGV2LSZndDt3aXBoeTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMV07CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgcG1rX2NvbmYgPSB7fTsKQEAgLTE4NDQyLDcgJiM0MzsxODQ0Myw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJICAgIHdkZXYtJmd0O2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksCiYjNDM7CWlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LAogCQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTE4NDcyLDYgJiM0MzsxODQ3NSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tJmd0O3VzZXJfcHRyWzBdOwomIzQzOwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmFtcDtyZGV2LSZndDt3aXBoeTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMV07CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKIAljb25zdCB1OCAqYWE7CkBAIC0xODQ4MCw3ICYjNDM7MTg0ODQsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCSAgICB3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LAomIzQzOwlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LAomIzQzOwkJCQkgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSwKIAkJCQkgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBXaXJlbGVzcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGBicmNtZm1hY2Agd2lyZWxlc3MgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWNgIGRpcmVjdG9yeS4gSXQgYWxzbyBtb2RpZmllcyBgaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaGAgYW5kIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0JiMzOTtzIGNvcmUgd2lyZWxlc3MgbmV0bGluayBmdW5jdGlvbmFsaXR5LgoKU3BlY2lmaWNhbGx5LCB0aGUgY29yZSBjaGFuZ2UgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgY2hlY2tzIHJlbGF0ZWQgdG8gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgLiBUaGlzIGludm9sdmVzIGV4dGVuZGluZyBhbiBleGlzdGluZyBjaGVjayB3aXRoIGBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEYC4gTm93LCB0aGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgYG5sODAyMTEuY2AgaGFuZGxlcyB0aGVzZSBjb21tYW5kcyB2aWEgZ2VuZXJpYyBuZXRsaW5rIChgTkw4MDIxMV9DTURfU0VUX1BNS2AgLyBgTkw4MDIxMV9DTURfREVMX1BNS2ApIGZyb20gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBmdXp6aW5nISBBbmQsIGltcG9ydGFudGx5LCBgYnJjbWZtYWNgICpoYXMqIFVTQiBzdXBwb3J0IChgQ09ORklHX0JSQ01GTUFDX1VTQmApLCBtZWFuaW5nIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgYSBVU0IgZW11bGF0aW9uIHNldHVwIGlmIG5lZWRlZCwgbWFraW5nIGl0IGZ1enphYmxlLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlLgoKRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGluIHRoZSBgYnJjbWZtYWNgIGRyaXZlciBpdHNlbGYsIHBhcnRpY3VsYXJseSBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCwgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgLCBhbmQgYGJyY21mX2hhc19wbWtpZGAgbm93IGluY2x1ZGUgbmV3IHBhcnNpbmcgbG9naWMgYW5kIHNvbWUgYFdBUk5fT05gIGNoZWNrcy4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIChpbiBhIGdvb2Qgd2F5ISksIGltcGx5aW5nIG5ldyBjb2RlIHBhdGhzIGFuZCBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHRvIGZ1enppbmcuIFRoZXNlIGNoZWNrcyBhcmUgbm93IGNoZWNraW5nIGlmIGBpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCAmYW1wOyZhbXA7ICFpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19mdCAmYW1wOyZhbXA7ICFpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19va2NgLiBUaGlzIGlzIGFsbCBjcml0aWNhbCBjb25maWd1cmF0aW9uIGFuZCBmbG93IGNvbnRyb2wgbG9naWMuCgpTbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIFRoZSBuZXRsaW5rIGludGVyZmFjZSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGFuZCB0aGUgY2hhbmdlcyBpbmNsdWRlIG5ldyBsb2dpYywgcGFydGljdWxhcmx5IGluIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhIGxpa2Ugd2lyZWxlc3Mgc2VjdXJpdHkgYW5kIHJvYW1pbmcuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY29kZSBhbmQgZGVwZW5kZW5jaWVzIG1vcmUgZGVlcGx5IChLY29uZmlnLCBldGMuKSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gQnV0IGJhc2VkIG9uIHRoaXMgaW5pdGlhbCBhbmFseXNpcywgaXQmIzM5O3MgYSBzdHJvbmcgeWVzIGZvciBzeXprYWxsZXIgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOTDgwMjExX0NNRF9TRVRfUE1LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMDcxLVx0e1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDA3MjpcdFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUtTQSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNzMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDUzLVx0e1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ1NDpcdFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUssXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDU1LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2NvbmZpZyBJbnNwZWN0aW9uIGZvciBDRkc4MDIxMSBhbmQgQlJDTUZNQUMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucyBiZXR3ZWVuIENGRzgwMjExIGFuZCBCUkNNRk1BQyB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgZXhpc3QsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gYm90aCBkcml2ZXJzLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlaXIgYENPTkZJR19gIG9wdGlvbnMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgbW9kdWxlcyBvciBidWlsdC1pbiB0byB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBvcHRpb25zIHNldCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHVudXN1YWwgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgdGhhdCBtaWdodCBtYW5pZmVzdCBhcyBidWlsZCBlcnJvcnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBsYXRlciBvbi4gSXTigJlzIGFib3V0IGVuc3VyaW5nIHNlYW1sZXNzIGludGVncmF0aW9uLCBzbyBJIG11c3QgY29uc2lkZXIgaG93IHRoZXNlIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIga2VybmVsIHdpcmVsZXNzIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzE0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEJSQ004MDIxMSBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEkmIzM5O20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHF1aXJrcyBiYWtlZCBpbnRvIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBlc3NlbnRpYWxseSBiZSBteSByb2FkbWFwIHRvIHNlZSB3aGF0IEJyb2FkY29tIGZlYXR1cmVzIGFuZCB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFuZCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEJSQ01VVElMXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBCUkNNU01BQ1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gSUVFRTgwMi4xMW4gUENJZSBTb2Z0TUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA4Olx0XHRkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEVcbiAgIDk6XHRcdHNlbGVjdCBCQ01BXG4gIDEwOlx0XHRzZWxlY3QgQlJDTVVUSUxcbiAgMTE6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMTI6XHRcdHNlbGVjdCBDT1JESUNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQQ0llIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gIDE1Olx0XHQgIElFRUU4MDIuMTFuIFNvZnRNQUMgY2hpcHNldHMuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIHRoZVxuICAxNjpcdFx0ICBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgYnJjbXNtYWMua28uXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIEJSQ01TTUFDX0xFRFNcbiAgMTk6XHRcdGRlZl9ib29sIEJSQ01TTUFDIFx1MDAyNlx1MDAyNiBCQ01BX0RSSVZFUl9HUElPIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9MRURTXG4gIDIwOlx0XHRoZWxwXG4gIDIxOlx0XHQgIFRoZSBicmNtc21hYyBMRUQgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGVcbiAgMjI6XHRcdCAgQkNNQV9EUklWRVJfR1BJTyBkcml2ZXIsIGFuZCBpdCBvbmx5IHdvcmtzIGlmIExFRCBzdXBwb3J0XG4gIDIzOlx0XHQgIGlzIGVuYWJsZWQgYW5kIHJlYWNoYWJsZSBmcm9tIHRoZSBkcml2ZXIgbW9kdWxlLlxuICAyNDpcdFxuICAyNTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUkNNX1RSQUNJTkdcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7QnJvYWRjb20gZGV2aWNlIHRyYWNpbmdcJiMzNDtcbiAgMjk6XHRcdGRlcGVuZHMgb24gQlJDTVNNQUMgfHwgQlJDTUZNQUNcbiAgMzA6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlcnMgd2lsbCByZWdpc3RlclxuICAzMzpcdFx0ICB3aXRoIGZ0cmFjZSB0byBkdW1wIGV2ZW50IGluZm9ybWF0aW9uIGludG8gdGhlIHRyYWNlIHJpbmdidWZmZXIuXG4gIDM0Olx0XHQgIFRyYWNpbmcgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGltZSB0byBhaWQgaW4gZGVidWdnaW5nIHdpcmVsZXNzXG4gIDM1Olx0XHQgIGlzc3Vlcy4gVGhpcyBvcHRpb24gYWRkcyBhIHNtYWxsIGFtb3VudCBvZiBvdmVyaGVhZCB3aGVuIHRyYWNpbmdcbiAgMzY6XHRcdCAgaXMgZGlzYWJsZWQuIElmIHVuc3VyZSwgc2F5IFkgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byBiZXR0ZXIgaGVscFxuICAzNzpcdFx0ICB5b3Ugd2hlbiB3aXJlbGVzcyBwcm9ibGVtcyBvY2N1ci5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgQlJDTURCR1xuICA0MDpcdFx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXCYjMzQ7XG4gIDQxOlx0XHRkZXBlbmRzIG9uIEJSQ01TTUFDIHx8IEJSQ01GTUFDXG4gIDQyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVAgaWYgQlJDTUZNQUNcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgU2VsZWN0aW5nIHRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIGNvZGUgZm9yIGRlYnVnIHB1cnBvc2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTg0CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYnJjbWZtYWMgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJyb2FkY29tIGZ1bGxtYWMgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHRoYXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ludGF4OiBgY29uZmlnYCBibG9ja3MsIGBib29sYCBhbmQgYHRyaXN0YXRlYCBvcHRpb25zLCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIHB1bGwgaW4gc3VwcG9ydGluZyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGVscCB0ZXh0IHRvIGd1aWRlIHVzZXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYnJjbWZtYWMgZHJpdmVyIGFzIGEgd2hvbGUsIHBsdXMgYW55IGdyYW51bGFyIGNvbnRyb2xzIGZvciBzcGVjaWZpYyBmZWF0dXJlcyBvciBoYXJkd2FyZSB2YXJpYW50cy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbmVlZCB0byBiZSBwcmVzZW50IGZvciB0aGUgYnJjbWZtYWMgZHJpdmVyIHRvIGJ1aWxkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiBoZXJlLCBhbnl0aGluZyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQsIHJlZ3VsYXRvcnkgZG9tYWlucywgb3IgZmlybXdhcmUgbG9hZGluZz8gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGRyaXZlciYjMzk7cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gY29udHJpYnV0ZSB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIEJSQ01GTUFDXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA0Olx0XHRzZWxlY3QgQlJDTVVUSUxcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxuICAgNzpcdFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXG4gICA4Olx0XHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkXG4gICA5Olx0XHQgIGJyY21mbWFjLmtvLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBCUkNNRk1BQ19TRElPXG4gIDE4Olx0XHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcbiAgMjA6XHRcdGRlcGVuZHMgb24gQlJDTUZNQUNcbiAgMjE6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXG4gIDIyOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDI2Olx0XHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXG4gIDI3Olx0XHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhIFNESU8gd2lyZWxlc3MgY2FyZC5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgQlJDTUZNQUNfVVNCXG4gIDMwOlx0XHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIChVU0IgPSB5IHx8IFVTQiA9IEJSQ01GTUFDKVxuICAzMjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAzMzpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMzQ6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMzc6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMzg6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFVTQiB3aXJlbGVzcyBjYXJkLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXG4gIDQxOlx0XHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbiAgNDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDQ4Olx0XHQgIElFRUU4MDIuMTFhYyBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICA0OTpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gUENJRSB3aXJlbGVzcyBjYXJkLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzMQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBXaXJlbGVzcyBGYXN0IFJvYW1pbmcgT2ZmbG9hZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBUaGlzIHBhdGNoIGhpdHMgYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHdpdGggY2hhbmdlcyB0byBgbmw4MDIxMV9zZXRfcG1rYCBhbmQgYG5sODAyMTFfZGVsX3Bta2AsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBOZXRsaW5rIGludGVyZmFjZXMgYXJlIGFsd2F5cyBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgYG5sODAyMTFgIGlzIHBhcnQgb2YgdGhlIGNvcmUgd2lyZWxlc3MgbmV0bGluayBpbnRlcmZhY2UsIHNvIHRoYXQmIzM5O3MgYSBkaXJlY3Qgcm91dGUgaW4gdmlhIGBORVRMSU5LX0dFTkVSSUNgLgoKVGhlbiwgd2UgaGF2ZSB0aGUgYGJyY21mbWFjYCBkcml2ZXIgY29kZTogYGJyY21mX3NldF9rZXlfbWdtdGAsIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCwgYGJyY21mX2NmZzgwMjExX3NldF9wbWtgLCBgYnJjbWZfaGFzX3Bta2lkYCwgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgLCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIGFuZCBgYnJjbWZfc2V0dXBfd2lwaHlgLiBUaGUgcHJlc2VuY2Ugb2YgYm90aCBkaXJlY3QgYG5sODAyMTFgIHRvdWNoZXMgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIGdvb2QgdGFyZ2V0LiBUaGUgYGJyY21mbWFjYCBkcml2ZXIgaXMgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGVtdWxhdGlvbiAoYENPTkZJR19CUkNNRk1BQ19VU0JgKSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGdlbmVyaWMgbmV0bGluayBhbmQgY2ZnODAyMTEgb3BlcmF0aW9ucyBsaWtlIGBOTDgwMjExX0NNRF9DT05ORUNUYCwgYE5MODAyMTFfQ01EX1NFVF9QTUtgLCBhbmQgYE5MODAyMTFfQ01EX0RFTF9QTUtgLiBUaGF0JiMzOTtzIGEgc29saWQgYXR0YWNrIHN1cmZhY2UuCgpUaGlzIHBhdGNoIGlzIGFkZGluZyBmYXN0IHJvYW1pbmcgb2ZmbG9hZCwgT0tDLCBQTUtJRCBwYXJzaW5nIHZpYSBgYnJjbWZfaGFzX3Bta2lkYCwgcG9ydCBhdXRob3JpemF0aW9uLCBhbmQgbW9kaWZ5aW5nIGRlZmVuc2l2ZSBhc3NlcnRpb25zIHdpdGggYFdBUk5fT05gIHdpdGhpbiB0aGUgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AgZnVuY3Rpb25zLiBUaGlzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoZSBjaGFuY2VzIG9mIGludGVyZXN0aW5nIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoqICAgYG5sODAyMTFfc2V0X3Bta2AKKiAgIGBubDgwMjExX2RlbF9wbWtgCiogICBgYnJjbWZfc2V0X2tleV9tZ210YAoqICAgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgCiogICBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AKKiAgIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYAoqICAgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgCiogICBgYnJjbWZfc2V0dXBfd2lwaHlgCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgYnJjbWZfc2V0X2tleV9tZ210YCBpcyBzdGF0aWMgb3IgZXhwb3J0ZWQvdXNlZCBpbiBgY2ZnODAyMTEuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSBob3cgZGlyZWN0bHkgY29udHJvbGxhYmxlIGl0IGlzIGZyb20gYSB1c2VyLXNwYWNlIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9zZXRfa2V5X21nbXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIxMDc9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjEwODpicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjEwOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MjQxMj1icmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI1MDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzoyNTA5Olx0ZXJyID0gYnJjbWZfc2V0X2tleV9tZ210KG5kZXYsIHNtZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNTEwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg4NAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYnJjbWYgV2ktRmkgRHJpdmVyJiMzOTtzIFBNS0lEIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgUE1LSURzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byByb2FtaW5nIGFuZCBjb25uZWN0aW9uIHByb2Nlc3Nlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGJyY21mX2hhc19wbWtpZGAuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgY2ZnODAyMTEuY2AsIGFuZCB0aGF0JiMzOTtzIGFscmVhZHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIGludGVybmFsIHRvIHRoZSBmaWxlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgYSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgb25seSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyBgYnJjbWZfaGFzX3Bta2lkYCBhY3R1YWxseSAqdXNlZCo/IEFoLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZWAgYW5kIGBicmNtZl9ic3NfY29ubmVjdF9kb25lYC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKTm93LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCBhbmQgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgIGFyZSB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXBzLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IGdvdmVybiB0aGUgY29tcGxldGlvbiBvZiB0aGUgcm9hbWluZyBhbmQgY29ubmVjdGlvbiBwcm9jZXNzZXMsIHJlc3BlY3RpdmVseS4gS25vd2luZyBob3cgYGJyY21mX2hhc19wbWtpZGAgaXMgaW52b2x2ZWQgaW4gKnRob3NlKiBjb21wbGV0aW9uIHJvdXRpbmVzIGlzIGdvaW5nIHRvIHRlbGwgbWUgZXhhY3RseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93IEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1ODg9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjU4OTpicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NTkwLVx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGNvbnN0IHN0cnVjdCBicmNtZl9ldmVudF9tc2cgKmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjY4Nj1icmNtZl9ub3RpZnlfY29ubmVjdF9zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjcxNS1cdFx0fSBlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2NzE2Olx0XHRcdGJyY21mX2Jzc19jb25uZWN0X2RvbmUoY2ZnLCBuZGV2LCBlLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MTctXHRcdGJyY21mX25ldF9zZXRjYXJyaWVyKGlmcCwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjcyOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY3MzA6XHRcdFx0YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShjZmcsIG5kZXYsIGUsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MzEtXHRcdFx0YnJjbWZfbGlua19kb3duKGlmcC1cdTAwM2V2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc0Ni1cdFx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc0NzpcdFx0XHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgbmRldiwgZSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc0OC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02NzU0PWJyY21mX25vdGlmeV9yb2FtaW5nX3N0YXR1cyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY1LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NjpcdFx0XHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgaWZwLVx1MDAzZW5kZXYsIGUsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc2Ny1cdFx0XHRicmNtZl9uZXRfc2V0Y2FycmllcihpZnAsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4MgoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIFdpRmkgZHJpdmVyIGRldmVsb3BtZW50OgoKKipFeGFtaW5pbmcgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgSSBrbm93IGl0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGZpbmFsIGhhbmRzaGFrZSBhbmQgY29tcGxldGlvbiBzdGF0ZSBmb3IgYSBCU1MgKEJhc2ljIFNlcnZpY2UgU2V0KSByb2FtaW5nIGV2ZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcywgd2hhdCBpdCAqc2hvdWxkKiBiZSBkb2luZywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcm9hbWluZyBwcm9jZXNzIHdpdGhpbiB0aGUgQnJvYWRjb20gV2lGaSBkcml2ZXIuIElzIGl0IHNpbXBseSBhIG5vdGlmaWNhdGlvbiBiYWNrIHRvIHRoZSB1cHBlciBsYXllcnMsIG9yIGlzIGl0IG1vcmUgY29tcGxleCB0aGFuIHRoYXQsIGhhbmRsaW5nIHRoaW5ncyBsaWtlIHNlY3VyaXR5IGtleSByZWZyZXNoIG9yIHVwZGF0aW5nIHRoZSBjb25uZWN0aW9uIHN0YXRlPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IGltcG9ydGFudCBzaWRlIGVmZmVjdHMgdGhpcyBmdW5jdGlvbiBoYXMgb24gZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEEgcXVpY2sgY2hlY2sgb2YgaXRzIGNhbGwgZ3JhcGggaXMgZGVmaW5pdGVseSBpbiBvcmRlciB0byBzZWUgd2hlcmUgaXQgc2l0cyBpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgYmUgcHJlc2VudCBoZXJlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSBsb2NraW5nIGlzc3VlcyBhbmQgYWNjZXNzIHRvIHNoYXJlZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2Jzc19yb2FtaW5nX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1MTA9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjUxMTpicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NTEyLVx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Njc1ND1icmNtZl9ub3RpZnlfcm9hbWluZ19zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc2My1cdFx0XHQgICAgIFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlc21lX3N0YXRlKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NDpcdFx0XHRicmNtZl9ic3Nfcm9hbWluZ19kb25lKGNmZywgaWZwLVx1MDAzZW5kZXYsIGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc2NS1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzMKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQnJvYWRjb20gV2ktRmkgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQnJvYWRjb20mIzM5O3MgZmVhdHVyZXMgYXJlIGluaXRpYWxpemVkIGFuZCBhdHRhY2hlZCB3aXRoaW4gdGhlaXIgd2lyZWxlc3MgZHJpdmVyLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdGhhdCBpcyB0aGUgYGJyY21mX2ZlYXRfYXR0YWNoYCBmdW5jdGlvbi4gU28sIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uIGFuZCBzZXR1cCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBoYW5kc2hha2UgYmV0d2VlbiB0aGUgZmlybXdhcmUgYW5kIHRoZSBkcml2ZXIgdGFrZXMgcGxhY2UsIEkmIzM5O20gc3VyZSBvZiBpdC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBtYW5hZ2VkLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGNvbmZpZ3VyZSB0aG9zZSBmZWF0dXJlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgc3RhcnQgd29ya2luZyBvdXR3YXJkcyBpbnRvIHRoZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2Z3Y2FwX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0zMj1zdHJ1Y3QgYnJjbWZfZmVhdF9md2NhcCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0zOC1cdHsgQlJDTUZfRkVBVF9NQlNTLCBcJiMzNDttYnNzXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0yMzA9c3RhdGljIHZvaWQgYnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXMoc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yNDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jOjI0NTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYnJjbWZfZndjYXBfbWFwKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ2Olx0XHRpZiAoc3RybnN0cihjYXBzLCBicmNtZl9md2NhcF9tYXBbaV0uZndjYXBfaWQsIHNpemVvZihjYXBzKSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ3Olx0XHRcdGlkID0gYnJjbWZfZndjYXBfbWFwW2ldLmZlYXR1cmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTI0OC1cdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7ZW5hYmxpbmcgZmVhdHVyZTogJXNcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjYwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgUE1LIE1hbmFnZW1lbnQgaW4gbmw4MDIxMS5jKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgYWdhaW4uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IFBNS3MgKFBhaXJ3aXNlIE1hc3RlciBLZXlzKSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExYCBzdWJzeXN0ZW0uIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYW5kIGRlbGV0aW5nIHRoZXNlIGtleXMg4oCTIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIEkgbmVlZCB0byByZXZpZXcgYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgIGZ1bmN0aW9ucyBpbiB0aGF0IHNvdXJjZSBmaWxlLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIGFuYWx5emUgaG93IHRoZSBQTUsgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0aW9uIG9yIG5ldHdvcmssIGFuZCB3aGF0IGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlIGZvciBzZWN1cml0eSwgcmV2b2NhdGlvbiwgYW5kIGFsbCB0aGF0IGZ1biBzdHVmZiB0aGF0JiMzOTtzIGNyaXRpY2FsIGluIGEgV2ktRmkgZW52aXJvbm1lbnQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODQzMDpcdFxuMTg0MzE6XHRcdHJldHVybiByZGV2X3NldF9tdWx0aWNhc3RfdG9fdW5pY2FzdChyZGV2LCBkZXYsIGVuYWJsZWQpO1xuMTg0MzI6XHR9XG4xODQzMzpcdFxuMTg0MzQ6XHRzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg0MzU6XHR7XG4xODQzNjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4NDM3Olx0XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbjE4NDM4Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4NDM5Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODQ0MDpcdFx0c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHBta19jb25mID0ge307XG4xODQ0MTpcdFxuMTg0NDI6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuMTg0NDM6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuMTg0NDQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg0NDU6XHRcbjE4NDQ2Olx0XHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuMTg0NDc6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgXHUwMDI2XHUwMDI2XG4xODQ0ODpcdFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbjE4NDQ5Olx0XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcbjE4NDUwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4NDUxOlx0XG4xODQ1MjpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8ICFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKVxuMTg0NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODQ1NDpcdFxuMTg0NTU6XHRcdGlmICghd2Rldi1cdTAwM2Vjb25uZWN0ZWQpXG4xODQ1NjpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTg0NTc6XHRcbjE4NDU4Olx0XHRwbWtfY29uZi5hYSA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuMTg0NTk6XHRcdGlmIChtZW1jbXAocG1rX2NvbmYuYWEsIHdkZXYtXHUwMDNldS5jbGllbnQuY29ubmVjdGVkX2FkZHIsIEVUSF9BTEVOKSlcbjE4NDYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg0NjE6XHRcbjE4NDYyOlx0XHRwbWtfY29uZi5wbWsgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKTtcbjE4NDYzOlx0XHRwbWtfY29uZi5wbWtfbGVuID0gbmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKTtcbjE4NDY0Olx0XHRpZiAocG1rX2NvbmYucG1rX2xlbiAhPSBXTEFOX1BNS19MRU4gXHUwMDI2XHUwMDI2XG4xODQ2NTpcdFx0ICAgIHBta19jb25mLnBta19sZW4gIT0gV0xBTl9QTUtfTEVOX1NVSVRFX0JfMTkyKVxuMTg0NjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODQ2NzpcdFxuMTg0Njg6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtSMF9OQU1FXSlcbjE4NDY5Olx0XHRcdHBta19jb25mLnBta19yMF9uYW1lID1cbjE4NDcwOlx0XHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LUjBfTkFNRV0pO1xuMTg0NzE6XHRcbjE4NDcyOlx0XHRyZXR1cm4gcmRldl9zZXRfcG1rKHJkZXYsIGRldiwgXHUwMDI2cG1rX2NvbmYpO1xuMTg0NzM6XHR9XG4xODQ3NDpcdFxuMTg0NzU6XHRzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg0NzY6XHR7XG4xODQ3NzpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4NDc4Olx0XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbjE4NDc5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4NDgwOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODQ4MTpcdFx0Y29uc3QgdTggKmFhO1xuMTg0ODI6XHRcbjE4NDgzOlx0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjZcbjE4NDg0Olx0XHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcbjE4NDg1Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4NDg2Olx0XG4xODQ4NzpcdFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbjE4NDg4Olx0XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFx1MDAyNlx1MDAyNlxuMTg0ODk6XHRcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4xODQ5MDpcdFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXG4xODQ5MTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODQ5MjpcdFxuMTg0OTM6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcbjE4NDk0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg0OTU6XHRcbjE4NDk2Olx0XHRhYSA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuMTg0OTc6XHRcdHJldHVybiByZGV2X2RlbF9wbWsocmRldiwgZGV2LCBhYSk7XG4xODQ5ODpcdH1cbjE4NDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDAxCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBXaXJlbGVzcyBGYXN0IFJvYW0gT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQ0ZHODAyMTFgIGlzIGVzc2VudGlhbCwgbmF0dXJhbGx5LCBhcyBpdCYjMzk7cyB0aGUgY29yZSA4MDIuMTEgd2lyZWxlc3Mgc3VwcG9ydCBhbmQgY3J1Y2lhbCBmb3IgYG5sODAyMTEuY2AuIFRoZW4gd2UgaGF2ZSBgQlJDTUZNQUNgIGZvciB0aGUgQnJvYWRjb20gRnVsbE1BQyBkcml2ZXIgYW5kIGBCUkNNRk1BQ19VU0JgIGZvciB0aGUgVVNCIHZhcmlhbnQuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBDRkc4MDIxMWAgZGVwZW5kcyBvbiBgTkVUYCBhbmQgYFdJUkVMRVNTYCDigJMgeWVwLCB0aGF0IGFsaWducyB3aXRoIGV4cGVjdGF0aW9ucy4KCkxvb2tpbmcgaW50byBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGNvbmZpcm1zIGBDRkc4MDIxMWAgZGVwZW5kcyBvbiBgUkZLSUxMYCAob3IgaXRzIGludmVyc2UpIGFuZCBzZWxlY3RzIGBGV19MT0FERVJgLCB3aGljaCBpcyBzdGFuZGFyZC4gYEJSQ01GTUFDYCBpbiB0dXJuIGRlcGVuZHMgb24gYENGRzgwMjExYCBhbmQgc2VsZWN0cyBgQlJDTVVUSUxgLCBtYWtlcyBzZW5zZS4gYEJSQ01GTUFDX1VTQmAgYnVpbGRzIG9uIGBCUkNNRk1BQ2AgYW5kIG5lZWRzIGVpdGhlciBgVVNCID0geWAgb3IgYFVTQiA9IEJSQ01GTUFDYCwgYW5kIHNlbGVjdHMgYEJSQ01GTUFDX1BST1RPX0JDRENgIGFuZCBgRldfTE9BREVSYC4gQWxyaWdodCwgYWxsIHRoZSBkZXBlbmRlbmNpZXMgY2hlY2sgb3V0LgoKTmV4dCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBJIHNlZSBgbmw4MDIxMV9zZXRfcG1rYCwgYG5sODAyMTFfZGVsX3Bta2AsIGBicmNtZl9zZXRfa2V5X21nbXRgLCBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAsIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYCwgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgLCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIGFuZCBgYnJjbWZfc2V0dXBfd2lwaHlgLiBZZXMsIHRoZXNlIGFyZSBhbGwgcXVpdGUgc3BlY2lmaWMgdG8gbmV0bGluaywgQnJvYWRjb20sIFBNSyBjb25maWd1cmF0aW9uLCBjb25uZWN0aW9uIGFuZCByb2FtaW5nIGhhbmRsaW5nIOKAkyB0aGVzZSBhcmUgY2VydGFpbmx5IGdvb2QgdGFyZ2V0cy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBldmVyeXRoaW5nIGJlZm9yZSBJIGNvbW1pdCB0aGlzIGFuYWx5c2lzLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IHRydWU7IHRoaXMgaXMgYSBjbGVhciBhcmVhIGZvciBmdXp6aW5nLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmYXN0IHJvYW0gb2ZmbG9hZCAoRkJUL09LQykgc3VwcG9ydCwgUE1LIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBzcGFubmluZyBuZXRsaW5rIChgbmw4MDIxMS5jYCkgYW5kIHRoZSBCcm9hZGNvbSBkcml2ZXIgKGBicmNtZm1hY2ApLiBJdCYjMzk7cyBtb2RpZnlpbmcgbmV0bGluayBwZXJtaXNzaW9uIGNoZWNrcyBpbiBrZXkgcGF0aHMsIGFkZGluZyBQTUtJRCBwYXJzaW5nLCBhbmQgYWx0ZXJpbmcgYXV0aG9yaXphdGlvbiBsb2dpYyBkdXJpbmcgY29ubmVjdGlvbnMgYW5kIHJvYW1pbmcuIEFsc28gdGhlcmUgYXJlIGBXQVJOX09OYCBhc3NlcnRpb25zIGluIGtleSBtYW5hZ2VtZW50IGFuZCBQTUsgc2V0dGluZyBwYXRocy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChgTkw4MDIxMWApIGFuZCB2aXJ0dWFsIHdpcmVsZXNzL1VTQiBpbnRlcmZhY2VzLgoKVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdDogYFsmIzM0O0NGRzgwMjExJiMzNDssICYjMzQ7QlJDTUZNQUMmIzM0OywgJiMzNDtCUkNNRk1BQ19VU0ImIzM0O11gLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHdoYXQgSSBpZGVudGlmaWVkOiBgWyYjMzQ7bmw4MDIxMV9zZXRfcG1rJiMzNDssICYjMzQ7bmw4MDIxMV9kZWxfcG1rJiMzNDssICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssICYjMzQ7YnJjbWZfY2ZnODAyMTFfY29ubmVjdCYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWsmIzM0OywgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssICYjMzQ7YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZSYjMzQ7LCAmIzM0O2JyY21mX3NldHVwX3dpcGh5JiMzNDtdYC4KCkkmIzM5O3ZlIGNoZWNrZWQgb3ZlciB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzIG9uZSBsYXN0IHRpbWUuIFRoZXJlIGRvbiYjMzk7dCBzZWVtIHRvIGJlIGFueSBvdGhlciBpbW1lZGlhdGUgcmVkIGZsYWdzLiBJdCBhbGwgbG9va3MgY29tcHJlaGVuc2l2ZSBhbmQgd2VsbC1kZWZpbmVkLiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0dXBfd2lwaHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0dXBfd2lwaHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cblxuS2V5IG9ic2VydmF0aW9ucyByZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXG4zLiBUaGUgbmV3IElFIHBhcnNpbmcgZnVuY3Rpb24gYGJyY21mX2hhc19wbWtpZGAgb3BlcmF0ZXMgd2l0aCBsZW5ndGggYW5kIG9mZnNldCBib3VuZHMgY2hlY2tzIG9uIGluY29taW5nIElFIGJ5dGUgYXJyYXlzOyBhbnkgb3V0LW9mLWJvdW5kcyByZWFkaW5nIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOGExOGQ2ODYwYjdkZTRiNWFkMTczYzZiMTAyYmIyODdmZmUwZTcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6MzY6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCmluZGV4IDg3MmM0ODgwNmQwOTEuLjUxOWRlOTZiMDQyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCkBAIC0yMTEyLDkgJiM0MzsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC0mZ3Q7ZHJ2cjsKIAlzMzIgdmFsOwogCXMzMiBlcnI7CiYjNDM7CXMzMiBva2NfZW5hYmxlOwogCWNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTsKIAljb25zdCB1OCAqaWU7CiAJdTMyIGllX2xlbjsKJiM0MzsJYm9vbCBmd3N1cF9yb2FtOwogCXUzMiBvZmZzZXQ7CiAJdTE2IHJzbl9jYXA7CiAJdTMyIG1mcDsKQEAgLTIxMjIsNiAmIzQzOzIxMjQsOSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCiAJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FOwogCXByb2ZpbGUtJmd0O2lzX2Z0ID0gZmFsc2U7CiYjNDM7CXByb2ZpbGUtJmd0O2lzX29rYyA9IGZhbHNlOwomIzQzOwlmd3N1cF9yb2FtID0gYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8CiYjNDM7CQkgICAgIGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfT0tDKTsKIAogCWlmICghc21lLSZndDtjcnlwdG8ubl9ha21fc3VpdGVzKQogCQlyZXR1cm4gMDsKQEAgLTIxMzgsNiAmIzQzOzIxNDMsOCBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCQkJdmFsID0gV1BBX0FVVEhfVU5TUEVDSUZJRUQ7CiAJCQlpZiAoc21lLSZndDt3YW50XzF4KQogCQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7CiYjNDM7CQkJZWxzZSBpZiAoZndzdXBfcm9hbSkKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOgogCQkJdmFsID0gV1BBX0FVVEhfUFNLOwpAQCAtMjE1MywxMSAmIzQzOzIxNjAsMTUgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIAkJCXZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDsKIAkJCWlmIChzbWUtJmd0O3dhbnRfMXgpCiAJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDsKJiM0MzsJCQllbHNlIGlmIChmd3N1cF9yb2FtKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FLTV9TVUlURV84MDIxWF9TSEEyNTY6CiAJCQl2YWwgPSBXUEEyX0FVVEhfMVhfU0hBMjU2OwogCQkJaWYgKHNtZS0mZ3Q7d2FudF8xeCkKIAkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX1BTS19TSEEyNTY6CiAJCQl2YWwgPSBXUEEyX0FVVEhfUFNLX1NIQTI1NjsKQEAgLTIxNzAsMTAgJiM0MzsyMTgxLDE2IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJCQlwcm9maWxlLSZndDtpc19mdCA9IHRydWU7CiAJCQlpZiAoc21lLSZndDt3YW50XzF4KQogCQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7CiYjNDM7CQkJZWxzZSBpZiAoZndzdXBfcm9hbSkKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9BS01fU1VJVEVfRlRfUFNLOgogCQkJdmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDsKIAkJCXByb2ZpbGUtJmd0O2lzX2Z0ID0gdHJ1ZTsKJiM0MzsJCQlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6CiAJCQl2YWwgPSBXRkFfQVVUSF9EUFA7CkBAIC0yMjA0LDggJiM0MzsyMjIxLDIyIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAKIAlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpCiAJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIDFYIG9mZmxvYWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8CiYjNDM7CSAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSB7CiYjNDM7CQllcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCAmIzM0O29rY19lbmFibGUmIzM0OywKJiM0MzsJCQkJCSAgICAgICAmYW1wO29rY19lbmFibGUpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWJwaHlfZXJyKGRydnIsICYjMzQ7Z2V0IG9rY19lbmFibGUgZmFpbGVkICglZClcbiYjMzQ7LCBlcnIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicmNtZl9kYmcoSU5GTywgJiMzNDtva2NfZW5hYmxlICglZClcbiYjMzQ7LCBva2NfZW5hYmxlKTsKJiM0MzsJCQlwcm9maWxlLSZndDtpc19va2MgPSBva2NfZW5hYmxlOwomIzQzOwkJfQomIzQzOwl9CiAJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkKIAkJYnJjbWZfZGJnKElORk8sICYjMzQ7dXNpbmcgU0FFIG9mZmxvYWRcbiYjMzQ7KTsKJiM0MzsJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pCiYjNDM7CQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyByb2FtaW5nIG9mZmxvYWRcbiYjMzQ7KTsKIAogCWlmICghYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NRlApKQogCQlnb3RvIHNraXBfbWZwX2NvbmZpZzsKQEAgLTI0OTQsMTMgJiM0MzsyNTI1LDE0IEBAIGJyY21mX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAKIAkJaWYgKHNtZS0mZ3Q7Y3J5cHRvLnBzayAmYW1wOyZhbXA7ICFpc19zYWVfYWttICZhbXA7JmFtcDsKIAkJICAgIHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkgewotCQkJaWYgKFdBUk5fT04ocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9Ci0JCQkJICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHsKJiM0MzsJCQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkgewomIzQzOwkJCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxuJiMzNDspOwomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKJiM0MzsJCQl9IGVsc2UgaWYgKFdBUk5fT04ocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9CiYjNDM7CQkJCQkgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSykpIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIFBTSyBvZmZsb2FkXG4mIzM0Oyk7Ci0JCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKIAkJfQogCQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkgewogCQkJLyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovCkBAIC01OTUzLDE3ICYjNDM7NTk4NSwyOSBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NldF9wbWsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiAqY29uZikKIHsKIAlzdHJ1Y3QgYnJjbWZfaWYgKmlmcDsKJiM0MzsJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKJiM0MzsJaW50IHJldDsKIAogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtlbnRlclxuJiMzNDspOwogCi0JLyogZXhwZWN0IHVzaW5nIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIDFYICovCiAJaWZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoV0FSTl9PTihpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCkpCiYjNDM7CWRydnIgPSBpZnAtJmd0O2RydnI7CiYjNDM7CWlmIChXQVJOX09OKGlmcC0mZ3Q7dmlmLSZndDtwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaWZwLSZndDt2aWYtJmd0O3Byb2ZpbGUuaXNfZnQgJmFtcDsmYW1wOwomIzQzOwkJICAgICFpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19va2MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb25mLSZndDtwbWtfbGVuICZndDsgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTikKIAkJcmV0dXJuIC1FUkFOR0U7CiAKJiM0MzsJaWYgKGlmcC0mZ3Q7dmlmLSZndDtwcm9maWxlLmlzX29rYykgewomIzQzOwkJcmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDtva2NfaW5mb19wbWsmIzM0OywKJiM0MzsJCQkJCSAgICAgICBjb25mLSZndDtwbWssIGNvbmYtJmd0O3Bta19sZW4pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtva2NfaW5mb19wbWsgaW92YXIgZmFpbGVkOiByZXQ9JWRcbiYjMzQ7LAomIzQzOwkJCQkgcmV0KTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBicmNtZl9zZXRfcG1rKGlmcCwgY29uZi0mZ3Q7cG1rLCBjb25mLSZndDtwbWtfbGVuKTsKIH0KIApAQCAtNjQyMiw2ICYjNDM7NjQ2Niw0NyBAQCBzdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTsKJiM0MzsJY29uc3QgdTggKmllOwomIzQzOwl1MzIgaWVfbGVuOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MTYgY291bnQ7CiYjNDM7CiYjNDM7CWlmICghcGFyc2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJzbl9pZSA9IGJyY21mX3BhcnNlX3RsdnMocGFyc2UsIGxlbiwgV0xBTl9FSURfUlNOKTsKJiM0MzsJaWYgKCFyc25faWUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWllID0gKGNvbnN0IHU4ICopcnNuX2llOwomIzQzOwlpZV9sZW4gPSByc25faWUtJmd0O2xlbiAmIzQzOyBUTFZfSERSX0xFTjsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gVExWX0hEUl9MRU4gJiM0MzsgV1BBX0lFX1ZFUlNJT05fTEVOICYjNDM7IFdQQV9JRV9NSU5fT1VJX0xFTjsKJiM0MzsJaWYgKG9mZnNldCAmIzQzOyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICZndDs9IGllX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CW9mZnNldCAmIzQzOz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmIzQzOyBjb3VudCAqIFdQQV9JRV9NSU5fT1VJX0xFTjsKJiM0MzsJaWYgKG9mZnNldCAmIzQzOyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICZndDs9IGllX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CW9mZnNldCAmIzQzOz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmIzQzOyBjb3VudCAqIFdQQV9JRV9NSU5fT1VJX0xFTjsKJiM0MzsJaWYgKG9mZnNldCAmIzQzOyBSU05fQ0FQX0xFTiAmZ3Q7PSBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9mZnNldCAmIzQzOz0gUlNOX0NBUF9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgUlNOX1BNS0lEX0NPVU5UX0xFTiAmZ3Q7IGllX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudCAmZ3Q7IDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHMzMgogYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCkBAIC02NDM2LDYgJiM0Mzs2NTIxLDcgQEAgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCXN0cnVjdCBicmNtZl9ic3NfaW5mb19sZSAqYmk7CiAJc3RydWN0IGJyY211X2NoYW4gY2g7CiAJc3RydWN0IGNmZzgwMjExX3JvYW1faW5mbyByb2FtX2luZm8gPSB7fTsKJiM0MzsJYm9vbCBhdXRob3JpemVkID0gZmFsc2U7CiAJdTMyIGZyZXE7CiAJczMyIGVyciA9IDA7CiAJdTggKmJ1ZjsKQEAgLTY0ODIsMTQgJiM0Mzs2NTY4LDE4IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAlyb2FtX2luZm8ucmVzcF9pZSA9IGNvbm5faW5mby0mZ3Q7cmVzcF9pZTsKIAlyb2FtX2luZm8ucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tJmd0O3Jlc3BfaWVfbGVuOwogCiYjNDM7CWlmICgocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHwKJiM0MzsJICAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoYnJjbWZfaGFzX3Bta2lkKHJvYW1faW5mby5yZXFfaWUsIHJvYW1faW5mby5yZXFfaWVfbGVuKSB8fAomIzQzOwkgICAgIHByb2ZpbGUtJmd0O2lzX2Z0IHx8IHByb2ZpbGUtJmd0O2lzX29rYykpCiYjNDM7CQlhdXRob3JpemVkID0gdHJ1ZTsKJiM0MzsKIAljZmc4MDIxMV9yb2FtZWQobmRldiwgJmFtcDtyb2FtX2luZm8sIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoYXV0aG9yaXplZCkKJiM0MzsJCWNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLSZndDtic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJCSBHRlBfS0VSTkVMKTsKIAlicmNtZl9kYmcoQ09OTiwgJiMzNDtSZXBvcnQgcm9hbWluZyByZXN1bHRcbiYjMzQ7KTsKIAotCWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCAmYW1wOyZhbXA7IHByb2ZpbGUtJmd0O2lzX2Z0KSB7Ci0JCWNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLSZndDtic3NpZCwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7Ci0JCWJyY21mX2RiZyhDT05OLCAmIzM0O1JlcG9ydCBwb3J0IGF1dGhvcml6ZWRcbiYjMzQ7KTsKLQl9Ci0KIAlzZXRfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQ09OTkVDVEVELCAmYW1wO2lmcC0mZ3Q7dmlmLSZndDtzbWVfc3RhdGUpOwogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtFeGl0XG4mIzM0Oyk7CiAJcmV0dXJuIGVycjsKQEAgLTY1MDQsNiAmIzQzOzY1OTQsNyBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSAmYW1wO2lmcC0mZ3Q7dmlmLSZndDtwcm9maWxlOwogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7CiAJc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7CiYjNDM7CWJvb2wgYXV0aG9yaXplZDsKIAogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtFbnRlclxuJiMzNDspOwogCkBAIC02NTI4LDcgJiM0Mzs2NjE5LDE1IEBAIGJyY21mX2Jzc19jb25uZWN0X2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAkJY29ubl9wYXJhbXMucmVxX2llX2xlbiA9IGNvbm5faW5mby0mZ3Q7cmVxX2llX2xlbjsKIAkJY29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby0mZ3Q7cmVzcF9pZTsKIAkJY29ubl9wYXJhbXMucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tJmd0O3Jlc3BfaWVfbGVuOwomIzQzOwkJYXV0aG9yaXplZCA9IGNvbXBsZXRlZCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHwKJiM0MzsJCQkgICAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLAomIzQzOwkJCQkJICAgICBjb25uX3BhcmFtcy5yZXFfaWVfbGVuKTsKIAkJY2ZnODAyMTFfY29ubmVjdF9kb25lKG5kZXYsICZhbXA7Y29ubl9wYXJhbXMsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKGF1dGhvcml6ZWQpCiYjNDM7CQkJY2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtJmd0O2Jzc2lkLCBOVUxMLCAwLAomIzQzOwkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJYnJjbWZfZGJnKENPTk4sICYjMzQ7UmVwb3J0IGNvbm5lY3QgcmVzdWx0IC0gY29ubmVjdGlvbiAlc1xuJiMzNDssCiAJCQkgIGNvbXBsZXRlZCA/ICYjMzQ7c3VjY2VlZGVkJiMzNDsgOiAmIzM0O2ZhaWxlZCYjMzQ7KTsKIAl9CkBAIC03NzMxLDYgJiM0Mzs3ODMwLDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfc2V0dXBfd2lwaHkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGJyY21mX2lmICppZnApCiAJfQogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1NBRV9FWFQpKQogCQl3aXBoeS0mZ3Q7ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX1NBRTsKJiM0MzsJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fAomIzQzOwkgICAgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9PS0MpKQomIzQzOwkJd2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LAomIzQzOwkJCQkgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKTsKIAl3aXBoeS0mZ3Q7bWdtdF9zdHlwZXMgPSBicmNtZl90eHJ4X3N0eXBlczsKIAl3aXBoeS0mZ3Q7bWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDsKIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTk8pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oCmluZGV4IDYzZTUzNDUyM2Y1MTguLjFhYTk5MzkwYTk1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oCkBAIC0xMjcsNyAmIzQzOzEyNyw4IEBAIGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB7CiAJQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FLAogCUJSQ01GX1BST0ZJTEVfRldTVVBfUFNLLAogCUJSQ01GX1BST0ZJTEVfRldTVVBfMVgsCi0JQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUKJiM0MzsJQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUsCiYjNDM7CUJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTQogfTsKIAogLyoqCkBAIC0xNjQsNiAmIzQzOzE2NSw3IEBAIGVudW0gYnJjbWZfbWdtdF90eF9zdGF0dXMgewogICogQGJzc2lkOiBic3NpZCBvZiBqb2luZWQvam9pbmluZyBpYnNzLgogICogQHNlYzogc2VjdXJpdHkgaW5mb3JtYXRpb24uCiAgKiBAa2V5OiBrZXkgaW5mb3JtYXRpb24KJiM0MzsgKiBAaXNfb2tjOiBPS0MgaXMgdXNlZCBmb3IgY3VycmVudCBjb25uZWN0aW9uLgogICovCiBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwpAQCAtMTcyLDYgJiM0MzsxNzQsNyBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7CiAJZW51bSBicmNtZl9wcm9maWxlX2Z3c3VwIHVzZV9md3N1cDsKIAl1MTYgdXNlX2Z3YXV0aDsKIAlib29sIGlzX2Z0OwomIzQzOwlib29sIGlzX29rYzsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMKaW5kZXggNDg4MzY0ZWY4ZmYyYS4uY2MxOWU1ZTdlYmY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jCkBAIC00NSw2ICYjNDM7NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7CiAJeyBCUkNNRl9GRUFUX1NBRSwgJiMzNDtzYWUgJiMzNDsgfSwKIAl7IEJSQ01GX0ZFQVRfRldBVVRILCAmIzM0O2lkYXV0aCYjMzQ7IH0sCiAJeyBCUkNNRl9GRUFUX1NBRV9FWFQsICYjMzQ7c2FlX2V4dCYjMzQ7IH0sCiYjNDM7CXsgQlJDTUZfRkVBVF9GQlQsICYjMzQ7ZmJ0ICYjMzQ7IH0sCiYjNDM7CXsgQlJDTUZfRkVBVF9PS0MsICYjMzQ7b2tjJiMzNDsgfSwKIH07CiAKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgKaW5kZXggMzFmODY5NWNhNDE3Ni4uODE2NWEyODZiNjMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oCkBAIC01OSw3ICYjNDM7NTksOSBAQAogCUJSQ01GX0ZFQVRfREVGKFNDQU5fVjIpIFwKIAlCUkNNRl9GRUFUX0RFRihQTUtJRF9WMikgXAogCUJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcCi0JQlJDTUZfRkVBVF9ERUYoU0FFX0VYVCkKJiM0MzsJQlJDTUZfRkVBVF9ERUYoU0FFX0VYVCkgXAomIzQzOwlCUkNNRl9GRUFUX0RFRihGQlQpIFwKJiM0MzsJQlJDTUZfRkVBVF9ERUYoT0tDKQogCiAvKgogICogUXVpcmtzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKaW5kZXggMDIwMzg3ZDc2NDEyMi4uOTIwZDVlMmQ5OTY2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCkBAIC03MTEwLDYgJiM0Mzs3MTEwLDEwIEBAIGVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHsKICAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQOiBEcml2ZXIgc3VwcG9ydHMgcHJvYmluZyB0aGUgYXNzb2NpYXRlZCBBUAogICoJaW4gU1RBIG1vZGUgdXNpbmcgQE5MODAyMTFfQ01EX1BST0JFX1BFRVIuCiAgKgomIzQzOyAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEOiBEcml2ZXIgc3VwcG9ydHMgZmFzdCByb2FtaW5nCiYjNDM7ICoJb2ZmbG9hZCBpbiBzdGF0aW9uIG1vZGUsIGluY2x1ZGluZyBGYXN0IFRyYW5zaXRpb24gb3IgT3Bwb3J0dW5pc3RpYwomIzQzOyAqCUtleSBDYWNoaW5nLgomIzQzOyAqCiAgKiBATlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBudW1iZXIgb2YgZXh0ZW5kZWQgZmVhdHVyZXMuCiAgKiBATUFYX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBoaWdoZXN0IGV4dGVuZGVkIGZlYXR1cmUgaW5kZXguCiAgKi8KQEAgLTcxOTIsNiAmIzQzOzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXggewogCU5MODAyMTFfRVhUX0ZFQVRVUkVfUk9DX0FERFJfRklMVEVSLAogCU5MODAyMTFfRVhUX0ZFQVRVUkVfU0VUX0tFWV9MVEZfU0VFRCwKIAlOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLAomIzQzOwlOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FELAogCiAJLyogYWRkIG5ldyBmZWF0dXJlcyBiZWZvcmUgdGhlIGRlZmluaXRpb24gYmVsb3cgKi8KIAlOVU1fTkw4MDIxMV9FWFRfRkVBVFVSRVMsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA0NGYyYmFkMDg2NzA1Li5lNDg1MDEyOWE1ODJiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTE4NDM0LDYgJiM0MzsxODQzNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXBoeSAqd2lwaHkgPSAmYW1wO3JkZXYtJmd0O3dpcGh5OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LSZndDtpZWVlODAyMTFfcHRyOwogCXN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9OwpAQCAtMTg0NDIsNyAmIzQzOzE4NDQzLDkgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkgICAgd2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoJmFtcDtyZGV2LSZndDt3aXBoeSwKJiM0MzsJaWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSwKJiM0MzsJCQkJICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksCiAJCQkJICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtMTg0NzIsNiAmIzQzOzE4NDc1LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXBoeSAqd2lwaHkgPSAmYW1wO3JkZXYtJmd0O3dpcGh5OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LSZndDtpZWVlODAyMTFfcHRyOwogCWNvbnN0IHU4ICphYTsKQEAgLTE4NDgwLDcgJiM0MzsxODQ4NCw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJICAgIHdkZXYtJmd0O2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksCiYjNDM7CWlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LAogCQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gQnJvYWRjb20gV2lGaSBEcml2ZXIgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGluIGFkZGl0aW9uIHRvIG91ciBzdGFuZGFyZCBLQVNBTiBlZmZvcnRzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgY291bGQgZXhwb3NlIHNvbWUgaW50ZXJlc3RpbmcgbWVtb3J5IGlzc3VlcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZSBjaGFuZ2VzIHRvIHJvYW1pbmcgYW5kIGtleSBtYW5hZ2VtZW50LgoKRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBva2NfZW5hYmxlYCB2YXJpYWJsZSwgZXZlbiBhcyBhIHN0YWNrLWFsbG9jYXRlZCBsb2NhbCwgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgZmxvdyBzZWVtcyB0byBpbnZvbHZlIHJldHJpZXZpbmcgYW4gaW50ZWdlciB2YWx1ZSBmb3IgYG9rY19lbmFibGVgIGZyb20gc29tZXdoZXJlIHRocm91Z2ggYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAuIFRoaXMgaW50ZWdlciB0aGVuIGRpcmVjdGx5IHNldHMgYHByb2ZpbGUtJmd0O2lzX29rY2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaW50ZWdlciBjb21lcyBmcm9tIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZC4gV2UgY2FuIHVzZSBgYnBmdHJhY2VgIG9yIHNpbWlsYXIgdG8gaW5zdHJ1bWVudCB0aGlzIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBjb2RlIGlzIG1vZGlmeWluZyBhIG1lbWJlciBvZiB0aGUgcHJvZmlsZSBzdHJ1Y3QgYmFzZWQgb24gYSBjb25maWd1cmF0aW9uIGludGVnZXIgYWRkcyBhIHBvdGVudGlhbCBmb3IgbWlzY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBrZXkgbWFuYWdlbWVudC4KClRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIHdoaWNoIG1vZGlmeSBob3cgYHByb2ZpbGUtJmd0O3VzZV9md3N1cGAgaXMgaGFuZGxlZCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGNoZWNrcyBvbiBib3RoIGBpc19mdGAgYW5kIGBpc19va2NgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYC4gVGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYCBiYXNlZCBvbiBgaXNfb2tjYCBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0OyB3ZSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaGFwcGVucyB3aGVuIHRoaXMgJiMzNDtva2NfaW5mb19wbWsmIzM0OyBpb3ZhciBpcyBzZXQuCgpUaGUgbmV3IGBicmNtZl9oYXNfcG1raWRgIGZ1bmN0aW9uLCBwYXJzaW5nIFRMVnMgZnJvbSB0aGUgUlNOIElFLCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVExWIHBhcnNpbmcgaXMgbm90b3Jpb3VzbHkgcHJvbmUgdG8gb2ZmLWJ5LW9uZSBlcnJvcnMgYW5kIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIG9mZnNldCBjYWxjdWxhdGlvbnMgdmVyeSBjYXJlZnVsbHkuIFRoaXMgaXMgYSBjbGFzc2ljIGFyZWEgd2hlcmUgS01TQU4gY2FuIHNoaW5lLiBXZSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIGNhcmVmdWxseSB1c2luZyBgYnBmdHJhY2VgLgoKVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIHBhcnRpY3VsYXJseSB0aGUgYXV0aG9yaXphdGlvbiBjaGVja3MgYW5kIGNhbGxzIHRvIGBjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWRgLCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgY2FuIGJlIHN1c2NlcHRpYmxlIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvcnJlY3Qgc3RhdGUgaGFuZGxpbmcuCgpGaW5hbGx5LCB0aGUgZW5hYmxpbmcgb2YgYE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQURgIGluIGBicmNtZl9zZXR1cF93aXBoeWAgYW5kIHRoZSBzdXBwb3J0aW5nIGNoYW5nZXMgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIGluIGBubDgwMjExX3NldF9wbWtgIGFuZCBgbmw4MDIxMV9kZWxfcG1rYCBzdWdnZXN0IHRoYXQgZmFzdCByb2FtaW5nIGlzIGJlaW5nIGludGVncmF0ZWQuIFRoaXMgYWRkcyBjb21wbGV4aXR5IGFuZCwgcG90ZW50aWFsbHksIG1vcmUgYXR0YWNrIHN1cmZhY2UuIEFueSBjb2RlIGludm9sdmluZyBvZmZsb2FkIGFuZCBzZXR0aW5nIFBNS3MgaXMgYSByZWQgZmxhZy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaGVyZS4KCkluIHN1bW1hcnksIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zLCBtb2RpZnkgZXhpc3Rpbmcga2V5IG1hbmFnZW1lbnQgYW5kIHJvYW1pbmcgbG9naWMsIGFuZCBpbmNsdWRlIFRMViBwYXJzaW5nLiBUaGVzZSBhcmUgYWxsIGhpZ2gtcmlzayBhcmVhcyBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSYjMzk7bGwgbmVlZCB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlc2Uga2V5IGZ1bmN0aW9ucyBhbmQgbG9vayBmb3IgYW55IGNsdWVzLiBMZXQmIzM5O3MgZmlyZSB1cCB0aGUgdG9vbHMsIGRvdWJsZS1jaGVjayBhbGwgdGhvc2UgY2FsbHMsIGFuZCBzZWUgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQsIHdoaWNoIEkgc3Ryb25nbHkgc3VzcGVjdCBpdCB3aWxsIGJlLCBnaXZlbiB0aGlzIGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIxMDg9YnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMTMzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjEzNDpcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChuZXRkZXZfcHJpdihuZGV2KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIxMzUtXHRcdFx0XHQgICAgICAgXCYjMzQ7d3BhX2F1dGhcJiMzNDssIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjIyNi1cdCAgICBwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIyMjc6XHRcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsIFwmIzM0O29rY19lbmFibGVcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMjI4LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2b2tjX2VuYWJsZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjc2OT1icmNtZl9jZmc4MDIxMV9jb25maWdfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjc4My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI3ODQ6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI3ODUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjg0Mj1icmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjk0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI5NDY6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI5NDctXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjk2ND1icmNtZl9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjk4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI5ODY6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI5ODctXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MzAzOD1icmNtZl9jZmc4MDIxMV9yZWNvbmZpZ3VyZV93ZXAoc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMzA1OS1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjMwNjA6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTMwNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaD0xNjE9c3RhdGljIGlubGluZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaDoxNjI6czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xNjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg9MTcyPXMzMiBicmNtZl9maWxfYnNzY2ZnX2ludF9xdWVyeShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmgtMTc2LVx0KmRhdGFfbGUgPSBjcHVfdG9fbGUzMigqZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjE3NzpcdHJldHVybiBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBuYW1lLCBkYXRhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmgtMTc4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmd2lsLmhgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRhcmdldGluZyBhcm91bmQgbGluZSAxNjEuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGRlZmluZWQgb3IgZG9jdW1lbnRlZCB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGZpcm13YXJlIGludGVyZmFjZSBsYXllciDigJMgaGVuY2UgdGhlIGZpbGUgbmFtZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIEkmIzM5O20gaG9waW5nIEkgY2FuIGdsZWFuIHNvbWUgaW5zaWdodHMgaW50byBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgQnJvYWRjb20gZmlybXdhcmUgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTU6XHR7XG4gMTU2Olx0XHRfX2xlMzIgZGF0YV9sZSA9IGNwdV90b19sZTMyKGRhdGEpO1xuIDE1NzpcdFxuIDE1ODpcdFx0cmV0dXJuIGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQoaWZwLCBuYW1lLCBcdTAwMjZkYXRhX2xlLFxuIDE1OTpcdFx0XHRcdFx0XHQgc2l6ZW9mKGRhdGFfbGUpKTtcbiAxNjA6XHR9XG4gMTYxOlx0c3RhdGljIGlubGluZVxuIDE2MjpcdHMzMiBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSlcbiAxNjM6XHR7XG4gMTY0Olx0XHRzMzIgZXJyO1xuIDE2NTpcdFxuIDE2NjpcdFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX2dldChpZnAsIG5hbWUsIGRhdGEsIHNpemVvZigqZGF0YSkpO1xuIDE2NzpcdFx0aWYgKGVyciA9PSAwKVxuIDE2ODpcdFx0XHQqZGF0YSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopZGF0YSk7XG4gMTY5Olx0XHRyZXR1cm4gZXJyO1xuIDE3MDpcdH1cbiAxNzE6XHRzdGF0aWMgaW5saW5lXG4gMTcyOlx0czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X3F1ZXJ5KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEpXG4gMTczOlx0e1xuIDE3NDpcdFx0X19sZTMyICpkYXRhX2xlID0gKF9fbGUzMiAqKWRhdGE7XG4gMTc1Olx0XG4gMTc2Olx0XHQqZGF0YV9sZSA9IGNwdV90b19sZTMyKCpkYXRhKTtcbiAxNzc6XHRcdHJldHVybiBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBuYW1lLCBkYXRhKTtcbiAxNzg6XHR9XG4gMTc5Olx0XG4gMTgwOlx0czMyIGJyY21mX2ZpbF94dGx2X2RhdGFfc2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MTYgaWQsXG4gMTgxOlx0XHRcdFx0ICAgIHZvaWQgKmRhdGEsIHUzMiBsZW4pO1xuIDE4MjpcdHMzMiBicmNtZl9maWxfeHRsdl9kYXRhX2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTE2IGlkLFxuIDE4MzpcdFx0XHRcdCAgICB2b2lkICpkYXRhLCB1MzIgbGVuKTtcbiAxODQ6XHRzdGF0aWMgaW5saW5lXG4gMTg1Olx0czMyIGJyY21mX2ZpbF94dGx2X2ludF9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBpZCxcbiAxODY6XHRcdFx0XHQgICB1MzIgZGF0YSlcbiAxODc6XHR7XG4gMTg4Olx0XHRfX2xlMzIgZGF0YV9sZSA9IGNwdV90b19sZTMyKGRhdGEpO1xuIDE4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2V5IE1hbmFnZW1lbnQgYW5kIFBNS0lEIEhhbmRsaW5nIGluIHRoZSBCcm9hZGNvbSBXaUZpIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gRmlyc3QsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgYnJjbWZfc2V0X2tleV9tZ210YC4gVGhlIGNvZGUgY2hlY2tzIGlmIHdlJiMzOTtyZSB1c2luZyBmaXJtd2FyZS1zdXBwb3J0ZWQga2V5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgQlJDTUZfUFJPRklMRV9GV1NVUF8xWGAgb3IgYEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTWAuIElmIHNvLCBpdCB0cmllcyB0byByZWFkIGBva2NfZW5hYmxlYCB1c2luZyBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YC4gQSBub24temVybyBgZXJyYCBmcm9tIHRoYXQgZnVuY3Rpb24gbWVhbnMgdGhlIHJlYWQgZmFpbGVkLCBhbmQgYG9rY19lbmFibGVgIGlzbiYjMzk7dCB0b3VjaGVkLiBJZiBgZXJyYCBpcyB6ZXJvLCB0aGVuIGl0IGdyYWJzIHRoZSB2YWx1ZSB1c2luZyBgYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX2dldGAsIGFuZCB0aGVuIGNvbnZlcnRzIGl0IHRvIHRoZSBjb3JyZWN0IGJ5dGUgb3JkZXIuCgpOZXh0LCBJJiMzOTttIGV4YW1pbmluZyBgYnJjbWZfaGFzX3Bta2lkYC4gVGhpcyBmdW5jdGlvbiBzZWVtcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBQTUtJRCBpcyBwcmVzZW50IGluIGFuIFJTTiBJRS4gVGhlIGlucHV0IGBwYXJzZWAsIGFuZCBieSBleHRlbnNpb24gdGhlIGByc25faWVgIGJ1ZmZlciwgb3JpZ2luYXRlcyBmcm9tIGVpdGhlciBgcm9hbV9pbmZvLnJlcV9pZWAgb3IgYGNvbm5fcGFyYW1zLnJlcV9pZWAuCgpJJiMzOTttIGNhcmVmdWxseSB0cmFjaW5nIHRoZSBsb2dpYy4gRmlyc3QsIGl0IGNhbGxzIGBicmNtZl9wYXJzZV90bHZzYCB0byBmaW5kIHRoZSBSU04gSUUuIElmIHRoYXQgZmFpbHMsIHdlIHJldHVybiBlYXJseS4gVGhlbiwgaXQgcHJvY2VlZHMgd2l0aCB2YXJpb3VzIG9mZnNldCBjYWxjdWxhdGlvbnMgYW5kIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBSU04gSUUuIFNldmVyYWwgYm91bmRzIGNoZWNrcyBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIHRoZSB1c2Ugb2YgZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvIChgJmd0Oz1gKSB2ZXJzdXMgZ3JlYXRlci10aGFuIChgJmd0O2ApIGlzIGFuIGFyZWEgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIGFzIHRoYXQmIzM5O3MgYSBjb21tb24gc291cmNlIG9mIG9mZi1ieS1vbmUgZXJyb3JzLiBJdCYjMzk7cyBwYXJzaW5nIHRoZSBSU04gSUUgdG8gZ2V0IHZhcmlvdXMgY291bnRzIGFuZCBvZmZzZXRzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIHBhaXJ3aXNlIGNpcGhlcnMgYW5kIGdyb3VwIGNpcGhlcnMuIEZpbmFsbHksIGl0IGNoZWNrcyB0aGUgUE1LSUQgY291bnQuIEl0JiMzOTtzIHJldHVybmluZyB0cnVlIGlmIHRoZSBgY291bnRgIG9mIFBNS0lEcyBpcyBncmVhdGVyIHRoYW4gemVybywgaW5kaWNhdGluZyBhIFBNS0lEIGlzIHByZXNlbnQuIFRoZSBsb2dpYyBmbG93IGlzIHdlbGwtZGVmaW5lZCwgYW5kIHRoZSBidWZmZXIgb2Zmc2V0L3NpemUgY2FsY3VsYXRpb24gbG9va3MgcmVhc29uYWJsZSBzbyBmYXIsIGJ1dCBJIHdpbGwgd2FudCB0byB2ZXJpZnkgdGhvc2UgY2FsY3VsYXRpb25zIG15c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGFyc2VfdGx2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDIwOmJyY21mX3BhcnNlX3RsdnMoY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCB1aW50IGtleSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQyMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDY3PWJyY21mX2ZpbmRfd3BhaWUoY29uc3QgdTggKnBhcnNlLCB1MzIgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQ3MTpcdHdoaWxlICgoaWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NzItXHRcdGlmIChicmNtZl90bHZfaGFzX2llKChjb25zdCB1OCAqKWllLCBcdTAwMjZwYXJzZSwgXHUwMDI2bGVuLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ4MD1icmNtZl9maW5kX3dwc2llKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00ODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0ODQ6XHR3aGlsZSAoKGllID0gYnJjbWZfcGFyc2VfdGx2cyhwYXJzZSwgbGVuLCBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDg1LVx0XHRpZiAoYnJjbWZfdGx2X2hhc19pZSgodTggKilpZSwgXHUwMDI2cGFyc2UsIFx1MDAyNmxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMTA4PWJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjI0NS1cdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjI0NjpcdHJzbl9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKGNvbnN0IHU4ICopc21lLVx1MDAzZWllLCBzbWUtXHUwMDNlaWVfbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjI0Ny1cdFx0XHRcdCAgV0xBTl9FSURfUlNOKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yNDEyPWJyY21mX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjQ1Ni1cdFx0XHQvKiBmaW5kIHRoZSBSU05fSUUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI0NTc6XHRcdFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygoY29uc3QgdTggKilzbWUtXHUwMDNlaWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNDU4LVx0XHRcdFx0XHRcdCAgc21lLVx1MDAzZWllX2xlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTM1PWJyY21mX3BhcnNlX2NvbmZpZ3VyZV9zZWN1cml0eShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MTQzLVx0LyogZmluZCB0aGUgUlNOX0lFICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1MTQ0Olx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygodTggKilzZXR0aW5ncy1cdTAwM2ViZWFjb24udGFpbCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUxNDUtXHRcdFx0XHQgIHNldHRpbmdzLVx1MDAzZWJlYWNvbi50YWlsX2xlbiwgV0xBTl9FSURfUlNOKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTc3PWJyY21mX2NmZzgwMjExX3N0YXJ0X2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUyMTMtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTIxNDpcdFx0Y291bnRyeV9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKHU4ICopc2V0dGluZ3MtXHUwMDNlYmVhY29uLnRhaWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MjE1LVx0XHRcdFx0XHQgICAgICBzZXR0aW5ncy1cdTAwM2ViZWFjb24udGFpbF9sZW4sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTIyMy1cdFx0aWVfb2Zmc2V0ID0gRE9UMTFfTUdNVF9IRFJfTEVOICYjNDM7IERPVDExX0JDTl9QUkJfRklYRURfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTIyNDpcdFx0c3NpZF9pZSA9IGJyY21mX3BhcnNlX3RsdnMoXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MjI1LVx0XHRcdFx0KHU4ICopXHUwMDI2c2V0dGluZ3MtXHUwMDNlYmVhY29uLmhlYWRbaWVfb2Zmc2V0XSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02NDY5PXN0YXRpYyBib29sIGJyY21mX2hhc19wbWtpZChjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY0ODA6XHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NDgxLVx0aWYgKCFyc25faWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQzCgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGJyY21mX3BhcnNlX3RsdnNgIGluIGBjZmc4MDIxMS5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgYnJjbWZfcGFyc2VfdGx2c2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MTkgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jYC4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuYWx5emluZyByZWxhdGVkIHRvIGhvdyB0aGUgVExWcyBhcmUgYmVpbmcgcGFyc2VkLiBJdCBjb3VsZCBiZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggY2VydGFpbiBUTFYgdHlwZXMsIG9yIHBlcmhhcHMgSSYjMzk7bSBsb29raW5nIGF0IGEgc3BlY2lmaWMgYnVnIHJlcG9ydCBhbmQgdGhlIHJlbGV2YW50IGNvZGUuIFdoYXRldmVyIHRoZSByZWFzb24sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlc2UgVExWcyBhdCB0aGF0IHBvaW50IGluIGl0cyBleGVjdXRpb24gZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKlxuIDQyMDpcdGJyY21mX3BhcnNlX3RsdnMoY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCB1aW50IGtleSlcbiA0MjE6XHR7XG4gNDIyOlx0XHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICplbHQgPSBidWY7XG4gNDIzOlx0XHRpbnQgdG90bGVuID0gYnVmbGVuO1xuIDQyNDpcdFxuIDQyNTpcdFx0LyogZmluZCB0YWdnZWQgcGFyYW1ldGVyICovXG4gNDI2Olx0XHR3aGlsZSAodG90bGVuIFx1MDAzZT0gVExWX0hEUl9MRU4pIHtcbiA0Mjc6XHRcdFx0aW50IGxlbiA9IGVsdC1cdTAwM2VsZW47XG4gNDI4Olx0XG4gNDI5Olx0XHRcdC8qIHZhbGlkYXRlIHJlbWFpbmluZyB0b3RsZW4gKi9cbiA0MzA6XHRcdFx0aWYgKChlbHQtXHUwMDNlaWQgPT0ga2V5KSBcdTAwMjZcdTAwMjYgKHRvdGxlbiBcdTAwM2U9IChsZW4gJiM0MzsgVExWX0hEUl9MRU4pKSlcbiA0MzE6XHRcdFx0XHRyZXR1cm4gZWx0O1xuIDQzMjpcdFxuIDQzMzpcdFx0XHRlbHQgPSAoc3RydWN0IGJyY21mX3RsdiAqKSgodTggKillbHQgJiM0MzsgKGxlbiAmIzQzOyBUTFZfSERSX0xFTikpO1xuIDQzNDpcdFx0XHR0b3RsZW4gLT0gKGxlbiAmIzQzOyBUTFZfSERSX0xFTik7XG4gNDM1Olx0XHR9XG4gNDM2Olx0XG4gNDM3Olx0XHRyZXR1cm4gTlVMTDtcbiA0Mzg6XHR9XG4gNDM5Olx0XG4gNDQwOlx0LyogSXMgYW55IG9mIHRoZSB0bHZzIHRoZSBleHBlY3RlZCBlbnRyeT8gSWZcbiA0NDE6XHQgKiBub3QgdXBkYXRlIHRoZSB0bHZzIGJ1ZmZlciBwb2ludGVyL2xlbmd0aC5cbiA0NDI6XHQgKi9cbiA0NDM6XHRzdGF0aWMgYm9vbFxuIDQ0NDpcdGJyY21mX3Rsdl9oYXNfaWUoY29uc3QgdTggKmllLCBjb25zdCB1OCAqKnRsdnMsIHUzMiAqdGx2c19sZW4sXG4gNDQ1Olx0XHRcdCBjb25zdCB1OCAqb3VpLCB1MzIgb3VpX2xlbiwgdTggdHlwZSlcbiA0NDY6XHR7XG4gNDQ3Olx0XHQvKiBJZiB0aGUgY29udGVudHMgbWF0Y2ggdGhlIE9VSSBhbmQgdGhlIHR5cGUgKi9cbiA0NDg6XHRcdGlmIChpZVtUTFZfTEVOX09GRl0gXHUwMDNlPSBvdWlfbGVuICYjNDM7IDEgXHUwMDI2XHUwMDI2XG4gNDQ5Olx0XHQgICAgIW1lbWNtcChcdTAwMjZpZVtUTFZfQk9EWV9PRkZdLCBvdWksIG91aV9sZW4pIFx1MDAyNlx1MDAyNlxuIDQ1MDpcdFx0ICAgIHR5cGUgPT0gaWVbVExWX0JPRFlfT0ZGICYjNDM7IG91aV9sZW5dKSB7XG4gNDUxOlx0XHRcdHJldHVybiB0cnVlO1xuIDQ1MjpcdFx0fVxuIDQ1MzpcdFxuIDQ1NDpcdFx0aWYgKHRsdnMgPT0gTlVMTClcbiA0NTU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ1NjpcdFx0LyogcG9pbnQgdG8gdGhlIG5leHQgaWUgKi9cbiA0NTc6XHRcdGllICYjNDM7PSBpZVtUTFZfTEVOX09GRl0gJiM0MzsgVExWX0hEUl9MRU47XG4gNDU4Olx0XHQvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyICovXG4gNDU5Olx0XHQqdGx2c19sZW4gLT0gKGludCkoaWUgLSAqdGx2cyk7XG4gNDYwOlx0XHQvKiB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKi9cbiA0NjE6XHRcdCp0bHZzID0gaWU7XG4gNDYyOlx0XG4gNDYzOlx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODY0CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBDb21wbGV0aW9uIFByb2Nlc3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbm5lY3Rpb24gY29tcGxldGlvbiBsb2dpYy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAgYW5kIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYC4gTG9va2luZyBhdCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIEkgc2VlIGl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIGBjb25uX3BhcmFtc2Agc3RydWN0dXJlOiBgcmVxX2llX2xlbmAsIGByZXNwX2llYCwgYW5kIGByZXNwX2llX2xlbmAgYXJlIHBvcHVsYXRlZCBmcm9tIGBjb25uX2luZm9gLiAgVGhlbiwgdGhlcmUmIzM5O3MgYSBjcnVjaWFsIGNoZWNrIGZvciBhdXRob3JpemF0aW9uLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBhdXRob3JpemVkYCBzZWVtcyB0byBoaW5nZSBvbiBhIGZldyBjb25kaXRpb25zOiB0aGUgY29ubmVjdGlvbiBtdXN0IGJlICpjb21wbGV0ZWQqLCBhbmQgdGhlIHByb2ZpbGUgbmVlZHMgdG8gdXNlIGVpdGhlciAxWCBGVyBzdXBwb3J0IG9yIHJvYW1pbmcgRlcgc3VwcG9ydC4gIENydWNpYWxseSwgaXQgdGhlbiB1c2VzIGBicmNtZl9oYXNfcG1raWRgIG9uIHRoZSBgY29ubl9wYXJhbXMucmVxX2llYC4gIElmIGFsbCB0aG9zZSBjb25kaXRpb25zIGFyZSBtZXQsIHRoZW4gYGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZGAgaXMgY2FsbGVkIGFmdGVyIGBjZmc4MDIxMV9jb25uZWN0X2RvbmVgLgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IGBjb25uX3BhcmFtc2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgY29ubl9pbmZvYCBpcyBjb21pbmcgZnJvbSBhbmQgaG93IGl0cyBjb250ZW50cyBhcmUgcG9wdWxhdGVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgd2lsbCByZXZlYWwgaG93IGByZXFfaWVgLCBgcmVzcF9pZWAgYW5kIG90aGVyIGFzc29jaWF0ZWQgcGFyYW1ldGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjU5MDpcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGNvbnN0IHN0cnVjdCBicmNtZl9ldmVudF9tc2cgKmUsXG42NTkxOlx0XHRcdCAgICAgICBib29sIGNvbXBsZXRlZClcbjY1OTI6XHR7XG42NTkzOlx0XHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuNjU5NDpcdFx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGU7XG42NTk1Olx0XHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSBjZmdfdG9fY29ubihjZmcpO1xuNjU5NjpcdFx0c3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7XG42NTk3Olx0XHRib29sIGF1dGhvcml6ZWQ7XG42NTk4Olx0XG42NTk5Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbjY2MDA6XHRcbjY2MDE6XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNUSU5HLFxuNjYwMjpcdFx0XHRcdCAgICAgICBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXNtZV9zdGF0ZSkpIHtcbjY2MDM6XHRcdFx0bWVtc2V0KFx1MDAyNmNvbm5fcGFyYW1zLCAwLCBzaXplb2YoY29ubl9wYXJhbXMpKTtcbjY2MDQ6XHRcdFx0aWYgKGNvbXBsZXRlZCkge1xuNjYwNTpcdFx0XHRcdGJyY21mX2dldF9hc3NvY19pZXMoY2ZnLCBpZnApO1xuNjYwNjpcdFx0XHRcdGJyY21mX3VwZGF0ZV9ic3NfaW5mbyhjZmcsIGlmcCk7XG42NjA3Olx0XHRcdFx0c2V0X2JpdChCUkNNRl9WSUZfU1RBVFVTX0NPTk5FQ1RFRCxcbjY2MDg6XHRcdFx0XHRcdFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlc21lX3N0YXRlKTtcbjY2MDk6XHRcdFx0XHRjb25uX3BhcmFtcy5zdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTO1xuNjYxMDpcdFx0XHR9IGVsc2Uge1xuNjYxMTpcdFx0XHRcdGNsZWFyX2JpdChCUkNNRl9WSUZfU1RBVFVTX0VBUF9TVUNDRVNTLFxuNjYxMjpcdFx0XHRcdFx0ICBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXNtZV9zdGF0ZSk7XG42NjEzOlx0XHRcdFx0Y2xlYXJfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQVNTT0NfU1VDQ0VTUyxcbjY2MTQ6XHRcdFx0XHRcdCAgXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2VzbWVfc3RhdGUpO1xuNjYxNTpcdFx0XHRcdGNvbm5fcGFyYW1zLnN0YXR1cyA9IFdMQU5fU1RBVFVTX0FVVEhfVElNRU9VVDtcbjY2MTY6XHRcdFx0fVxuNjYxNzpcdFx0XHRjb25uX3BhcmFtcy5saW5rc1swXS5ic3NpZCA9IHByb2ZpbGUtXHUwMDNlYnNzaWQ7XG42NjE4Olx0XHRcdGNvbm5fcGFyYW1zLnJlcV9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXFfaWU7XG42NjE5Olx0XHRcdGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVxX2llX2xlbjtcbjY2MjA6XHRcdFx0Y29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuNjYyMTpcdFx0XHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llX2xlbjtcbjY2MjI6XHRcdFx0YXV0aG9yaXplZCA9IGNvbXBsZXRlZCBcdTAwMjZcdTAwMjZcbjY2MjM6XHRcdFx0XHQgICAgIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG42NjI0Olx0XHRcdFx0ICAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbjY2MjU6XHRcdFx0XHQgICAgIGJyY21mX2hhc19wbWtpZChjb25uX3BhcmFtcy5yZXFfaWUsXG42NjI2Olx0XHRcdFx0XHRcdCAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7XG42NjI3Olx0XHRcdGNmZzgwMjExX2Nvbm5lY3RfZG9uZShuZGV2LCBcdTAwMjZjb25uX3BhcmFtcywgR0ZQX0tFUk5FTCk7XG42NjI4Olx0XHRcdGlmIChhdXRob3JpemVkKVxuNjYyOTpcdFx0XHRcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVx1MDAzZWJzc2lkLCBOVUxMLCAwLFxuNjYzMDpcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbjY2MzE6XHRcdFx0YnJjbWZfZGJnKENPTk4sIFwmIzM0O1JlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcXG5cJiMzNDssXG42NjMyOlx0XHRcdFx0ICBjb21wbGV0ZWQgPyBcJiMzNDtzdWNjZWVkZWRcJiMzNDsgOiBcJiMzNDtmYWlsZWRcJiMzNDspO1xuNjYzMzpcdFx0fVxuNjYzNDpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFeGl0XFxuXCYjMzQ7KTtcbjY2MzU6XHRcdHJldHVybiAwO1xuNjYzNjpcdH1cbjY2Mzc6XHRcbjY2Mzg6XHRzdGF0aWMgczMyXG42NjM5Olx0YnJjbWZfbm90aWZ5X2Nvbm5lY3Rfc3RhdHVzX2FwKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTAxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmw4MDIxMV9zZXRfcG1rYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBNSyAoUGFpcndpc2UgTWFzdGVyIEtleSkgaXMgYmVpbmcgc2V0IHdpdGhpbiB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9zZXRfcG1rYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIHRoaXMgc2hvdWxkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgYW5hbHl6aW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIFBNSyBjb25maWd1cmF0aW9uLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgYXMgSSBkb24mIzM5O3Qgd2FudCB0byBiZSBzcGVuZGluZyB0b28gbXVjaCB0aW1lIHNwZWx1bmtpbmcuIFRpbWUgdG8gZmlyZSB1cCBteSBlZGl0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NDMwOlx0XG4xODQzMTpcdFx0cmV0dXJuIHJkZXZfc2V0X211bHRpY2FzdF90b191bmljYXN0KHJkZXYsIGRldiwgZW5hYmxlZCk7XG4xODQzMjpcdH1cbjE4NDMzOlx0XG4xODQzNDpcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xODQzNTpcdHtcbjE4NDM2Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTg0Mzc6XHRcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xuMTg0Mzg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuMTg0Mzk6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbjE4NDQwOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgcG1rX2NvbmYgPSB7fTtcbjE4NDQxOlx0XG4xODQ0MjpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXHUwMDI2XHUwMDI2XG4xODQ0MzpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXG4xODQ0NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODQ0NTpcdFxuMTg0NDY6XHRcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4xODQ0NzpcdFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbjE4NDQ4Olx0XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuMTg0NDk6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxuMTg0NTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg0NTE6XHRcbjE4NDUyOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pXG4xODQ1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NDU0Olx0XG4xODQ1NTpcdFx0aWYgKCF3ZGV2LVx1MDAzZWNvbm5lY3RlZClcbjE4NDU2Olx0XHRcdHJldHVybiAtRU5PVENPTk47XG4xODQ1NzpcdFxuMTg0NTg6XHRcdHBta19jb25mLmFhID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XG4xODQ1OTpcdFx0aWYgKG1lbWNtcChwbWtfY29uZi5hYSwgd2Rldi1cdTAwM2V1LmNsaWVudC5jb25uZWN0ZWRfYWRkciwgRVRIX0FMRU4pKVxuMTg0NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODQ2MTpcdFxuMTg0NjI6XHRcdHBta19jb25mLnBtayA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pO1xuMTg0NjM6XHRcdHBta19jb25mLnBta19sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pO1xuMTg0NjQ6XHRcdGlmIChwbWtfY29uZi5wbWtfbGVuICE9IFdMQU5fUE1LX0xFTiBcdTAwMjZcdTAwMjZcbjE4NDY1Olx0XHQgICAgcG1rX2NvbmYucG1rX2xlbiAhPSBXTEFOX1BNS19MRU5fU1VJVEVfQl8xOTIpXG4xODQ2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NDY3Olx0XG4xODQ2ODpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS1IwX05BTUVdKVxuMTg0Njk6XHRcdFx0cG1rX2NvbmYucG1rX3IwX25hbWUgPVxuMTg0NzA6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtSMF9OQU1FXSk7XG4xODQ3MTpcdFxuMTg0NzI6XHRcdHJldHVybiByZGV2X3NldF9wbWsocmRldiwgZGV2LCBcdTAwMjZwbWtfY29uZik7XG4xODQ3MzpcdH1cbjE4NDc0Olx0XG4xODQ3NTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xODQ3NjpcdHtcbjE4NDc3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTg0Nzg6XHRcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xuMTg0Nzk6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuMTg0ODA6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbjE4NDgxOlx0XHRjb25zdCB1OCAqYWE7XG4xODQ4MjpcdFxuMTg0ODM6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuMTg0ODQ6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuMTg0ODU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg0ODY6XHRcbjE4NDg3Olx0XHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuMTg0ODg6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgXHUwMDI2XHUwMDI2XG4xODQ4OTpcdFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMzIKCQkJCQkJCW91dHB1dDogMzIxCgkJCQkJCQl0aG91Z2h0czogMTIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGYXN0IFJvYW0gT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIGZhc3Qgcm9hbSBvZmZsb2FkIChGQlQvT0tDKSBzdXBwb3J0IHdpdGhpbiB0aGUgYnJjbWZtYWMgYW5kIG5sODAyMTEgc3Vic3lzdGVtcy4gVGhlIGNvZGUgYWRkcyBmZWF0dXJlIGZsYWdzLCB2YWxpZGF0ZXMgUE1LSURzLCBhbmQgbWFuYWdlcyBPS0MvRlQgb3BlcmF0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiBhbmQgcm9hbWluZy4KCkNydWNpYWxseSwgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gSSYjMzk7dmUgc2NydXRpbml6ZWQgdGhlIG1lbW9yeSBoYW5kbGluZywgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBmb3VuZC4KCjEuICAqKk5vIEtlcm5lbC10by1Vc2VyIExlYWtzOioqIEFic29sdXRlbHkgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBOb3RoaW5nIG5ldyBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLgoKMi4gICoqSW5pdGlhbGl6YXRpb24gaXMgS2V5OioqIFZhcmlhYmxlcyBsaWtlIGBva2NfZW5hYmxlYCwgYGF1dGhvcml6ZWRgIGFyZSBhbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZWlyIHVzZS4gVGhlIGBva2NfZW5hYmxlYCB2YXJpYWJsZSBpcyBvbmx5IHJlYWQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igd2hlbiBxdWVyeWluZyB0aGUgZmlybXdhcmUuIFRoZSBgcHJvZmlsZWAgc3RydWN0IGZpZWxkcyByZWxhdGVkIHRvIHN0YXRlIChgaXNfb2tjYCwgYHVzZV9md3N1cGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKMy4gICoqU2FmZSBQTUtJRCBIYW5kbGluZzoqKiBUaGUgYGJyY21mX2hhc19wbWtpZGAgZnVuY3Rpb24gZGlsaWdlbnRseSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IElFIGJ1ZmZlci4gTm8gcmlza3Mgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzIHRoZXJlLgoKNC4gICoqTm8gQ29tcGxleCBEYXRhIFN0cnVjdHVyZXMgd2l0aCBVbmluaXRpYWxpemVkIEZpZWxkczoqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgcG9zZSBhIHByb2JsZW0gZG93biB0aGUgbGluZS4KCjUuICAqKk5vIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzIGluIENvbnRyb2wgRmxvdzoqKiBJIHNlZSBubyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIHN0aWNrcyB0byBiZXN0IHByYWN0aWNlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgYnVmZmVyIG92ZXJydW5zIGR1cmluZyBJRSBwYXJzaW5nIG9yIGludmFsaWQgc3RhdGUgaGFuZGxpbmcsIHdvdWxkIGJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgKipOZWVkc0tNU0FOID0gZmFsc2UqKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtIG9mZmxvYWQgKEZhc3QgQlNTIFRyYW5zaXRpb24gLyBPcHBvcnR1bmlzdGljIEtleSBDYWNoaW5nKSBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGFuZCB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uXG5cbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHN0YWNrIGFuZCBoZWFwIHZhcmlhYmxlcyAoZS5nLiwgYG9rY19lbmFibGVgLCBgYXV0aG9yaXplZGAsIGBwbWtfY29uZmApIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCBvciBhc3NpZ25lZCB2YWx1ZXMgcHJpb3IgdG8gYW55IHJlYWQuIGBva2NfZW5hYmxlYCBpcyBvbmx5IGFjY2Vzc2VkIGlmIGBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXRgIHN1Y2Nlc3NmdWxseSByZXR1cm5zIDAuXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cbjQuIE5vIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgaW9jdGwsIG9yIGNvcHlfdG9fdXNlci5cblxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtIG9mZmxvYWQgKEZhc3QgQlNTIFRyYW5zaXRpb24gLyBPcHBvcnR1bmlzdGljIEtleSBDYWNoaW5nKSBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGFuZCB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uXG5cbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHN0YWNrIGFuZCBoZWFwIHZhcmlhYmxlcyAoZS5nLiwgYG9rY19lbmFibGVgLCBgYXV0aG9yaXplZGAsIGBwbWtfY29uZmApIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCBvciBhc3NpZ25lZCB2YWx1ZXMgcHJpb3IgdG8gYW55IHJlYWQuIGBva2NfZW5hYmxlYCBpcyBvbmx5IGFjY2Vzc2VkIGlmIGBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXRgIHN1Y2Nlc3NmdWxseSByZXR1cm5zIDAuXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cbjQuIE5vIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgaW9jdGwsIG9yIGNvcHlfdG9fdXNlci5cblxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNjo1MS4zMTY5NTg5MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ4NjE0OTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfc2V0X3Bta1wiLFxuICAgIFwibmw4MDIxMV9kZWxfcG1rXCIsXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtcIixcbiAgICBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIixcbiAgICBcImJyY21mX2Jzc19jb25uZWN0X2RvbmVcIixcbiAgICBcImJyY21mX3NldHVwX3dpcGh5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cXG5cXG5LZXkgb2JzZXJ2YXRpb25zIHJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxcbjMuIFRoZSBuZXcgSUUgcGFyc2luZyBmdW5jdGlvbiBgYnJjbWZfaGFzX3Bta2lkYCBvcGVyYXRlcyB3aXRoIGxlbmd0aCBhbmQgb2Zmc2V0IGJvdW5kcyBjaGVja3Mgb24gaW5jb21pbmcgSUUgYnl0ZSBhcnJheXM7IGFueSBvdXQtb2YtYm91bmRzIHJlYWRpbmcgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZhc3Qgcm9hbWluZyBvZmZsb2FkIChGQlQgLyBPcHBvcnR1bmlzdGljIEtleSBDYWNoaW5nIC0gT0tDKSBhbmQgUE1LIG9mZmxvYWQgYWNyb3NzIHRoZSBjb3JlIG5sODAyMTEgc3Vic3lzdGVtIGFuZCB0aGUgYnJjbWZtYWMgZHJpdmVyLiBJdCB1cGRhdGVzIG5ldGxpbmsgdmFsaWRhdGlvbiBsb2dpYyBpbiBubDgwMjExX3NldF9wbWsvbmw4MDIxMV9kZWxfcG1rLCBpbnRyb2R1Y2VzIFJTTiBQTUtJRCBJRSBwYXJzaW5nLCBtb2RpZmllcyBjb25uZWN0IGFuZCByb2FtIGNvbXBsZXRpb24gc3RhdGUgaGFuZGxpbmcsIGFuZCB1cGRhdGVzIFdBUk5fT04gYXNzZXJ0aW9ucyBpbiBjb25uZWN0aW9uL1BNSyBjb25maWd1cmF0aW9uIHBhdGhzLiBUaGVzZSBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgdmlhIEdlbmVyaWMgTmV0bGluayAobmw4MDIxMSkgYW5kIHZpcnR1YWxpemVkIFVTQiBkZXZpY2UgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6MzY6NTEuMzE2OTY0NzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDYwNTU2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOGExOGQ2ODYwYjdkZTRiNWFkMTczYzZiMTAyYmIyODdmZmUwZTcxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5pbmRleCA4NzJjNDg4MDZkMDkxLi41MTlkZTk2YjA0MmVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5AQCAtMjExMiw5ICsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuIFxcdHMzMiB2YWw7XFxuIFxcdHMzMiBlcnI7XFxuK1xcdHMzMiBva2NfZW5hYmxlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7XFxuIFxcdGNvbnN0IHU4ICppZTtcXG4gXFx0dTMyIGllX2xlbjtcXG4rXFx0Ym9vbCBmd3N1cF9yb2FtO1xcbiBcXHR1MzIgb2Zmc2V0O1xcbiBcXHR1MTYgcnNuX2NhcDtcXG4gXFx0dTMyIG1mcDtcXG5AQCAtMjEyMiw2ICsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcXG4gXFxuIFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORTtcXG4gXFx0cHJvZmlsZS1cXHUwMDNlaXNfZnQgPSBmYWxzZTtcXG4rXFx0cHJvZmlsZS1cXHUwMDNlaXNfb2tjID0gZmFsc2U7XFxuK1xcdGZ3c3VwX3JvYW0gPSBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZCVCkgfHxcXG4rXFx0XFx0ICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7XFxuIFxcbiBcXHRpZiAoIXNtZS1cXHUwMDNlY3J5cHRvLm5fYWttX3N1aXRlcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTIxMzgsNiArMjE0Myw4IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcdFxcdFxcdHZhbCA9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEO1xcbiBcXHRcXHRcXHRpZiAoc21lLVxcdTAwM2V3YW50XzF4KVxcbiBcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xcbitcXHRcXHRcXHRlbHNlIGlmIChmd3N1cF9yb2FtKVxcbitcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX1BTSzpcXG4gXFx0XFx0XFx0dmFsID0gV1BBX0FVVEhfUFNLO1xcbkBAIC0yMTUzLDExICsyMTYwLDE1IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcdFxcdFxcdHZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDtcXG4gXFx0XFx0XFx0aWYgKHNtZS1cXHUwMDNld2FudF8xeClcXG4gXFx0XFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcXG4rXFx0XFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0FLTV9TVUlURV84MDIxWF9TSEEyNTY6XFxuIFxcdFxcdFxcdHZhbCA9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XFxuIFxcdFxcdFxcdGlmIChzbWUtXFx1MDAzZXdhbnRfMXgpXFxuIFxcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXFxuK1xcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLX1NIQTI1NjpcXG4gXFx0XFx0XFx0dmFsID0gV1BBMl9BVVRIX1BTS19TSEEyNTY7XFxuQEAgLTIxNzAsMTAgKzIxODEsMTYgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcXG4gXFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNlaXNfZnQgPSB0cnVlO1xcbiBcXHRcXHRcXHRpZiAoc21lLVxcdTAwM2V3YW50XzF4KVxcbiBcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xcbitcXHRcXHRcXHRlbHNlIGlmIChmd3N1cF9yb2FtKVxcbitcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX0ZUX1BTSzpcXG4gXFx0XFx0XFx0dmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDtcXG4gXFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNlaXNfZnQgPSB0cnVlO1xcbitcXHRcXHRcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpXFxuK1xcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xcbitcXHRcXHRcXHRlbHNlIGlmIChmd3N1cF9yb2FtKVxcbitcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XFxuIFxcdFxcdFxcdHZhbCA9IFdGQV9BVVRIX0RQUDtcXG5AQCAtMjIwNCw4ICsyMjIxLDIyIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcbiBcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpXFxuIFxcdFxcdGJyY21mX2RiZyhJTkZPLCBcXFwidXNpbmcgMVggb2ZmbG9hZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcXG4rXFx0ICAgIHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pIHtcXG4rXFx0XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXFxcIm9rY19lbmFibGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm9rY19lbmFibGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJnZXQgb2tjX2VuYWJsZSBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJva2NfZW5hYmxlICglZClcXFxcblxcXCIsIG9rY19lbmFibGUpO1xcbitcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2Vpc19va2MgPSBva2NfZW5hYmxlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSlcXG4gXFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJ1c2luZyBTQUUgb2ZmbG9hZFxcXFxuXFxcIik7XFxuK1xcdGlmIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKVxcbitcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcInVzaW5nIHJvYW1pbmcgb2ZmbG9hZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSlcXG4gXFx0XFx0Z290byBza2lwX21mcF9jb25maWc7XFxuQEAgLTI0OTQsMTMgKzI1MjUsMTQgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdFxcdGlmIChzbWUtXFx1MDAzZWNyeXB0by5wc2sgXFx1MDAyNlxcdTAwMjYgIWlzX3NhZV9ha20gXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkge1xcbi1cXHRcXHRcXHRpZiAoV0FSTl9PTihwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT1cXG4tXFx0XFx0XFx0XFx0ICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcXG4rXFx0XFx0XFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJ1c2luZyBQU0sgb2ZmbG9hZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xcbitcXHRcXHRcXHR9IGVsc2UgaWYgKFdBUk5fT04ocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9XFxuK1xcdFxcdFxcdFxcdFxcdCAgIEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJ1c2luZyBQU0sgb2ZmbG9hZFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XFxuIFxcdFxcdFxcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xcbkBAIC01OTUzLDE3ICs1OTg1LDI5IEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2V0X3BtayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiAqY29uZilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4rXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcImVudGVyXFxcXG5cXFwiKTtcXG4gXFxuLVxcdC8qIGV4cGVjdCB1c2luZyBmaXJtd2FyZSBzdXBwbGljYW50IGZvciAxWCAqL1xcbiBcXHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRpZiAoV0FSTl9PTihpZnAtXFx1MDAzZXZpZi1cXHUwMDNlcHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCkpXFxuK1xcdGRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuK1xcdGlmIChXQVJOX09OKGlmcC1cXHUwMDNldmlmLVxcdTAwM2Vwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhaWZwLVxcdTAwM2V2aWYtXFx1MDAzZXByb2ZpbGUuaXNfZnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFpZnAtXFx1MDAzZXZpZi1cXHUwMDNlcHJvZmlsZS5pc19va2MpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChjb25mLVxcdTAwM2VwbWtfbGVuIFxcdTAwM2UgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTilcXG4gXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIFxcbitcXHRpZiAoaWZwLVxcdTAwM2V2aWYtXFx1MDAzZXByb2ZpbGUuaXNfb2tjKSB7XFxuK1xcdFxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJva2NfaW5mb19wbWtcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uZi1cXHUwMDNlcG1rLCBjb25mLVxcdTAwM2VwbWtfbGVuKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJva2NfaW5mb19wbWsgaW92YXIgZmFpbGVkOiByZXQ9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCByZXQpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gYnJjbWZfc2V0X3BtayhpZnAsIGNvbmYtXFx1MDAzZXBtaywgY29uZi1cXHUwMDNlcG1rX2xlbik7XFxuIH1cXG4gXFxuQEAgLTY0MjIsNiArNjQ2Niw0NyBAQCBzdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7XFxuK1xcdGNvbnN0IHU4ICppZTtcXG4rXFx0dTMyIGllX2xlbjtcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTE2IGNvdW50O1xcbitcXG4rXFx0aWYgKCFwYXJzZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cyhwYXJzZSwgbGVuLCBXTEFOX0VJRF9SU04pO1xcbitcXHRpZiAoIXJzbl9pZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWUgPSAoY29uc3QgdTggKilyc25faWU7XFxuK1xcdGllX2xlbiA9IHJzbl9pZS1cXHUwMDNlbGVuICsgVExWX0hEUl9MRU47XFxuK1xcbitcXHRvZmZzZXQgPSBUTFZfSERSX0xFTiArIFdQQV9JRV9WRVJTSU9OX0xFTiArIFdQQV9JRV9NSU5fT1VJX0xFTjtcXG4rXFx0aWYgKG9mZnNldCArIFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gXFx1MDAzZT0gaWVfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjb3VudCA9IGllW29mZnNldF0gKyAoaWVbb2Zmc2V0ICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdG9mZnNldCArPSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47XFxuK1xcdGlmIChvZmZzZXQgKyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOIFxcdTAwM2U9IGllX2xlbilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y291bnQgPSBpZVtvZmZzZXRdICsgKGllW29mZnNldCArIDFdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRvZmZzZXQgKz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiArIGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xcbitcXHRpZiAob2Zmc2V0ICsgUlNOX0NBUF9MRU4gXFx1MDAzZT0gaWVfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvZmZzZXQgKz0gUlNOX0NBUF9MRU47XFxuK1xcdGlmIChvZmZzZXQgKyBSU05fUE1LSURfQ09VTlRfTEVOIFxcdTAwM2UgaWVfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjb3VudCA9IGllW29mZnNldF0gKyAoaWVbb2Zmc2V0ICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcbitcXHRyZXR1cm4gY291bnQgXFx1MDAzZSAwO1xcbit9XFxuK1xcbiBzdGF0aWMgczMyXFxuIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbkBAIC02NDM2LDYgKzY1MjEsNyBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuIFxcdHN0cnVjdCBicmNtZl9ic3NfaW5mb19sZSAqYmk7XFxuIFxcdHN0cnVjdCBicmNtdV9jaGFuIGNoO1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcm9hbV9pbmZvIHJvYW1faW5mbyA9IHt9O1xcbitcXHRib29sIGF1dGhvcml6ZWQgPSBmYWxzZTtcXG4gXFx0dTMyIGZyZXE7XFxuIFxcdHMzMiBlcnIgPSAwO1xcbiBcXHR1OCAqYnVmO1xcbkBAIC02NDgyLDE0ICs2NTY4LDE4IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0cm9hbV9pbmZvLnJlc3BfaWUgPSBjb25uX2luZm8tXFx1MDAzZXJlc3BfaWU7XFxuIFxcdHJvYW1faW5mby5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVzcF9pZV9sZW47XFxuIFxcbitcXHRpZiAoKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XFxuK1xcdCAgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChicmNtZl9oYXNfcG1raWQocm9hbV9pbmZvLnJlcV9pZSwgcm9hbV9pbmZvLnJlcV9pZV9sZW4pIHx8XFxuK1xcdCAgICAgcHJvZmlsZS1cXHUwMDNlaXNfZnQgfHwgcHJvZmlsZS1cXHUwMDNlaXNfb2tjKSlcXG4rXFx0XFx0YXV0aG9yaXplZCA9IHRydWU7XFxuK1xcbiBcXHRjZmc4MDIxMV9yb2FtZWQobmRldiwgXFx1MDAyNnJvYW1faW5mbywgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChhdXRob3JpemVkKVxcbitcXHRcXHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cXHUwMDNlYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4gXFx0YnJjbWZfZGJnKENPTk4sIFxcXCJSZXBvcnQgcm9hbWluZyByZXN1bHRcXFxcblxcXCIpO1xcbiBcXG4tXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFxcdTAwMjZcXHUwMDI2IHByb2ZpbGUtXFx1MDAzZWlzX2Z0KSB7XFxuLVxcdFxcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVxcdTAwM2Vic3NpZCwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7XFxuLVxcdFxcdGJyY21mX2RiZyhDT05OLCBcXFwiUmVwb3J0IHBvcnQgYXV0aG9yaXplZFxcXFxuXFxcIik7XFxuLVxcdH1cXG4tXFxuIFxcdHNldF9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNURUQsIFxcdTAwMjZpZnAtXFx1MDAzZXZpZi1cXHUwMDNlc21lX3N0YXRlKTtcXG4gXFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiRXhpdFxcXFxuXFxcIik7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTY1MDQsNiArNjU5NCw3IEBAIGJyY21mX2Jzc19jb25uZWN0X2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcXHUwMDI2aWZwLVxcdTAwM2V2aWYtXFx1MDAzZXByb2ZpbGU7XFxuIFxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zO1xcbitcXHRib29sIGF1dGhvcml6ZWQ7XFxuIFxcbiBcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuIFxcbkBAIC02NTI4LDcgKzY2MTksMTUgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbiBcXHRcXHRjb25uX3BhcmFtcy5yZXFfaWVfbGVuID0gY29ubl9pbmZvLVxcdTAwM2VyZXFfaWVfbGVuO1xcbiBcXHRcXHRjb25uX3BhcmFtcy5yZXNwX2llID0gY29ubl9pbmZvLVxcdTAwM2VyZXNwX2llO1xcbiBcXHRcXHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVzcF9pZV9sZW47XFxuK1xcdFxcdGF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcXG4rXFx0XFx0XFx0ICAgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4pO1xcbiBcXHRcXHRjZmc4MDIxMV9jb25uZWN0X2RvbmUobmRldiwgXFx1MDAyNmNvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKGF1dGhvcml6ZWQpXFxuK1xcdFxcdFxcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVxcdTAwM2Vic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbiBcXHRcXHRicmNtZl9kYmcoQ09OTiwgXFxcIlJlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgY29tcGxldGVkID8gXFxcInN1Y2NlZWRlZFxcXCIgOiBcXFwiZmFpbGVkXFxcIik7XFxuIFxcdH1cXG5AQCAtNzczMSw2ICs3ODMwLDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfc2V0dXBfd2lwaHkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGJyY21mX2lmICppZnApXFxuIFxcdH1cXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFX0VYVCkpXFxuIFxcdFxcdHdpcGh5LVxcdTAwM2VmZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfU0FFO1xcbitcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8XFxuK1xcdCAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQykpXFxuK1xcdFxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7XFxuIFxcdHdpcGh5LVxcdTAwM2VtZ210X3N0eXBlcyA9IGJyY21mX3R4cnhfc3R5cGVzO1xcbiBcXHR3aXBoeS1cXHUwMDNlbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDtcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE5PKSkge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuaW5kZXggNjNlNTM0NTIzZjUxOC4uMWFhOTkzOTBhOTUxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuQEAgLTEyNyw3ICsxMjcsOCBAQCBlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAge1xcbiBcXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUsXFxuIFxcdEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLLFxcbiBcXHRCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYLFxcbi1cXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRVxcbitcXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSxcXG4rXFx0QlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNXFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTY0LDYgKzE2NSw3IEBAIGVudW0gYnJjbWZfbWdtdF90eF9zdGF0dXMge1xcbiAgKiBAYnNzaWQ6IGJzc2lkIG9mIGpvaW5lZC9qb2luaW5nIGlic3MuXFxuICAqIEBzZWM6IHNlY3VyaXR5IGluZm9ybWF0aW9uLlxcbiAgKiBAa2V5OiBrZXkgaW5mb3JtYXRpb25cXG4rICogQGlzX29rYzogT0tDIGlzIHVzZWQgZm9yIGN1cnJlbnQgY29ubmVjdGlvbi5cXG4gICovXFxuIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcXG4gXFx0dTggYnNzaWRbRVRIX0FMRU5dO1xcbkBAIC0xNzIsNiArMTc0LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUge1xcbiBcXHRlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAgdXNlX2Z3c3VwO1xcbiBcXHR1MTYgdXNlX2Z3YXV0aDtcXG4gXFx0Ym9vbCBpc19mdDtcXG4rXFx0Ym9vbCBpc19va2M7XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcXG5pbmRleCA0ODgzNjRlZjhmZjJhLi5jYzE5ZTVlN2ViZjU3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXFxuQEAgLTQ1LDYgKzQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0ge1xcbiBcXHR7IEJSQ01GX0ZFQVRfU0FFLCBcXFwic2FlIFxcXCIgfSxcXG4gXFx0eyBCUkNNRl9GRUFUX0ZXQVVUSCwgXFxcImlkYXV0aFxcXCIgfSxcXG4gXFx0eyBCUkNNRl9GRUFUX1NBRV9FWFQsIFxcXCJzYWVfZXh0XFxcIiB9LFxcbitcXHR7IEJSQ01GX0ZFQVRfRkJULCBcXFwiZmJ0IFxcXCIgfSxcXG4rXFx0eyBCUkNNRl9GRUFUX09LQywgXFxcIm9rY1xcXCIgfSxcXG4gfTtcXG4gXFxuICNpZmRlZiBERUJVR1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxcbmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmhcXG5AQCAtNTksNyArNTksOSBAQFxcbiBcXHRCUkNNRl9GRUFUX0RFRihTQ0FOX1YyKSBcXFxcXFxuIFxcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YyKSBcXFxcXFxuIFxcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcXFxcXFxuLVxcdEJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpXFxuK1xcdEJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpIFxcXFxcXG4rXFx0QlJDTUZfRkVBVF9ERUYoRkJUKSBcXFxcXFxuK1xcdEJSQ01GX0ZFQVRfREVGKE9LQylcXG4gXFxuIC8qXFxuICAqIFF1aXJrczpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5pbmRleCAwMjAzODdkNzY0MTIyLi45MjBkNWUyZDk5NjYwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuQEAgLTcxMTAsNiArNzExMCwxMCBAQCBlbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7XFxuICAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQOiBEcml2ZXIgc3VwcG9ydHMgcHJvYmluZyB0aGUgYXNzb2NpYXRlZCBBUFxcbiAgKlxcdGluIFNUQSBtb2RlIHVzaW5nIEBOTDgwMjExX0NNRF9QUk9CRV9QRUVSLlxcbiAgKlxcbisgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRDogRHJpdmVyIHN1cHBvcnRzIGZhc3Qgcm9hbWluZ1xcbisgKlxcdG9mZmxvYWQgaW4gc3RhdGlvbiBtb2RlLCBpbmNsdWRpbmcgRmFzdCBUcmFuc2l0aW9uIG9yIE9wcG9ydHVuaXN0aWNcXG4rICpcXHRLZXkgQ2FjaGluZy5cXG4rICpcXG4gICogQE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUzogbnVtYmVyIG9mIGV4dGVuZGVkIGZlYXR1cmVzLlxcbiAgKiBATUFYX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBoaWdoZXN0IGV4dGVuZGVkIGZlYXR1cmUgaW5kZXguXFxuICAqL1xcbkBAIC03MTkyLDYgKzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xcbiBcXHROTDgwMjExX0VYVF9GRUFUVVJFX1JPQ19BRERSX0ZJTFRFUixcXG4gXFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9TRVRfS0VZX0xURl9TRUVELFxcbiBcXHROTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLFxcbitcXHROTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FELFxcbiBcXG4gXFx0LyogYWRkIG5ldyBmZWF0dXJlcyBiZWZvcmUgdGhlIGRlZmluaXRpb24gYmVsb3cgKi9cXG4gXFx0TlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbmluZGV4IDQ0ZjJiYWQwODY3MDUuLmU0ODUwMTI5YTU4MmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5AQCAtMTg0MzQsNiArMTg0MzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuK1xcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4gXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4gXFx0c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHBta19jb25mID0ge307XFxuQEAgLTE4NDQyLDcgKzE4NDQzLDkgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4rXFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxcbiBcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG5AQCAtMTg0NzIsNiArMTg0NzUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbitcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuIFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuIFxcdGNvbnN0IHU4ICphYTtcXG5AQCAtMTg0ODAsNyArMTg0ODQsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbitcXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxcbitcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuIFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNjo1MS45MjM2MTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDczNTM5MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfc2V0X3Bta1wiLFxuICAgIFwibmw4MDIxMV9kZWxfcG1rXCIsXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtcIixcbiAgICBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIixcbiAgICBcImJyY21mX2Jzc19jb25uZWN0X2RvbmVcIixcbiAgICBcImJyY21mX3NldHVwX3dpcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThhMThkNjg2MGI3ZGU0YjVhZDE3M2M2YjEwMmJiMjg3ZmZlMGU3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuaW5kZXggODcyYzQ4ODA2ZDA5MS4uNTE5ZGU5NmIwNDJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuQEAgLTIxMTIsOSArMjExMiwxMSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuIFx0czMyIHZhbDtcbiBcdHMzMiBlcnI7XG4rXHRzMzIgb2tjX2VuYWJsZTtcbiBcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTtcbiBcdGNvbnN0IHU4ICppZTtcbiBcdHUzMiBpZV9sZW47XG4rXHRib29sIGZ3c3VwX3JvYW07XG4gXHR1MzIgb2Zmc2V0O1xuIFx0dTE2IHJzbl9jYXA7XG4gXHR1MzIgbWZwO1xuQEAgLTIxMjIsNiArMjEyNCw5IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXG4gXHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORTtcbiBcdHByb2ZpbGUtXHUwMDNlaXNfZnQgPSBmYWxzZTtcbitcdHByb2ZpbGUtXHUwMDNlaXNfb2tjID0gZmFsc2U7XG4rXHRmd3N1cF9yb2FtID0gYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8XG4rXHRcdCAgICAgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9PS0MpO1xuIFxuIFx0aWYgKCFzbWUtXHUwMDNlY3J5cHRvLm5fYWttX3N1aXRlcylcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMjEzOCw2ICsyMTQzLDggQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHR2YWwgPSBXUEFfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1BTSzpcbiBcdFx0XHR2YWwgPSBXUEFfQVVUSF9QU0s7XG5AQCAtMjE1MywxMSArMjE2MCwxNSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFXzgwMjFYX1NIQTI1NjpcbiBcdFx0XHR2YWwgPSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xuIFx0XHRcdGlmIChzbWUtXHUwMDNld2FudF8xeClcbiBcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcbitcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuK1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLX1NIQTI1NjpcbiBcdFx0XHR2YWwgPSBXUEEyX0FVVEhfUFNLX1NIQTI1NjtcbkBAIC0yMTcwLDEwICsyMTgxLDE2IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IHRydWU7XG4gXHRcdFx0aWYgKHNtZS1cdTAwM2V3YW50XzF4KVxuIFx0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xuK1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0FLTV9TVUlURV9GVF9QU0s6XG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDtcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbitcdFx0XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuK1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQOlxuIFx0XHRcdHZhbCA9IFdGQV9BVVRIX0RQUDtcbkBAIC0yMjA0LDggKzIyMjEsMjIgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKVxuIFx0XHRicmNtZl9kYmcoSU5GTywgXCJ1c2luZyAxWCBvZmZsb2FkXFxuXCIpO1xuK1xuK1x0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcbitcdCAgICBwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pIHtcbitcdFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXCJva2NfZW5hYmxlXCIsXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZva2NfZW5hYmxlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGJwaHlfZXJyKGRydnIsIFwiZ2V0IG9rY19lbmFibGUgZmFpbGVkICglZClcXG5cIiwgZXJyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicmNtZl9kYmcoSU5GTywgXCJva2NfZW5hYmxlICglZClcXG5cIiwgb2tjX2VuYWJsZSk7XG4rXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19va2MgPSBva2NfZW5hYmxlO1xuK1x0XHR9XG4rXHR9XG4gXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpXG4gXHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIFNBRSBvZmZsb2FkXFxuXCIpO1xuK1x0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSlcbitcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgcm9hbWluZyBvZmZsb2FkXFxuXCIpO1xuIFxuIFx0aWYgKCFicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX01GUCkpXG4gXHRcdGdvdG8gc2tpcF9tZnBfY29uZmlnO1xuQEAgLTI0OTQsMTMgKzI1MjUsMTQgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0aWYgKHNtZS1cdTAwM2VjcnlwdG8ucHNrIFx1MDAyNlx1MDAyNiAhaXNfc2FlX2FrbSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFKSB7XG4tXHRcdFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT1cbi1cdFx0XHRcdCAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XG4rXHRcdFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuK1x0XHRcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgUFNLIG9mZmxvYWRcXG5cIik7XG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuK1x0XHRcdH0gZWxzZSBpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuK1x0XHRcdFx0XHQgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSykpIHtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRnb3RvIGRvbmU7XG4gXHRcdFx0fVxuLVx0XHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIFBTSyBvZmZsb2FkXFxuXCIpO1xuLVx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbiBcdFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuIFx0XHRcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xuQEAgLTU5NTMsMTcgKzU5ODUsMjkgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiAqY29uZilcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbitcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcImVudGVyXFxuXCIpO1xuIFxuLVx0LyogZXhwZWN0IHVzaW5nIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIDFYICovXG4gXHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0aWYgKFdBUk5fT04oaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKSlcbitcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbitcdGlmIChXQVJOX09OKGlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUuaXNfZnQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLmlzX29rYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGNvbmYtXHUwMDNlcG1rX2xlbiBcdTAwM2UgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTilcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4rXHRpZiAoaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLmlzX29rYykge1xuK1x0XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcIm9rY19pbmZvX3Bta1wiLFxuK1x0XHRcdFx0XHQgICAgICAgY29uZi1cdTAwM2VwbWssIGNvbmYtXHUwMDNlcG1rX2xlbik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJva2NfaW5mb19wbWsgaW92YXIgZmFpbGVkOiByZXQ9JWRcXG5cIixcbitcdFx0XHRcdCByZXQpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGJyY21mX3NldF9wbWsoaWZwLCBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbiB9XG4gXG5AQCAtNjQyMiw2ICs2NDY2LDQ3IEBAIHN0YXRpYyBzMzIgYnJjbWZfZ2V0X2Fzc29jX2llcyhzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7XG4rXHRjb25zdCB1OCAqaWU7XG4rXHR1MzIgaWVfbGVuO1xuK1x0dTMyIG9mZnNldDtcbitcdHUxNiBjb3VudDtcbitcbitcdGlmICghcGFyc2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJzbl9pZSA9IGJyY21mX3BhcnNlX3RsdnMocGFyc2UsIGxlbiwgV0xBTl9FSURfUlNOKTtcbitcdGlmICghcnNuX2llKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZSA9IChjb25zdCB1OCAqKXJzbl9pZTtcbitcdGllX2xlbiA9IHJzbl9pZS1cdTAwM2VsZW4gKyBUTFZfSERSX0xFTjtcbitcbitcdG9mZnNldCA9IFRMVl9IRFJfTEVOICsgV1BBX0lFX1ZFUlNJT05fTEVOICsgV1BBX0lFX01JTl9PVUlfTEVOO1xuK1x0aWYgKG9mZnNldCArIFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gXHUwMDNlPSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNvdW50ID0gaWVbb2Zmc2V0XSArIChpZVtvZmZzZXQgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRvZmZzZXQgKz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiArIGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xuK1x0aWYgKG9mZnNldCArIFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gXHUwMDNlPSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNvdW50ID0gaWVbb2Zmc2V0XSArIChpZVtvZmZzZXQgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRvZmZzZXQgKz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiArIGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xuK1x0aWYgKG9mZnNldCArIFJTTl9DQVBfTEVOIFx1MDAzZT0gaWVfbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvZmZzZXQgKz0gUlNOX0NBUF9MRU47XG4rXHRpZiAob2Zmc2V0ICsgUlNOX1BNS0lEX0NPVU5UX0xFTiBcdTAwM2UgaWVfbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjb3VudCA9IGllW29mZnNldF0gKyAoaWVbb2Zmc2V0ICsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuK1xuK1x0cmV0dXJuIGNvdW50IFx1MDAzZSAwO1xuK31cbitcbiBzdGF0aWMgczMyXG4gYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtNjQzNiw2ICs2NTIxLDcgQEAgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0c3RydWN0IGJyY21mX2Jzc19pbmZvX2xlICpiaTtcbiBcdHN0cnVjdCBicmNtdV9jaGFuIGNoO1xuIFx0c3RydWN0IGNmZzgwMjExX3JvYW1faW5mbyByb2FtX2luZm8gPSB7fTtcbitcdGJvb2wgYXV0aG9yaXplZCA9IGZhbHNlO1xuIFx0dTMyIGZyZXE7XG4gXHRzMzIgZXJyID0gMDtcbiBcdHU4ICpidWY7XG5AQCAtNjQ4MiwxNCArNjU2OCwxOCBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRyb2FtX2luZm8ucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0cm9hbV9pbmZvLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLVx1MDAzZXJlc3BfaWVfbGVuO1xuIFxuK1x0aWYgKChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG4rXHQgICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGJyY21mX2hhc19wbWtpZChyb2FtX2luZm8ucmVxX2llLCByb2FtX2luZm8ucmVxX2llX2xlbikgfHxcbitcdCAgICAgcHJvZmlsZS1cdTAwM2Vpc19mdCB8fCBwcm9maWxlLVx1MDAzZWlzX29rYykpXG4rXHRcdGF1dGhvcml6ZWQgPSB0cnVlO1xuK1xuIFx0Y2ZnODAyMTFfcm9hbWVkKG5kZXYsIFx1MDAyNnJvYW1faW5mbywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoYXV0aG9yaXplZClcbitcdFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXHUwMDNlYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiBcdGJyY21mX2RiZyhDT05OLCBcIlJlcG9ydCByb2FtaW5nIHJlc3VsdFxcblwiKTtcbiBcbi1cdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFx1MDAyNlx1MDAyNiBwcm9maWxlLVx1MDAzZWlzX2Z0KSB7XG4tXHRcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVx1MDAzZWJzc2lkLCBOVUxMLCAwLCBHRlBfS0VSTkVMKTtcbi1cdFx0YnJjbWZfZGJnKENPTk4sIFwiUmVwb3J0IHBvcnQgYXV0aG9yaXplZFxcblwiKTtcbi1cdH1cbi1cbiBcdHNldF9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNURUQsIFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlc21lX3N0YXRlKTtcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCJFeGl0XFxuXCIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02NTA0LDYgKzY1OTQsNyBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSAqcHJvZmlsZSA9IFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZTtcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9yZXNwX3BhcmFtcyBjb25uX3BhcmFtcztcbitcdGJvb2wgYXV0aG9yaXplZDtcbiBcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCJFbnRlclxcblwiKTtcbiBcbkBAIC02NTI4LDcgKzY2MTksMTUgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHRjb25uX3BhcmFtcy5yZXFfaWVfbGVuID0gY29ubl9pbmZvLVx1MDAzZXJlcV9pZV9sZW47XG4gXHRcdGNvbm5fcGFyYW1zLnJlc3BfaWUgPSBjb25uX2luZm8tXHUwMDNlcmVzcF9pZTtcbiBcdFx0Y29ubl9wYXJhbXMucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVzcF9pZV9sZW47XG4rXHRcdGF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxuK1x0XHRcdCAgICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLFxuK1x0XHRcdFx0XHQgICAgIGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4pO1xuIFx0XHRjZmc4MDIxMV9jb25uZWN0X2RvbmUobmRldiwgXHUwMDI2Y29ubl9wYXJhbXMsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoYXV0aG9yaXplZClcbitcdFx0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbitcdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4gXHRcdGJyY21mX2RiZyhDT05OLCBcIlJlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcXG5cIixcbiBcdFx0XHQgIGNvbXBsZXRlZCA/IFwic3VjY2VlZGVkXCIgOiBcImZhaWxlZFwiKTtcbiBcdH1cbkBAIC03NzMxLDYgKzc4MzAsMTAgQEAgc3RhdGljIGludCBicmNtZl9zZXR1cF93aXBoeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcbiBcdH1cbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1NBRV9FWFQpKVxuIFx0XHR3aXBoeS1cdTAwM2VmZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfU0FFO1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fFxuK1x0ICAgIGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfT0tDKSlcbitcdFx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LFxuK1x0XHRcdFx0ICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7XG4gXHR3aXBoeS1cdTAwM2VtZ210X3N0eXBlcyA9IGJyY21mX3R4cnhfc3R5cGVzO1xuIFx0d2lwaHktXHUwMDNlbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDtcbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BOTykpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2M2U1MzQ1MjNmNTE4Li4xYWE5OTM5MGE5NTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMTI3LDcgKzEyNyw4IEBAIGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB7XG4gXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUsXG4gXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSyxcbiBcdEJSQ01GX1BST0ZJTEVfRldTVVBfMVgsXG4tXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRVxuK1x0QlJDTUZfUFJPRklMRV9GV1NVUF9TQUUsXG4rXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU1cbiB9O1xuIFxuIC8qKlxuQEAgLTE2NCw2ICsxNjUsNyBAQCBlbnVtIGJyY21mX21nbXRfdHhfc3RhdHVzIHtcbiAgKiBAYnNzaWQ6IGJzc2lkIG9mIGpvaW5lZC9qb2luaW5nIGlic3MuXG4gICogQHNlYzogc2VjdXJpdHkgaW5mb3JtYXRpb24uXG4gICogQGtleToga2V5IGluZm9ybWF0aW9uXG4rICogQGlzX29rYzogT0tDIGlzIHVzZWQgZm9yIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgKi9cbiBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7XG4gXHR1OCBic3NpZFtFVEhfQUxFTl07XG5AQCAtMTcyLDYgKzE3NCw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB1c2VfZndzdXA7XG4gXHR1MTYgdXNlX2Z3YXV0aDtcbiBcdGJvb2wgaXNfZnQ7XG4rXHRib29sIGlzX29rYztcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXG5pbmRleCA0ODgzNjRlZjhmZjJhLi5jYzE5ZTVlN2ViZjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuY1xuQEAgLTQ1LDYgKzQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0ge1xuIFx0eyBCUkNNRl9GRUFUX1NBRSwgXCJzYWUgXCIgfSxcbiBcdHsgQlJDTUZfRkVBVF9GV0FVVEgsIFwiaWRhdXRoXCIgfSxcbiBcdHsgQlJDTUZfRkVBVF9TQUVfRVhULCBcInNhZV9leHRcIiB9LFxuK1x0eyBCUkNNRl9GRUFUX0ZCVCwgXCJmYnQgXCIgfSxcbitcdHsgQlJDTUZfRkVBVF9PS0MsIFwib2tjXCIgfSxcbiB9O1xuIFxuICNpZmRlZiBERUJVR1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG5pbmRleCAzMWY4Njk1Y2E0MTc2Li44MTY1YTI4NmI2MzA4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxuQEAgLTU5LDcgKzU5LDkgQEBcbiBcdEJSQ01GX0ZFQVRfREVGKFNDQU5fVjIpIFxcXG4gXHRCUkNNRl9GRUFUX0RFRihQTUtJRF9WMikgXFxcbiBcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcXFxuLVx0QlJDTUZfRkVBVF9ERUYoU0FFX0VYVClcbitcdEJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpIFxcXG4rXHRCUkNNRl9GRUFUX0RFRihGQlQpIFxcXG4rXHRCUkNNRl9GRUFUX0RFRihPS0MpXG4gXG4gLypcbiAgKiBRdWlya3M6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjkyMGQ1ZTJkOTk2NjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtNzExMCw2ICs3MTEwLDEwIEBAIGVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHtcbiAgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9QUk9CRV9BUDogRHJpdmVyIHN1cHBvcnRzIHByb2JpbmcgdGhlIGFzc29jaWF0ZWQgQVBcbiAgKlx0aW4gU1RBIG1vZGUgdXNpbmcgQE5MODAyMTFfQ01EX1BST0JFX1BFRVIuXG4gICpcbisgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRDogRHJpdmVyIHN1cHBvcnRzIGZhc3Qgcm9hbWluZ1xuKyAqXHRvZmZsb2FkIGluIHN0YXRpb24gbW9kZSwgaW5jbHVkaW5nIEZhc3QgVHJhbnNpdGlvbiBvciBPcHBvcnR1bmlzdGljXG4rICpcdEtleSBDYWNoaW5nLlxuKyAqXG4gICogQE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUzogbnVtYmVyIG9mIGV4dGVuZGVkIGZlYXR1cmVzLlxuICAqIEBNQVhfTkw4MDIxMV9FWFRfRkVBVFVSRVM6IGhpZ2hlc3QgZXh0ZW5kZWQgZmVhdHVyZSBpbmRleC5cbiAgKi9cbkBAIC03MTkyLDYgKzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xuIFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9ST0NfQUREUl9GSUxURVIsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1NFVF9LRVlfTFRGX1NFRUQsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLFxuK1x0Tkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCxcbiBcbiBcdC8qIGFkZCBuZXcgZmVhdHVyZXMgYmVmb3JlIHRoZSBkZWZpbml0aW9uIGJlbG93ICovXG4gXHROVU1fTkw4MDIxMV9FWFRfRkVBVFVSRVMsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDQ0ZjJiYWQwODY3MDUuLmU0ODUwMTI5YTU4MmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTg0MzQsNiArMTg0MzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuK1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFx1MDAyNnJkZXYtXHUwMDNld2lwaHk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9O1xuQEAgLTE4NDQyLDcgKzE4NDQzLDkgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4rXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuK1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4gXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuQEAgLTE4NDcyLDYgKzE4NDc1LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4rXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIFx0Y29uc3QgdTggKmFhO1xuQEAgLTE4NDgwLDcgKzE4NDg0LDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4rXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuK1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4gXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6MzY6NTEuOTIzNjIwODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTE3NzgwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRXZhbHVhdGlvbjogV2lyZWxlc3MgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXMgcmVsYXRlZCB0byB0aGUgYGJyY21mbWFjYCB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hY2AgZGlyZWN0b3J5LiBJdCBhbHNvIG1vZGlmaWVzIGBpbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oYCBhbmQgYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQncyBjb3JlIHdpcmVsZXNzIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29yZSBjaGFuZ2UgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgY2hlY2tzIHJlbGF0ZWQgdG8gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgLiBUaGlzIGludm9sdmVzIGV4dGVuZGluZyBhbiBleGlzdGluZyBjaGVjayB3aXRoIGBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEYC4gTm93LCB0aGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgYG5sODAyMTEuY2AgaGFuZGxlcyB0aGVzZSBjb21tYW5kcyB2aWEgZ2VuZXJpYyBuZXRsaW5rIChgTkw4MDIxMV9DTURfU0VUX1BNS2AgLyBgTkw4MDIxMV9DTURfREVMX1BNS2ApIGZyb20gdXNlcnNwYWNlLiBUaGF0J3MgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGZ1enppbmchIEFuZCwgaW1wb3J0YW50bHksIGBicmNtZm1hY2AgKmhhcyogVVNCIHN1cHBvcnQgKGBDT05GSUdfQlJDTUZNQUNfVVNCYCksIG1lYW5pbmcgaXQncyByZWFjaGFibGUgdmlhIGEgVVNCIGVtdWxhdGlvbiBzZXR1cCBpZiBuZWVkZWQsIG1ha2luZyBpdCBmdXp6YWJsZS4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZS5cblxuRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGluIHRoZSBgYnJjbWZtYWNgIGRyaXZlciBpdHNlbGYsIHBhcnRpY3VsYXJseSBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCwgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgLCBhbmQgYGJyY21mX2hhc19wbWtpZGAgbm93IGluY2x1ZGUgbmV3IHBhcnNpbmcgbG9naWMgYW5kIHNvbWUgYFdBUk5fT05gIGNoZWNrcy4gVGhhdCdzIGEgcmVkIGZsYWcgKGluIGEgZ29vZCB3YXkhKSwgaW1wbHlpbmcgbmV3IGNvZGUgcGF0aHMgYW5kIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdG8gZnV6emluZy4gVGhlc2UgY2hlY2tzIGFyZSBub3cgY2hlY2tpbmcgaWYgYGlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCBcdTAwMjZcdTAwMjYgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19mdCBcdTAwMjZcdTAwMjYgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19va2NgLiBUaGlzIGlzIGFsbCBjcml0aWNhbCBjb25maWd1cmF0aW9uIGFuZCBmbG93IGNvbnRyb2wgbG9naWMuXG5cblNvLCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgYW5kIHRoZSBjaGFuZ2VzIGluY2x1ZGUgbmV3IGxvZ2ljLCBwYXJ0aWN1bGFybHkgaW4gYSBwb3RlbnRpYWxseSBjb21wbGV4IGFyZWEgbGlrZSB3aXJlbGVzcyBzZWN1cml0eSBhbmQgcm9hbWluZy4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlIGFuZCBkZXBlbmRlbmNpZXMgbW9yZSBkZWVwbHkgKEtjb25maWcsIGV0Yy4pIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBCdXQgYmFzZWQgb24gdGhpcyBpbml0aWFsIGFuYWx5c2lzLCBpdCdzIGEgc3Ryb25nIHllcyBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNjo1OC40NDE0MDQ1MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4OTg4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5MODAyMTFfQ01EX1NFVF9QTUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNzEtXFx0e1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAwNzI6XFx0XFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUtTQSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMDczLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NTMtXFx0e1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA0NTQ6XFx0XFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUssXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ1NS1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM2OjU4LjcwMDQwMDIxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MTQ2Njk3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIENGRzgwMjExIGFuZCBCUkNNRk1BQyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29uZmlndXJhdGlvbiBpbnRlcmFjdGlvbnMgYmV0d2VlbiBDRkc4MDIxMSBhbmQgQlJDTUZNQUMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgZW5hYmxlZCwgYW55IGRlcGVuZGVuY2llcyB0aGF0IGV4aXN0LCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gYm90aCBkcml2ZXJzLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlaXIgYENPTkZJR19gIG9wdGlvbnMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgbW9kdWxlcyBvciBidWlsdC1pbiB0byB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBvcHRpb25zIHNldCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdW51c3VhbCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyB0aGF0IG1pZ2h0IG1hbmlmZXN0IGFzIGJ1aWxkIGVycm9ycyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGxhdGVyIG9uLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgc2VhbWxlc3MgaW50ZWdyYXRpb24sIHNvIEkgbXVzdCBjb25zaWRlciBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgd2lyZWxlc3Mgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjA0LjExNTA3MjQxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY3NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MDQuMjAzNzU5MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTAzNDEyNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgQlJDTTgwMjExIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHF1aXJrcyBiYWtlZCBpbnRvIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBlc3NlbnRpYWxseSBiZSBteSByb2FkbWFwIHRvIHNlZSB3aGF0IEJyb2FkY29tIGZlYXR1cmVzIGFuZCB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFuZCBob3cgdGhleSdyZSBleHBvc2VkIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MDcuMTA3MTc0MTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBCUkNNVVRJTFxcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIEJSQ01TTUFDXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gSUVFRTgwMi4xMW4gUENJZSBTb2Z0TUFDIFdMQU4gZHJpdmVyXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBCQ01BX1BPU1NJQkxFXFxuICAgOTpcXHRcXHRzZWxlY3QgQkNNQVxcbiAgMTA6XFx0XFx0c2VsZWN0IEJSQ01VVElMXFxuICAxMTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAxMjpcXHRcXHRzZWxlY3QgQ09SRElDXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUENJZSB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgMTU6XFx0XFx0ICBJRUVFODAyLjExbiBTb2Z0TUFDIGNoaXBzZXRzLiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCB0aGVcXG4gIDE2OlxcdFxcdCAgZHJpdmVyIHdpbGwgYmUgY2FsbGVkIGJyY21zbWFjLmtvLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgQlJDTVNNQUNfTEVEU1xcbiAgMTk6XFx0XFx0ZGVmX2Jvb2wgQlJDTVNNQUMgXFx1MDAyNlxcdTAwMjYgQkNNQV9EUklWRVJfR1BJTyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9MRURTXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFRoZSBicmNtc21hYyBMRUQgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGVcXG4gIDIyOlxcdFxcdCAgQkNNQV9EUklWRVJfR1BJTyBkcml2ZXIsIGFuZCBpdCBvbmx5IHdvcmtzIGlmIExFRCBzdXBwb3J0XFxuICAyMzpcXHRcXHQgIGlzIGVuYWJsZWQgYW5kIHJlYWNoYWJsZSBmcm9tIHRoZSBkcml2ZXIgbW9kdWxlLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlJDTV9UUkFDSU5HXFxuICAyODpcXHRcXHRib29sIFxcXCJCcm9hZGNvbSBkZXZpY2UgdHJhY2luZ1xcXCJcXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gQlJDTVNNQUMgfHwgQlJDTUZNQUNcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR1xcbiAgMzE6XFx0XFx0aGVscFxcbiAgMzI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlcnMgd2lsbCByZWdpc3RlclxcbiAgMzM6XFx0XFx0ICB3aXRoIGZ0cmFjZSB0byBkdW1wIGV2ZW50IGluZm9ybWF0aW9uIGludG8gdGhlIHRyYWNlIHJpbmdidWZmZXIuXFxuICAzNDpcXHRcXHQgIFRyYWNpbmcgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGltZSB0byBhaWQgaW4gZGVidWdnaW5nIHdpcmVsZXNzXFxuICAzNTpcXHRcXHQgIGlzc3Vlcy4gVGhpcyBvcHRpb24gYWRkcyBhIHNtYWxsIGFtb3VudCBvZiBvdmVyaGVhZCB3aGVuIHRyYWNpbmdcXG4gIDM2OlxcdFxcdCAgaXMgZGlzYWJsZWQuIElmIHVuc3VyZSwgc2F5IFkgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byBiZXR0ZXIgaGVscFxcbiAgMzc6XFx0XFx0ICB5b3Ugd2hlbiB3aXJlbGVzcyBwcm9ibGVtcyBvY2N1ci5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIEJSQ01EQkdcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIkJyb2FkY29tIGRyaXZlciBkZWJ1ZyBmdW5jdGlvbnNcXFwiXFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIEJSQ01TTUFDIHx8IEJSQ01GTUFDXFxuICA0MjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVAgaWYgQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgU2VsZWN0aW5nIHRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIGNvZGUgZm9yIGRlYnVnIHB1cnBvc2VzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzowNy4xMDcyNDQ0MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc0MjE5NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBicmNtZm1hYyBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCcm9hZGNvbSBmdWxsbWFjIGRyaXZlciBjb25maWd1cmF0aW9uIGlzIHNldCB1cCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGtleSB0byB0aGF0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ludGF4OiBgY29uZmlnYCBibG9ja3MsIGBib29sYCBhbmQgYHRyaXN0YXRlYCBvcHRpb25zLCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIHB1bGwgaW4gc3VwcG9ydGluZyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGVscCB0ZXh0IHRvIGd1aWRlIHVzZXJzLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgb3B0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoZSBicmNtZm1hYyBkcml2ZXIgYXMgYSB3aG9sZSwgcGx1cyBhbnkgZ3JhbnVsYXIgY29udHJvbHMgZm9yIHNwZWNpZmljIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHZhcmlhbnRzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG5lZWQgdG8gYmUgcHJlc2VudCBmb3IgdGhlIGJyY21mbWFjIGRyaXZlciB0byBidWlsZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgaW4gaGVyZSwgYW55dGhpbmcgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCByZWd1bGF0b3J5IGRvbWFpbnMsIG9yIGZpcm13YXJlIGxvYWRpbmc/IFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBkcml2ZXIncyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gY29udHJpYnV0ZSB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4NCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MDkuNTgxNDY2NjM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBCUkNNRk1BQ1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgIDc6XFx0XFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXFxuICAgODpcXHRcXHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWRcXG4gICA5OlxcdFxcdCAgYnJjbWZtYWMua28uXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEJSQ01GTUFDX1NESU9cXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gKE1NQyA9IHkgfHwgTU1DID0gQlJDTUZNQUMpXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIEJSQ01GTUFDXFxuICAyMTpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbiAgMjI6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgMjY6XFx0XFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xcbiAgMjc6XFx0XFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYSBTRElPIHdpcmVsZXNzIGNhcmQuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBCUkNNRk1BQ19VU0JcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiAoVVNCID0geSB8fCBVU0IgPSBCUkNNRk1BQylcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDMzOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAzNDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAzNzpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAzODpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhbiBVU0Igd2lyZWxlc3MgY2FyZC5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuICA0NTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgNDg6XFx0XFx0ICBJRUVFODAyLjExYWMgZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDQ5OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFBDSUUgd2lyZWxlc3MgY2FyZC5cXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzowOS41ODE1ODI4MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5NTA0MDY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBXaXJlbGVzcyBGYXN0IFJvYW1pbmcgT2ZmbG9hZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gVGhpcyBwYXRjaCBoaXRzIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB3aXRoIGNoYW5nZXMgdG8gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gTmV0bGluayBpbnRlcmZhY2VzIGFyZSBhbHdheXMgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIGBubDgwMjExYCBpcyBwYXJ0IG9mIHRoZSBjb3JlIHdpcmVsZXNzIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyB0aGF0J3MgYSBkaXJlY3Qgcm91dGUgaW4gdmlhIGBORVRMSU5LX0dFTkVSSUNgLlxuXG5UaGVuLCB3ZSBoYXZlIHRoZSBgYnJjbWZtYWNgIGRyaXZlciBjb2RlOiBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9oYXNfcG1raWRgLCBgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZWAsIGBicmNtZl9ic3NfY29ubmVjdF9kb25lYCwgYW5kIGBicmNtZl9zZXR1cF93aXBoeWAuIFRoZSBwcmVzZW5jZSBvZiBib3RoIGRpcmVjdCBgbmw4MDIxMWAgdG91Y2hlcyBhbmQgdGhlIGRyaXZlciBjaGFuZ2VzIHN1Z2dlc3RzIHRoaXMgaXMgbGlrZWx5IGEgZ29vZCB0YXJnZXQuIFRoZSBgYnJjbWZtYWNgIGRyaXZlciBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZW11bGF0aW9uIChgQ09ORklHX0JSQ01GTUFDX1VTQmApIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZ2VuZXJpYyBuZXRsaW5rIGFuZCBjZmc4MDIxMSBvcGVyYXRpb25zIGxpa2UgYE5MODAyMTFfQ01EX0NPTk5FQ1RgLCBgTkw4MDIxMV9DTURfU0VUX1BNS2AsIGFuZCBgTkw4MDIxMV9DTURfREVMX1BNS2AuIFRoYXQncyBhIHNvbGlkIGF0dGFjayBzdXJmYWNlLlxuXG5UaGlzIHBhdGNoIGlzIGFkZGluZyBmYXN0IHJvYW1pbmcgb2ZmbG9hZCwgT0tDLCBQTUtJRCBwYXJzaW5nIHZpYSBgYnJjbWZfaGFzX3Bta2lkYCwgcG9ydCBhdXRob3JpemF0aW9uLCBhbmQgbW9kaWZ5aW5nIGRlZmVuc2l2ZSBhc3NlcnRpb25zIHdpdGggYFdBUk5fT05gIHdpdGhpbiB0aGUgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AgZnVuY3Rpb25zLiBUaGlzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoZSBjaGFuY2VzIG9mIGludGVyZXN0aW5nIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmU6XG4qICAgYG5sODAyMTFfc2V0X3Bta2BcbiogICBgbmw4MDIxMV9kZWxfcG1rYFxuKiAgIGBicmNtZl9zZXRfa2V5X21nbXRgXG4qICAgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgXG4qICAgYGJyY21mX2NmZzgwMjExX3NldF9wbWtgXG4qICAgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgXG4qICAgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgXG4qICAgYGJyY21mX3NldHVwX3dpcGh5YFxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgYnJjbWZfc2V0X2tleV9tZ210YCBpcyBzdGF0aWMgb3IgZXhwb3J0ZWQvdXNlZCBpbiBgY2ZnODAyMTEuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSBob3cgZGlyZWN0bHkgY29udHJvbGxhYmxlIGl0IGlzIGZyb20gYSB1c2VyLXNwYWNlIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIzMSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjE2LjQ3NjYyNjMyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NjY2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3NldF9rZXlfbWdtdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIxMDc9c3RhdGljIHMzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIxMDg6YnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTI0MTI9YnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI1MDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjUwOTpcXHRlcnIgPSBicmNtZl9zZXRfa2V5X21nbXQobmRldiwgc21lKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNTEwLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MTYuNjE1Mjk3MjU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyODY5MzA4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBicmNtZiBXaS1GaSBEcml2ZXIncyBQTUtJRCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgUE1LSURzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byByb2FtaW5nIGFuZCBjb25uZWN0aW9uIHByb2Nlc3Nlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYnJjbWZfaGFzX3Bta2lkYC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYGNmZzgwMjExLmNgLCBhbmQgdGhhdCdzIGFscmVhZHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIGludGVybmFsIHRvIHRoZSBmaWxlLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSBhIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBvbmx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBicmNtZl9oYXNfcG1raWRgIGFjdHVhbGx5ICp1c2VkKj8gQWgsIGl0J3MgY2FsbGVkIGZyb20gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAuIFRoYXQncyB0aGUga2V5LlxuXG5Ob3csIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAgYXJlIHRoZSBjcnVjaWFsIG5leHQgc3RlcHMuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgZ292ZXJuIHRoZSBjb21wbGV0aW9uIG9mIHRoZSByb2FtaW5nIGFuZCBjb25uZWN0aW9uIHByb2Nlc3NlcywgcmVzcGVjdGl2ZWx5LiBLbm93aW5nIGhvdyBgYnJjbWZfaGFzX3Bta2lkYCBpcyBpbnZvbHZlZCBpbiAqdGhvc2UqIGNvbXBsZXRpb24gcm91dGluZXMgaXMgZ29pbmcgdG8gdGVsbCBtZSBleGFjdGx5IGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdyBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg4NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjE5LjkwMjIzMDcwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5MTA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1ODg9c3RhdGljIHMzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY1ODk6YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY1OTAtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBjb25zdCBzdHJ1Y3QgYnJjbWZfZXZlbnRfbXNnICplLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjY4Nj1icmNtZl9ub3RpZnlfY29ubmVjdF9zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzE1LVxcdFxcdH0gZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY3MTY6XFx0XFx0XFx0YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShjZmcsIG5kZXYsIGUsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MTctXFx0XFx0YnJjbWZfbmV0X3NldGNhcnJpZXIoaWZwLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjczMDpcXHRcXHRcXHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgbmRldiwgZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MzEtXFx0XFx0XFx0YnJjbWZfbGlua19kb3duKGlmcC1cXHUwMDNldmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc0Ni1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc0NzpcXHRcXHRcXHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgbmRldiwgZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3NDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Njc1ND1icmNtZl9ub3RpZnlfcm9hbWluZ19zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY1LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NjpcXHRcXHRcXHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgaWZwLVxcdTAwM2VuZGV2LCBlLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY3LVxcdFxcdFxcdGJyY21mX25ldF9zZXRjYXJyaWVyKGlmcCwgdHJ1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjE5Ljk5NTE0NzQ0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI1ODU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBXaUZpIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipFeGFtaW5pbmcgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgSSBrbm93IGl0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgZmluYWwgaGFuZHNoYWtlIGFuZCBjb21wbGV0aW9uIHN0YXRlIGZvciBhIEJTUyAoQmFzaWMgU2VydmljZSBTZXQpIHJvYW1pbmcgZXZlbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCB3aGF0IGl0ICpzaG91bGQqIGJlIGRvaW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSByb2FtaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBCcm9hZGNvbSBXaUZpIGRyaXZlci4gSXMgaXQgc2ltcGx5IGEgbm90aWZpY2F0aW9uIGJhY2sgdG8gdGhlIHVwcGVyIGxheWVycywgb3IgaXMgaXQgbW9yZSBjb21wbGV4IHRoYW4gdGhhdCwgaGFuZGxpbmcgdGhpbmdzIGxpa2Ugc2VjdXJpdHkga2V5IHJlZnJlc2ggb3IgdXBkYXRpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGU/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBpbnB1dHMsIG91dHB1dHMsIGFuZCBhbnkgaW1wb3J0YW50IHNpZGUgZWZmZWN0cyB0aGlzIGZ1bmN0aW9uIGhhcyBvbiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbS4gQSBxdWljayBjaGVjayBvZiBpdHMgY2FsbCBncmFwaCBpcyBkZWZpbml0ZWx5IGluIG9yZGVyIHRvIHNlZSB3aGVyZSBpdCBzaXRzIGluIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBiZSBwcmVzZW50IGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgbG9ja2luZyBpc3N1ZXMgYW5kIGFjY2VzcyB0byBzaGFyZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4MiwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjIzLjIyMTAwMzg5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5ODkwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYnNzX3JvYW1pbmdfZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1MTA9c3RhdGljIHMzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY1MTE6YnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY1MTItXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Njc1ND1icmNtZl9ub3RpZnlfcm9hbWluZ19zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzYzLVxcdFxcdFxcdCAgICAgXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NDpcXHRcXHRcXHRicmNtZl9ic3Nfcm9hbWluZ19kb25lKGNmZywgaWZwLVxcdTAwM2VuZGV2LCBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY1LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjIzLjMxNTk5NzM3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM4NjUyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQnJvYWRjb20gV2ktRmkgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCcm9hZGNvbSdzIGZlYXR1cmVzIGFyZSBpbml0aWFsaXplZCBhbmQgYXR0YWNoZWQgd2l0aGluIHRoZWlyIHdpcmVsZXNzIGRyaXZlci4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgdGhlIGBicmNtZl9mZWF0X2F0dGFjaGAgZnVuY3Rpb24uIFNvLCBsZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uIGFuZCBzZXR1cCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBoYW5kc2hha2UgYmV0d2VlbiB0aGUgZmlybXdhcmUgYW5kIHRoZSBkcml2ZXIgdGFrZXMgcGxhY2UsIEknbSBzdXJlIG9mIGl0LiBUaGlzIHdpbGwgc2hvdyBtZSB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIG1hbmFnZWQuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGZlYXR1cmUgc2V0cyBhbmQgd2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBjb25maWd1cmUgdGhvc2UgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEknbGwgc3RhcnQgd29ya2luZyBvdXR3YXJkcyBpbnRvIHRoZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODczLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MjUuODU0NjUzMzA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjUwMzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9md2NhcF9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTMyPXN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzozNzpzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0zOC1cXHR7IEJSQ01GX0ZFQVRfTUJTUywgXFxcIm1ic3NcXFwiIH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTIzMD1zdGF0aWMgdm9pZCBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ1OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJyY21mX2Z3Y2FwX21hcCk7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ2OlxcdFxcdGlmIChzdHJuc3RyKGNhcHMsIGJyY21mX2Z3Y2FwX21hcFtpXS5md2NhcF9pZCwgc2l6ZW9mKGNhcHMpKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ3OlxcdFxcdFxcdGlkID0gYnJjbWZfZndjYXBfbWFwW2ldLmZlYXR1cmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yNDgtXFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJlbmFibGluZyBmZWF0dXJlOiAlc1xcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MjUuOTIxMTYyMDU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODY4MDE4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIFBNSyBNYW5hZ2VtZW50IGluIG5sODAyMTEuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgYWdhaW4uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IFBNS3MgKFBhaXJ3aXNlIE1hc3RlciBLZXlzKSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExYCBzdWJzeXN0ZW0uIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYW5kIGRlbGV0aW5nIHRoZXNlIGtleXMg4oCTIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gSSBuZWVkIHRvIHJldmlldyBgbmw4MDIxMV9zZXRfcG1rYCBhbmQgYG5sODAyMTFfZGVsX3Bta2AgZnVuY3Rpb25zIGluIHRoYXQgc291cmNlIGZpbGUsIG9mIGNvdXJzZS4gSSdsbCBhbmFseXplIGhvdyB0aGUgUE1LIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGlvbiBvciBuZXR3b3JrLCBhbmQgd2hhdCBjb25zaWRlcmF0aW9ucyBhcmUgbWFkZSBmb3Igc2VjdXJpdHksIHJldm9jYXRpb24sIGFuZCBhbGwgdGhhdCBmdW4gc3R1ZmYgdGhhdCdzIGNyaXRpY2FsIGluIGEgV2ktRmkgZW52aXJvbm1lbnQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjI4LjMwNzk2NjI0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg0MzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDMwOlxcdFxcbjE4NDMxOlxcdFxcdHJldHVybiByZGV2X3NldF9tdWx0aWNhc3RfdG9fdW5pY2FzdChyZGV2LCBkZXYsIGVuYWJsZWQpO1xcbjE4NDMyOlxcdH1cXG4xODQzMzpcXHRcXG4xODQzNDpcXHRzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NDM1OlxcdHtcXG4xODQzNjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODQzNzpcXHRcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5O1xcbjE4NDM4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODQzOTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NDQwOlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9O1xcbjE4NDQxOlxcdFxcbjE4NDQyOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbjE4NDQzOlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcXG4xODQ0NDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0NDU6XFx0XFxuMTg0NDY6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ0NzpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuMTg0NDg6XFx0XFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ0OTpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcXG4xODQ1MDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0NTE6XFx0XFxuMTg0NTI6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pXFxuMTg0NTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg0NTQ6XFx0XFxuMTg0NTU6XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2Vjb25uZWN0ZWQpXFxuMTg0NTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4xODQ1NzpcXHRcXG4xODQ1ODpcXHRcXHRwbWtfY29uZi5hYSA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4xODQ1OTpcXHRcXHRpZiAobWVtY21wKHBta19jb25mLmFhLCB3ZGV2LVxcdTAwM2V1LmNsaWVudC5jb25uZWN0ZWRfYWRkciwgRVRIX0FMRU4pKVxcbjE4NDYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NDYxOlxcdFxcbjE4NDYyOlxcdFxcdHBta19jb25mLnBtayA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKTtcXG4xODQ2MzpcXHRcXHRwbWtfY29uZi5wbWtfbGVuID0gbmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LXSk7XFxuMTg0NjQ6XFx0XFx0aWYgKHBta19jb25mLnBta19sZW4gIT0gV0xBTl9QTUtfTEVOIFxcdTAwMjZcXHUwMDI2XFxuMTg0NjU6XFx0XFx0ICAgIHBta19jb25mLnBta19sZW4gIT0gV0xBTl9QTUtfTEVOX1NVSVRFX0JfMTkyKVxcbjE4NDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NDY3OlxcdFxcbjE4NDY4OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LUjBfTkFNRV0pXFxuMTg0Njk6XFx0XFx0XFx0cG1rX2NvbmYucG1rX3IwX25hbWUgPVxcbjE4NDcwOlxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtSMF9OQU1FXSk7XFxuMTg0NzE6XFx0XFxuMTg0NzI6XFx0XFx0cmV0dXJuIHJkZXZfc2V0X3BtayhyZGV2LCBkZXYsIFxcdTAwMjZwbWtfY29uZik7XFxuMTg0NzM6XFx0fVxcbjE4NDc0OlxcdFxcbjE4NDc1OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTg0NzY6XFx0e1xcbjE4NDc3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbjE4NDc4OlxcdFxcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxuMTg0Nzk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjE4NDgwOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuMTg0ODE6XFx0XFx0Y29uc3QgdTggKmFhO1xcbjE4NDgyOlxcdFxcbjE4NDgzOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbjE4NDg0OlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcXG4xODQ4NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0ODY6XFx0XFxuMTg0ODc6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ4ODpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuMTg0ODk6XFx0XFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ5MDpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcXG4xODQ5MTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0OTI6XFx0XFxuMTg0OTM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG4xODQ5NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODQ5NTpcXHRcXG4xODQ5NjpcXHRcXHRhYSA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4xODQ5NzpcXHRcXHRyZXR1cm4gcmRldl9kZWxfcG1rKHJkZXYsIGRldiwgYWEpO1xcbjE4NDk4OlxcdH1cXG4xODQ5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MjguMzA5MTAxOTY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMDc4MzE0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgV2lyZWxlc3MgRmFzdCBSb2FtIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIGBDRkc4MDIxMWAgaXMgZXNzZW50aWFsLCBuYXR1cmFsbHksIGFzIGl0J3MgdGhlIGNvcmUgODAyLjExIHdpcmVsZXNzIHN1cHBvcnQgYW5kIGNydWNpYWwgZm9yIGBubDgwMjExLmNgLiBUaGVuIHdlIGhhdmUgYEJSQ01GTUFDYCBmb3IgdGhlIEJyb2FkY29tIEZ1bGxNQUMgZHJpdmVyIGFuZCBgQlJDTUZNQUNfVVNCYCBmb3IgdGhlIFVTQiB2YXJpYW50LiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGBDRkc4MDIxMWAgZGVwZW5kcyBvbiBgTkVUYCBhbmQgYFdJUkVMRVNTYCDigJMgeWVwLCB0aGF0IGFsaWducyB3aXRoIGV4cGVjdGF0aW9ucy5cblxuTG9va2luZyBpbnRvIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgY29uZmlybXMgYENGRzgwMjExYCBkZXBlbmRzIG9uIGBSRktJTExgIChvciBpdHMgaW52ZXJzZSkgYW5kIHNlbGVjdHMgYEZXX0xPQURFUmAsIHdoaWNoIGlzIHN0YW5kYXJkLiBgQlJDTUZNQUNgIGluIHR1cm4gZGVwZW5kcyBvbiBgQ0ZHODAyMTFgIGFuZCBzZWxlY3RzIGBCUkNNVVRJTGAsIG1ha2VzIHNlbnNlLiBgQlJDTUZNQUNfVVNCYCBidWlsZHMgb24gYEJSQ01GTUFDYCBhbmQgbmVlZHMgZWl0aGVyIGBVU0IgPSB5YCBvciBgVVNCID0gQlJDTUZNQUNgLCBhbmQgc2VsZWN0cyBgQlJDTUZNQUNfUFJPVE9fQkNEQ2AgYW5kIGBGV19MT0FERVJgLiBBbHJpZ2h0LCBhbGwgdGhlIGRlcGVuZGVuY2llcyBjaGVjayBvdXQuXG5cbk5leHQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gSSBzZWUgYG5sODAyMTFfc2V0X3Bta2AsIGBubDgwMjExX2RlbF9wbWtgLCBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCwgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgLCBhbmQgYGJyY21mX3NldHVwX3dpcGh5YC4gWWVzLCB0aGVzZSBhcmUgYWxsIHF1aXRlIHNwZWNpZmljIHRvIG5ldGxpbmssIEJyb2FkY29tLCBQTUsgY29uZmlndXJhdGlvbiwgY29ubmVjdGlvbiBhbmQgcm9hbWluZyBoYW5kbGluZyDigJMgdGhlc2UgYXJlIGNlcnRhaW5seSBnb29kIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGV2ZXJ5dGhpbmcgYmVmb3JlIEkgY29tbWl0IHRoaXMgYW5hbHlzaXMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGRlZmluaXRlbHkgdHJ1ZTsgdGhpcyBpcyBhIGNsZWFyIGFyZWEgZm9yIGZ1enppbmcuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHdlJ3JlIHRhbGtpbmcgYWJvdXQgZmFzdCByb2FtIG9mZmxvYWQgKEZCVC9PS0MpIHN1cHBvcnQsIFBNSyBjb25maWd1cmF0aW9uIGNoYW5nZXMgc3Bhbm5pbmcgbmV0bGluayAoYG5sODAyMTEuY2ApIGFuZCB0aGUgQnJvYWRjb20gZHJpdmVyIChgYnJjbWZtYWNgKS4gSXQncyBtb2RpZnlpbmcgbmV0bGluayBwZXJtaXNzaW9uIGNoZWNrcyBpbiBrZXkgcGF0aHMsIGFkZGluZyBQTUtJRCBwYXJzaW5nLCBhbmQgYWx0ZXJpbmcgYXV0aG9yaXphdGlvbiBsb2dpYyBkdXJpbmcgY29ubmVjdGlvbnMgYW5kIHJvYW1pbmcuIEFsc28gdGhlcmUgYXJlIGBXQVJOX09OYCBhc3NlcnRpb25zIGluIGtleSBtYW5hZ2VtZW50IGFuZCBQTUsgc2V0dGluZyBwYXRocy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChgTkw4MDIxMWApIGFuZCB2aXJ0dWFsIHdpcmVsZXNzL1VTQiBpbnRlcmZhY2VzLlxuXG5UaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0OiBgW1wiQ0ZHODAyMTFcIiwgXCJCUkNNRk1BQ1wiLCBcIkJSQ01GTUFDX1VTQlwiXWAuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgd2hhdCBJIGlkZW50aWZpZWQ6IGBbXCJubDgwMjExX3NldF9wbWtcIiwgXCJubDgwMjExX2RlbF9wbWtcIiwgXCJicmNtZl9zZXRfa2V5X21nbXRcIiwgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta1wiLCBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIiwgXCJicmNtZl9ic3NfY29ubmVjdF9kb25lXCIsIFwiYnJjbWZfc2V0dXBfd2lwaHlcIl1gLlxuXG5JJ3ZlIGNoZWNrZWQgb3ZlciB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzIG9uZSBsYXN0IHRpbWUuIFRoZXJlIGRvbid0IHNlZW0gdG8gYmUgYW55IG90aGVyIGltbWVkaWF0ZSByZWQgZmxhZ3MuIEl0IGFsbCBsb29rcyBjb21wcmVoZW5zaXZlIGFuZCB3ZWxsLWRlZmluZWQuIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MDEsIk91dHB1dFRva2VucyI6Mjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MzYuNTE2OTM2MDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDcxNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfc2V0X3Bta1wiLFxuICAgIFwibmw4MDIxMV9kZWxfcG1rXCIsXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtcIixcbiAgICBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIixcbiAgICBcImJyY21mX2Jzc19jb25uZWN0X2RvbmVcIixcbiAgICBcImJyY21mX3NldHVwX3dpcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX3NldF9wbWtcIixcbiAgICBcIm5sODAyMTFfZGVsX3Bta1wiLFxuICAgIFwiYnJjbWZfc2V0X2tleV9tZ210XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rXCIsXG4gICAgXCJicmNtZl9ic3Nfcm9hbWluZ19kb25lXCIsXG4gICAgXCJicmNtZl9ic3NfY29ubmVjdF9kb25lXCIsXG4gICAgXCJicmNtZl9zZXR1cF93aXBoeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtaW5nIG9mZmxvYWQgKEZCVCAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcgLSBPS0MpIGFuZCBQTUsgb2ZmbG9hZCBhY3Jvc3MgdGhlIGNvcmUgbmw4MDIxMSBzdWJzeXN0ZW0gYW5kIHRoZSBicmNtZm1hYyBkcml2ZXIuIEl0IHVwZGF0ZXMgbmV0bGluayB2YWxpZGF0aW9uIGxvZ2ljIGluIG5sODAyMTFfc2V0X3Btay9ubDgwMjExX2RlbF9wbWssIGludHJvZHVjZXMgUlNOIFBNS0lEIElFIHBhcnNpbmcsIG1vZGlmaWVzIGNvbm5lY3QgYW5kIHJvYW0gY29tcGxldGlvbiBzdGF0ZSBoYW5kbGluZywgYW5kIHVwZGF0ZXMgV0FSTl9PTiBhc3NlcnRpb25zIGluIGNvbm5lY3Rpb24vUE1LIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZXNlIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChubDgwMjExKSBhbmQgdmlydHVhbGl6ZWQgVVNCIGRldmljZSBkcml2ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzozNi42NTkwMTc2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDQwNzg4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzozNi42NjE3Nzk4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MTQxMzExNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cXG5cXG5LZXkgb2JzZXJ2YXRpb25zIHJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxcbjMuIFRoZSBuZXcgSUUgcGFyc2luZyBmdW5jdGlvbiBgYnJjbWZfaGFzX3Bta2lkYCBvcGVyYXRlcyB3aXRoIGxlbmd0aCBhbmQgb2Zmc2V0IGJvdW5kcyBjaGVja3Mgb24gaW5jb21pbmcgSUUgYnl0ZSBhcnJheXM7IGFueSBvdXQtb2YtYm91bmRzIHJlYWRpbmcgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOGExOGQ2ODYwYjdkZTRiNWFkMTczYzZiMTAyYmIyODdmZmUwZTcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6MzY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA4NzJjNDg4MDZkMDkxLi41MTlkZTk2YjA0MmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5AQCAtMjExMiw5ICsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRzMzIgdmFsO1xuIFx0czMyIGVycjtcbitcdHMzMiBva2NfZW5hYmxlO1xuIFx0Y29uc3Qgc3RydWN0IGJyY21mX3RsdiAqcnNuX2llO1xuIFx0Y29uc3QgdTggKmllO1xuIFx0dTMyIGllX2xlbjtcbitcdGJvb2wgZndzdXBfcm9hbTtcbiBcdHUzMiBvZmZzZXQ7XG4gXHR1MTYgcnNuX2NhcDtcbiBcdHUzMiBtZnA7XG5AQCAtMjEyMiw2ICsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FO1xuIFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IGZhbHNlO1xuK1x0cHJvZmlsZS1cdTAwM2Vpc19va2MgPSBmYWxzZTtcbitcdGZ3c3VwX3JvYW0gPSBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZCVCkgfHxcbitcdFx0ICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7XG4gXG4gXHRpZiAoIXNtZS1cdTAwM2VjcnlwdG8ubl9ha21fc3VpdGVzKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yMTM4LDYgKzIxNDMsOCBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEO1xuIFx0XHRcdGlmIChzbWUtXHUwMDNld2FudF8xeClcbiBcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcbitcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuK1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOlxuIFx0XHRcdHZhbCA9IFdQQV9BVVRIX1BTSztcbkBAIC0yMTUzLDExICsyMTYwLDE1IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1VOU1BFQ0lGSUVEO1xuIFx0XHRcdGlmIChzbWUtXHUwMDNld2FudF8xeClcbiBcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcbitcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuK1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfODAyMVhfU0hBMjU2OlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XG4gXHRcdFx0aWYgKHNtZS1cdTAwM2V3YW50XzF4KVxuIFx0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xuK1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0FLTV9TVUlURV9QU0tfU0hBMjU2OlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xuQEAgLTIxNzAsMTAgKzIxODEsMTYgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX0ZUX1BTSzpcbiBcdFx0XHR2YWwgPSBXUEEyX0FVVEhfUFNLIHwgV1BBMl9BVVRIX0ZUO1xuIFx0XHRcdHByb2ZpbGUtXHUwMDNlaXNfZnQgPSB0cnVlO1xuK1x0XHRcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XG4gXHRcdFx0dmFsID0gV0ZBX0FVVEhfRFBQO1xuQEAgLTIyMDQsOCArMjIyMSwyMiBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFxuIFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpXG4gXHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIDFYIG9mZmxvYWRcXG5cIik7XG4rXG4rXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxuK1x0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkge1xuK1x0XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcIm9rY19lbmFibGVcIixcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm9rY19lbmFibGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJnZXQgb2tjX2VuYWJsZSBmYWlsZWQgKCVkKVxcblwiLCBlcnIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGJyY21mX2RiZyhJTkZPLCBcIm9rY19lbmFibGUgKCVkKVxcblwiLCBva2NfZW5hYmxlKTtcbitcdFx0XHRwcm9maWxlLVx1MDAzZWlzX29rYyA9IG9rY19lbmFibGU7XG4rXHRcdH1cbitcdH1cbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSlcbiBcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgU0FFIG9mZmxvYWRcXG5cIik7XG4rXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKVxuK1x0XHRicmNtZl9kYmcoSU5GTywgXCJ1c2luZyByb2FtaW5nIG9mZmxvYWRcXG5cIik7XG4gXG4gXHRpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSlcbiBcdFx0Z290byBza2lwX21mcF9jb25maWc7XG5AQCAtMjQ5NCwxMyArMjUyNSwxNCBAQCBicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0XHRpZiAoc21lLVx1MDAzZWNyeXB0by5wc2sgXHUwMDI2XHUwMDI2ICFpc19zYWVfYWttIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuLVx0XHRcdFx0ICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcbitcdFx0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4rXHRcdFx0XHRicmNtZl9kYmcoSU5GTywgXCJ1c2luZyBQU0sgb2ZmbG9hZFxcblwiKTtcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4rXHRcdFx0fSBlbHNlIGlmIChXQVJOX09OKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9XG4rXHRcdFx0XHRcdCAgIEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKSkge1xuIFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0XHR9XG4tXHRcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgUFNLIG9mZmxvYWRcXG5cIik7XG4tXHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSztcbiBcdFx0fVxuIFx0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4gXHRcdFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXG5AQCAtNTk1MywxNyArNTk4NSwyOSBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NldF9wbWsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNmZzgwMjExX3Bta19jb25mICpjb25mKVxuIHtcbiBcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuK1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbitcdGludCByZXQ7XG4gXG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwiZW50ZXJcXG5cIik7XG4gXG4tXHQvKiBleHBlY3QgdXNpbmcgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgMVggKi9cbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpZiAoV0FSTl9PTihpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpKVxuK1x0ZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuK1x0aWYgKFdBUk5fT04oaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19mdCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUuaXNfb2tjKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoY29uZi1cdTAwM2VwbWtfbGVuIFx1MDAzZSBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbitcdGlmIChpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUuaXNfb2tjKSB7XG4rXHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwib2tjX2luZm9fcG1rXCIsXG4rXHRcdFx0XHRcdCAgICAgICBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRicGh5X2VycihkcnZyLCBcIm9rY19pbmZvX3BtayBpb3ZhciBmYWlsZWQ6IHJldD0lZFxcblwiLFxuK1x0XHRcdFx0IHJldCk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gYnJjbWZfc2V0X3BtayhpZnAsIGNvbmYtXHUwMDNlcG1rLCBjb25mLVx1MDAzZXBta19sZW4pO1xuIH1cbiBcbkBAIC02NDIyLDYgKzY0NjYsNDcgQEAgc3RhdGljIHMzMiBicmNtZl9nZXRfYXNzb2NfaWVzKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBicmNtZl9oYXNfcG1raWQoY29uc3QgdTggKnBhcnNlLCB1MzIgbGVuKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTtcbitcdGNvbnN0IHU4ICppZTtcbitcdHUzMiBpZV9sZW47XG4rXHR1MzIgb2Zmc2V0O1xuK1x0dTE2IGNvdW50O1xuK1xuK1x0aWYgKCFwYXJzZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cyhwYXJzZSwgbGVuLCBXTEFOX0VJRF9SU04pO1xuK1x0aWYgKCFyc25faWUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGllID0gKGNvbnN0IHU4ICopcnNuX2llO1xuK1x0aWVfbGVuID0gcnNuX2llLVx1MDAzZWxlbiArIFRMVl9IRFJfTEVOO1xuK1xuK1x0b2Zmc2V0ID0gVExWX0hEUl9MRU4gKyBXUEFfSUVfVkVSU0lPTl9MRU4gKyBXUEFfSUVfTUlOX09VSV9MRU47XG4rXHRpZiAob2Zmc2V0ICsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiBcdTAwM2U9IGllX2xlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y291bnQgPSBpZVtvZmZzZXRdICsgKGllW29mZnNldCArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdG9mZnNldCArPSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47XG4rXHRpZiAob2Zmc2V0ICsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiBcdTAwM2U9IGllX2xlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y291bnQgPSBpZVtvZmZzZXRdICsgKGllW29mZnNldCArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdG9mZnNldCArPSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47XG4rXHRpZiAob2Zmc2V0ICsgUlNOX0NBUF9MRU4gXHUwMDNlPSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG9mZnNldCArPSBSU05fQ0FQX0xFTjtcbitcdGlmIChvZmZzZXQgKyBSU05fUE1LSURfQ09VTlRfTEVOIFx1MDAzZSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNvdW50ID0gaWVbb2Zmc2V0XSArIChpZVtvZmZzZXQgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXG4rXHRyZXR1cm4gY291bnQgXHUwMDNlIDA7XG4rfVxuK1xuIHN0YXRpYyBzMzJcbiBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbkBAIC02NDM2LDYgKzY1MjEsNyBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRzdHJ1Y3QgYnJjbWZfYnNzX2luZm9fbGUgKmJpO1xuIFx0c3RydWN0IGJyY211X2NoYW4gY2g7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcm9hbV9pbmZvIHJvYW1faW5mbyA9IHt9O1xuK1x0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHR1MzIgZnJlcTtcbiBcdHMzMiBlcnIgPSAwO1xuIFx0dTggKmJ1ZjtcbkBAIC02NDgyLDE0ICs2NTY4LDE4IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHJvYW1faW5mby5yZXNwX2llID0gY29ubl9pbmZvLVx1MDAzZXJlc3BfaWU7XG4gXHRyb2FtX2luZm8ucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVzcF9pZV9sZW47XG4gXG4rXHRpZiAoKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcbitcdCAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoYnJjbWZfaGFzX3Bta2lkKHJvYW1faW5mby5yZXFfaWUsIHJvYW1faW5mby5yZXFfaWVfbGVuKSB8fFxuK1x0ICAgICBwcm9maWxlLVx1MDAzZWlzX2Z0IHx8IHByb2ZpbGUtXHUwMDNlaXNfb2tjKSlcbitcdFx0YXV0aG9yaXplZCA9IHRydWU7XG4rXG4gXHRjZmc4MDIxMV9yb2FtZWQobmRldiwgXHUwMDI2cm9hbV9pbmZvLCBHRlBfS0VSTkVMKTtcbitcdGlmIChhdXRob3JpemVkKVxuK1x0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbitcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuIFx0YnJjbWZfZGJnKENPTk4sIFwiUmVwb3J0IHJvYW1pbmcgcmVzdWx0XFxuXCIpO1xuIFxuLVx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggXHUwMDI2XHUwMDI2IHByb2ZpbGUtXHUwMDNlaXNfZnQpIHtcbi1cdFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXHUwMDNlYnNzaWQsIE5VTEwsIDAsIEdGUF9LRVJORUwpO1xuLVx0XHRicmNtZl9kYmcoQ09OTiwgXCJSZXBvcnQgcG9ydCBhdXRob3JpemVkXFxuXCIpO1xuLVx0fVxuLVxuIFx0c2V0X2JpdChCUkNNRl9WSUZfU1RBVFVTX0NPTk5FQ1RFRCwgXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2VzbWVfc3RhdGUpO1xuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkV4aXRcXG5cIik7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTY1MDQsNiArNjU5NCw3IEBAIGJyY21mX2Jzc19jb25uZWN0X2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlO1xuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcbiBcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zO1xuK1x0Ym9vbCBhdXRob3JpemVkO1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkVudGVyXFxuXCIpO1xuIFxuQEAgLTY1MjgsNyArNjYxOSwxNSBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVxX2llX2xlbjtcbiBcdFx0Y29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0XHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llX2xlbjtcbitcdFx0YXV0aG9yaXplZCA9IGNvbXBsZXRlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG4rXHRcdFx0ICAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIGJyY21mX2hhc19wbWtpZChjb25uX3BhcmFtcy5yZXFfaWUsXG4rXHRcdFx0XHRcdCAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7XG4gXHRcdGNmZzgwMjExX2Nvbm5lY3RfZG9uZShuZGV2LCBcdTAwMjZjb25uX3BhcmFtcywgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmIChhdXRob3JpemVkKVxuK1x0XHRcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVx1MDAzZWJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiBcdFx0YnJjbWZfZGJnKENPTk4sIFwiUmVwb3J0IGNvbm5lY3QgcmVzdWx0IC0gY29ubmVjdGlvbiAlc1xcblwiLFxuIFx0XHRcdCAgY29tcGxldGVkID8gXCJzdWNjZWVkZWRcIiA6IFwiZmFpbGVkXCIpO1xuIFx0fVxuQEAgLTc3MzEsNiArNzgzMCwxMCBAQCBzdGF0aWMgaW50IGJyY21mX3NldHVwX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIFx0fVxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFX0VYVCkpXG4gXHRcdHdpcGh5LVx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9TQUU7XG4rXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8XG4rXHQgICAgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9PS0MpKVxuK1x0XHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksXG4rXHRcdFx0XHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKTtcbiBcdHdpcGh5LVx1MDAzZW1nbXRfc3R5cGVzID0gYnJjbWZfdHhyeF9zdHlwZXM7XG4gXHR3aXBoeS1cdTAwM2VtYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb24gPSA1MDAwO1xuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE5PKSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbmluZGV4IDYzZTUzNDUyM2Y1MTguLjFhYTk5MzkwYTk1MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbkBAIC0xMjcsNyArMTI3LDggQEAgZW51bSBicmNtZl9wcm9maWxlX2Z3c3VwIHtcbiBcdEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSxcbiBcdEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLLFxuIFx0QlJDTUZfUFJPRklMRV9GV1NVUF8xWCxcbi1cdEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFXG4rXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSxcbitcdEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTVxuIH07XG4gXG4gLyoqXG5AQCAtMTY0LDYgKzE2NSw3IEBAIGVudW0gYnJjbWZfbWdtdF90eF9zdGF0dXMge1xuICAqIEBic3NpZDogYnNzaWQgb2Ygam9pbmVkL2pvaW5pbmcgaWJzcy5cbiAgKiBAc2VjOiBzZWN1cml0eSBpbmZvcm1hdGlvbi5cbiAgKiBAa2V5OiBrZXkgaW5mb3JtYXRpb25cbisgKiBAaXNfb2tjOiBPS0MgaXMgdXNlZCBmb3IgY3VycmVudCBjb25uZWN0aW9uLlxuICAqL1xuIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbkBAIC0xNzIsNiArMTc0LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUge1xuIFx0ZW51bSBicmNtZl9wcm9maWxlX2Z3c3VwIHVzZV9md3N1cDtcbiBcdHUxNiB1c2VfZndhdXRoO1xuIFx0Ym9vbCBpc19mdDtcbitcdGJvb2wgaXNfb2tjO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcbmluZGV4IDQ4ODM2NGVmOGZmMmEuLmNjMTllNWU3ZWJmNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXG5AQCAtNDUsNiArNDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7XG4gXHR7IEJSQ01GX0ZFQVRfU0FFLCBcInNhZSBcIiB9LFxuIFx0eyBCUkNNRl9GRUFUX0ZXQVVUSCwgXCJpZGF1dGhcIiB9LFxuIFx0eyBCUkNNRl9GRUFUX1NBRV9FWFQsIFwic2FlX2V4dFwiIH0sXG4rXHR7IEJSQ01GX0ZFQVRfRkJULCBcImZidCBcIiB9LFxuK1x0eyBCUkNNRl9GRUFUX09LQywgXCJva2NcIiB9LFxuIH07XG4gXG4gI2lmZGVmIERFQlVHXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmhcbmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG5AQCAtNTksNyArNTksOSBAQFxuIFx0QlJDTUZfRkVBVF9ERUYoU0NBTl9WMikgXFxcbiBcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YyKSBcXFxuIFx0QlJDTUZfRkVBVF9ERUYoUE1LSURfVjMpIFxcXG4tXHRCUkNNRl9GRUFUX0RFRihTQUVfRVhUKVxuK1x0QlJDTUZfRkVBVF9ERUYoU0FFX0VYVCkgXFxcbitcdEJSQ01GX0ZFQVRfREVGKEZCVCkgXFxcbitcdEJSQ01GX0ZFQVRfREVGKE9LQylcbiBcbiAvKlxuICAqIFF1aXJrczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uOTIwZDVlMmQ5OTY2MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC03MTEwLDYgKzcxMTAsMTAgQEAgZW51bSBubDgwMjExX2ZlYXR1cmVfZmxhZ3Mge1xuICAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQOiBEcml2ZXIgc3VwcG9ydHMgcHJvYmluZyB0aGUgYXNzb2NpYXRlZCBBUFxuICAqXHRpbiBTVEEgbW9kZSB1c2luZyBATkw4MDIxMV9DTURfUFJPQkVfUEVFUi5cbiAgKlxuKyAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEOiBEcml2ZXIgc3VwcG9ydHMgZmFzdCByb2FtaW5nXG4rICpcdG9mZmxvYWQgaW4gc3RhdGlvbiBtb2RlLCBpbmNsdWRpbmcgRmFzdCBUcmFuc2l0aW9uIG9yIE9wcG9ydHVuaXN0aWNcbisgKlx0S2V5IENhY2hpbmcuXG4rICpcbiAgKiBATlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBudW1iZXIgb2YgZXh0ZW5kZWQgZmVhdHVyZXMuXG4gICogQE1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUzogaGlnaGVzdCBleHRlbmRlZCBmZWF0dXJlIGluZGV4LlxuICAqL1xuQEAgLTcxOTIsNiArNzE5Niw3IEBAIGVudW0gbmw4MDIxMV9leHRfZmVhdHVyZV9pbmRleCB7XG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1JPQ19BRERSX0ZJTFRFUixcbiBcdE5MODAyMTFfRVhUX0ZFQVRVUkVfU0VUX0tFWV9MVEZfU0VFRCxcbiBcdE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPQkVfQVAsXG4rXHROTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FELFxuIFxuIFx0LyogYWRkIG5ldyBmZWF0dXJlcyBiZWZvcmUgdGhlIGRlZmluaXRpb24gYmVsb3cgKi9cbiBcdE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUyxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggNDRmMmJhZDA4NjcwNS4uZTQ4NTAxMjlhNTgyYiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xODQzNCw2ICsxODQzNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4rXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIFx0c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHBta19jb25mID0ge307XG5AQCAtMTg0NDIsNyArMTg0NDMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbitcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4rXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbiBcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG5AQCAtMTg0NzIsNiArMTg0NzUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbitcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4gXHRjb25zdCB1OCAqYWE7XG5AQCAtMTg0ODAsNyArMTg0ODQsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbitcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4rXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbiBcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzozNi42NjE3ODE1MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjQ4Mzc2MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIEJyb2FkY29tIFdpRmkgRHJpdmVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcyBhbmQgc2VlIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGNvdWxkIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIG1lbW9yeSBpc3N1ZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgY2hhbmdlcyB0byByb2FtaW5nIGFuZCBrZXkgbWFuYWdlbWVudC5cblxuRmlyc3QsIEknbSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYG9rY19lbmFibGVgIHZhcmlhYmxlLCBldmVuIGFzIGEgc3RhY2stYWxsb2NhdGVkIGxvY2FsLCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBmbG93IHNlZW1zIHRvIGludm9sdmUgcmV0cmlldmluZyBhbiBpbnRlZ2VyIHZhbHVlIGZvciBgb2tjX2VuYWJsZWAgZnJvbSBzb21ld2hlcmUgdGhyb3VnaCBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YC4gVGhpcyBpbnRlZ2VyIHRoZW4gZGlyZWN0bHkgc2V0cyBgcHJvZmlsZS1cdTAwM2Vpc19va2NgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaW50ZWdlciBjb21lcyBmcm9tIGFuZCBob3cgaXQncyBoYW5kbGVkLiBXZSBjYW4gdXNlIGBicGZ0cmFjZWAgb3Igc2ltaWxhciB0byBpbnN0cnVtZW50IHRoaXMgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGEgbWVtYmVyIG9mIHRoZSBwcm9maWxlIHN0cnVjdCBiYXNlZCBvbiBhIGNvbmZpZ3VyYXRpb24gaW50ZWdlciBhZGRzIGEgcG90ZW50aWFsIGZvciBtaXNjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGtleSBtYW5hZ2VtZW50LlxuXG5UaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCB3aGljaCBtb2RpZnkgaG93IGBwcm9maWxlLVx1MDAzZXVzZV9md3N1cGAgaXMgaGFuZGxlZCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGNoZWNrcyBvbiBib3RoIGBpc19mdGAgYW5kIGBpc19va2NgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYC4gVGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYCBiYXNlZCBvbiBgaXNfb2tjYCBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0OyB3ZSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaGFwcGVucyB3aGVuIHRoaXMgXCJva2NfaW5mb19wbWtcIiBpb3ZhciBpcyBzZXQuXG5cblRoZSBuZXcgYGJyY21mX2hhc19wbWtpZGAgZnVuY3Rpb24sIHBhcnNpbmcgVExWcyBmcm9tIHRoZSBSU04gSUUsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUTFYgcGFyc2luZyBpcyBub3RvcmlvdXNseSBwcm9uZSB0byBvZmYtYnktb25lIGVycm9ycyBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9ucyB2ZXJ5IGNhcmVmdWxseS4gVGhpcyBpcyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBLTVNBTiBjYW4gc2hpbmUuIFdlJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBjYXJlZnVsbHkgdXNpbmcgYGJwZnRyYWNlYC5cblxuVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIHBhcnRpY3VsYXJseSB0aGUgYXV0aG9yaXphdGlvbiBjaGVja3MgYW5kIGNhbGxzIHRvIGBjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWRgLCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgY2FuIGJlIHN1c2NlcHRpYmxlIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvcnJlY3Qgc3RhdGUgaGFuZGxpbmcuXG5cbkZpbmFsbHksIHRoZSBlbmFibGluZyBvZiBgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRGAgaW4gYGJyY21mX3NldHVwX3dpcGh5YCBhbmQgdGhlIHN1cHBvcnRpbmcgY2hhbmdlcyBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgaW4gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgIHN1Z2dlc3QgdGhhdCBmYXN0IHJvYW1pbmcgaXMgYmVpbmcgaW50ZWdyYXRlZC4gVGhpcyBhZGRzIGNvbXBsZXhpdHkgYW5kLCBwb3RlbnRpYWxseSwgbW9yZSBhdHRhY2sgc3VyZmFjZS4gQW55IGNvZGUgaW52b2x2aW5nIG9mZmxvYWQgYW5kIHNldHRpbmcgUE1LcyBpcyBhIHJlZCBmbGFnLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjayBoZXJlLlxuXG5JbiBzdW1tYXJ5LCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbW9kaWZ5IGV4aXN0aW5nIGtleSBtYW5hZ2VtZW50IGFuZCByb2FtaW5nIGxvZ2ljLCBhbmQgaW5jbHVkZSBUTFYgcGFyc2luZy4gVGhlc2UgYXJlIGFsbCBoaWdoLXJpc2sgYXJlYXMgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEknbGwgbmVlZCB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlc2Uga2V5IGZ1bmN0aW9ucyBhbmQgbG9vayBmb3IgYW55IGNsdWVzLiBMZXQncyBmaXJlIHVwIHRoZSB0b29scywgZG91YmxlLWNoZWNrIGFsbCB0aG9zZSBjYWxscywgYW5kIHNlZSBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZCwgd2hpY2ggSSBzdHJvbmdseSBzdXNwZWN0IGl0IHdpbGwgYmUsIGdpdmVuIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NDQuMzEwMTYwNzkyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAxNjIxMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2ZpbF9ic3NjZmdfaW50X2dldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMTA4PWJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMTMzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIxMzQ6XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KG5ldGRldl9wcml2KG5kZXYpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIxMzUtXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ3cGFfYXV0aFxcXCIsIFxcdTAwMjZ2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjIyNi1cXHQgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIyMjc6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXFxcIm9rY19lbmFibGVcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIyMjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZva2NfZW5hYmxlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTI3Njk9YnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjc4My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzoyNzg0OlxcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsIFxcXCJ3c2VjXFxcIiwgXFx1MDAyNndzZWMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI3ODUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjg0Mj1icmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yOTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI5NDY6XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXFxcIndzZWNcXFwiLCBcXHUwMDI2d3NlYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjk0Ny1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yOTY0PWJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI5ODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Mjk4NjpcXHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcXFwid3NlY1xcXCIsIFxcdTAwMjZ3c2VjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yOTg3LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTMwMzg9YnJjbWZfY2ZnODAyMTFfcmVjb25maWd1cmVfd2VwKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMzA1OS1cXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MzA2MDpcXHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcXFwid3NlY1xcXCIsIFxcdTAwMjZ3c2VjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0zMDYxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg9MTYxPXN0YXRpYyBpbmxpbmVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjE2MjpzMzIgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xNjMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaD0xNzI9czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X3F1ZXJ5KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oLTE3Ni1cXHQqZGF0YV9sZSA9IGNwdV90b19sZTMyKCpkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjE3NzpcXHRyZXR1cm4gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgbmFtZSwgZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xNzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzo0Ni40MTE3ODcwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYwMzcyMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBmd2lsLmhgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmhgIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTYxLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBtaWdodCBiZSBkZWZpbmVkIG9yIGRvY3VtZW50ZWQgdGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgbGF5ZXIg4oCTIGhlbmNlIHRoZSBmaWxlIG5hbWUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIEknbSBob3BpbmcgSSBjYW4gZ2xlYW4gc29tZSBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBCcm9hZGNvbSBmaXJtd2FyZSBhdCB0aGF0IHBvaW50IGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjQ4LjI3MjE2MjE2MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTU6XFx0e1xcbiAxNTY6XFx0XFx0X19sZTMyIGRhdGFfbGUgPSBjcHVfdG9fbGUzMihkYXRhKTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0cmV0dXJuIGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQoaWZwLCBuYW1lLCBcXHUwMDI2ZGF0YV9sZSxcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdFxcdCBzaXplb2YoZGF0YV9sZSkpO1xcbiAxNjA6XFx0fVxcbiAxNjE6XFx0c3RhdGljIGlubGluZVxcbiAxNjI6XFx0czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxcbiAxNjM6XFx0e1xcbiAxNjQ6XFx0XFx0czMyIGVycjtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX2dldChpZnAsIG5hbWUsIGRhdGEsIHNpemVvZigqZGF0YSkpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciA9PSAwKVxcbiAxNjg6XFx0XFx0XFx0KmRhdGEgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKWRhdGEpO1xcbiAxNjk6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTcwOlxcdH1cXG4gMTcxOlxcdHN0YXRpYyBpbmxpbmVcXG4gMTcyOlxcdHMzMiBicmNtZl9maWxfYnNzY2ZnX2ludF9xdWVyeShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxcbiAxNzM6XFx0e1xcbiAxNzQ6XFx0XFx0X19sZTMyICpkYXRhX2xlID0gKF9fbGUzMiAqKWRhdGE7XFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCpkYXRhX2xlID0gY3B1X3RvX2xlMzIoKmRhdGEpO1xcbiAxNzc6XFx0XFx0cmV0dXJuIGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsIG5hbWUsIGRhdGEpO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzMzIgYnJjbWZfZmlsX3h0bHZfZGF0YV9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBpZCxcXG4gMTgxOlxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCB1MzIgbGVuKTtcXG4gMTgyOlxcdHMzMiBicmNtZl9maWxfeHRsdl9kYXRhX2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTE2IGlkLFxcbiAxODM6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHUzMiBsZW4pO1xcbiAxODQ6XFx0c3RhdGljIGlubGluZVxcbiAxODU6XFx0czMyIGJyY21mX2ZpbF94dGx2X2ludF9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBpZCxcXG4gMTg2OlxcdFxcdFxcdFxcdCAgIHUzMiBkYXRhKVxcbiAxODc6XFx0e1xcbiAxODg6XFx0XFx0X19sZTMyIGRhdGFfbGUgPSBjcHVfdG9fbGUzMihkYXRhKTtcXG4gMTg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzo0OC4yNzIyNzk1NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcyNzI2Mjc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2V5IE1hbmFnZW1lbnQgYW5kIFBNS0lEIEhhbmRsaW5nIGluIHRoZSBCcm9hZGNvbSBXaUZpIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEZpcnN0LCBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnJjbWZfc2V0X2tleV9tZ210YC4gVGhlIGNvZGUgY2hlY2tzIGlmIHdlJ3JlIHVzaW5nIGZpcm13YXJlLXN1cHBvcnRlZCBrZXkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYYCBvciBgQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNYC4gSWYgc28sIGl0IHRyaWVzIHRvIHJlYWQgYG9rY19lbmFibGVgIHVzaW5nIGBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXRgLiBBIG5vbi16ZXJvIGBlcnJgIGZyb20gdGhhdCBmdW5jdGlvbiBtZWFucyB0aGUgcmVhZCBmYWlsZWQsIGFuZCBgb2tjX2VuYWJsZWAgaXNuJ3QgdG91Y2hlZC4gSWYgYGVycmAgaXMgemVybywgdGhlbiBpdCBncmFicyB0aGUgdmFsdWUgdXNpbmcgYGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9nZXRgLCBhbmQgdGhlbiBjb252ZXJ0cyBpdCB0byB0aGUgY29ycmVjdCBieXRlIG9yZGVyLlxuXG5OZXh0LCBJJ20gZXhhbWluaW5nIGBicmNtZl9oYXNfcG1raWRgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGNyaXRpY2FsIGZvciBkZXRlcm1pbmluZyBpZiBhIFBNS0lEIGlzIHByZXNlbnQgaW4gYW4gUlNOIElFLiBUaGUgaW5wdXQgYHBhcnNlYCwgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgYHJzbl9pZWAgYnVmZmVyLCBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIGByb2FtX2luZm8ucmVxX2llYCBvciBgY29ubl9wYXJhbXMucmVxX2llYC5cblxuSSdtIGNhcmVmdWxseSB0cmFjaW5nIHRoZSBsb2dpYy4gRmlyc3QsIGl0IGNhbGxzIGBicmNtZl9wYXJzZV90bHZzYCB0byBmaW5kIHRoZSBSU04gSUUuIElmIHRoYXQgZmFpbHMsIHdlIHJldHVybiBlYXJseS4gVGhlbiwgaXQgcHJvY2VlZHMgd2l0aCB2YXJpb3VzIG9mZnNldCBjYWxjdWxhdGlvbnMgYW5kIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBSU04gSUUuIFNldmVyYWwgYm91bmRzIGNoZWNrcyBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIHRoZSB1c2Ugb2YgZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvIChgXHUwMDNlPWApIHZlcnN1cyBncmVhdGVyLXRoYW4gKGBcdTAwM2VgKSBpcyBhbiBhcmVhIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLCBhcyB0aGF0J3MgYSBjb21tb24gc291cmNlIG9mIG9mZi1ieS1vbmUgZXJyb3JzLiBJdCdzIHBhcnNpbmcgdGhlIFJTTiBJRSB0byBnZXQgdmFyaW91cyBjb3VudHMgYW5kIG9mZnNldHMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgcGFpcndpc2UgY2lwaGVycyBhbmQgZ3JvdXAgY2lwaGVycy4gRmluYWxseSwgaXQgY2hlY2tzIHRoZSBQTUtJRCBjb3VudC4gSXQncyByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgYGNvdW50YCBvZiBQTUtJRHMgaXMgZ3JlYXRlciB0aGFuIHplcm8sIGluZGljYXRpbmcgYSBQTUtJRCBpcyBwcmVzZW50LiBUaGUgbG9naWMgZmxvdyBpcyB3ZWxsLWRlZmluZWQsIGFuZCB0aGUgYnVmZmVyIG9mZnNldC9zaXplIGNhbGN1bGF0aW9uIGxvb2tzIHJlYXNvbmFibGUgc28gZmFyLCBidXQgSSB3aWxsIHdhbnQgdG8gdmVyaWZ5IHRob3NlIGNhbGN1bGF0aW9ucyBteXNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzExLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NTIuOTk5NTQ0MzA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE0OTYyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3BhcnNlX3RsdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0MjA6YnJjbWZfcGFyc2VfdGx2cyhjb25zdCB2b2lkICpidWYsIGludCBidWZsZW4sIHVpbnQga2V5KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQyMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00Njc9YnJjbWZfZmluZF93cGFpZShjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDcxOlxcdHdoaWxlICgoaWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDcyLVxcdFxcdGlmIChicmNtZl90bHZfaGFzX2llKChjb25zdCB1OCAqKWllLCBcXHUwMDI2cGFyc2UsIFxcdTAwMjZsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00ODA9YnJjbWZfZmluZF93cHNpZShjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00ODMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDg0OlxcdHdoaWxlICgoaWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDg1LVxcdFxcdGlmIChicmNtZl90bHZfaGFzX2llKCh1OCAqKWllLCBcXHUwMDI2cGFyc2UsIFxcdTAwMjZsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMTA4PWJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMjQ1LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIyNDY6XFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygoY29uc3QgdTggKilzbWUtXFx1MDAzZWllLCBzbWUtXFx1MDAzZWllX2xlbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMjQ3LVxcdFxcdFxcdFxcdCAgV0xBTl9FSURfUlNOKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTI0MTI9YnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI0NTYtXFx0XFx0XFx0LyogZmluZCB0aGUgUlNOX0lFICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjQ1NzpcXHRcXHRcXHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKChjb25zdCB1OCAqKXNtZS1cXHUwMDNlaWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjQ1OC1cXHRcXHRcXHRcXHRcXHRcXHQgIHNtZS1cXHUwMDNlaWVfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTEzNT1icmNtZl9wYXJzZV9jb25maWd1cmVfc2VjdXJpdHkoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MTQzLVxcdC8qIGZpbmQgdGhlIFJTTl9JRSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjUxNDQ6XFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygodTggKilzZXR0aW5ncy1cXHUwMDNlYmVhY29uLnRhaWwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTE0NS1cXHRcXHRcXHRcXHQgIHNldHRpbmdzLVxcdTAwM2ViZWFjb24udGFpbF9sZW4sIFdMQU5fRUlEX1JTTik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTc3PWJyY21mX2NmZzgwMjExX3N0YXJ0X2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTIxMy1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjUyMTQ6XFx0XFx0Y291bnRyeV9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKHU4ICopc2V0dGluZ3MtXFx1MDAzZWJlYWNvbi50YWlsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUyMTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2V0dGluZ3MtXFx1MDAzZWJlYWNvbi50YWlsX2xlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUyMjMtXFx0XFx0aWVfb2Zmc2V0ID0gRE9UMTFfTUdNVF9IRFJfTEVOICsgRE9UMTFfQkNOX1BSQl9GSVhFRF9MRU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTIyNDpcXHRcXHRzc2lkX2llID0gYnJjbWZfcGFyc2VfdGx2cyhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MjI1LVxcdFxcdFxcdFxcdCh1OCAqKVxcdTAwMjZzZXR0aW5ncy1cXHUwMDNlYmVhY29uLmhlYWRbaWVfb2Zmc2V0XSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY0Njk9c3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY0NzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjQ4MDpcXHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ4MS1cXHRpZiAoIXJzbl9pZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NTUuNjE0NTExNjU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDg0MjA5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBicmNtZl9wYXJzZV90bHZzYCBpbiBgY2ZnODAyMTEuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBicmNtZl9wYXJzZV90bHZzYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQxOSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNgLiBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgSSdtIGludGVyZXN0ZWQgaW4gYW5hbHl6aW5nIHJlbGF0ZWQgdG8gaG93IHRoZSBUTFZzIGFyZSBiZWluZyBwYXJzZWQuIEl0IGNvdWxkIGJlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBjZXJ0YWluIFRMViB0eXBlcywgb3IgcGVyaGFwcyBJJ20gbG9va2luZyBhdCBhIHNwZWNpZmljIGJ1ZyByZXBvcnQgYW5kIHRoZSByZWxldmFudCBjb2RlLiBXaGF0ZXZlciB0aGUgcmVhc29uLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZXNlIFRMVnMgYXQgdGhhdCBwb2ludCBpbiBpdHMgZXhlY3V0aW9uIGZsb3cuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0MywiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjU4LjAyMjkzNTA3MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE5LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpcXG4gNDIwOlxcdGJyY21mX3BhcnNlX3RsdnMoY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCB1aW50IGtleSlcXG4gNDIxOlxcdHtcXG4gNDIyOlxcdFxcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKmVsdCA9IGJ1ZjtcXG4gNDIzOlxcdFxcdGludCB0b3RsZW4gPSBidWZsZW47XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdC8qIGZpbmQgdGFnZ2VkIHBhcmFtZXRlciAqL1xcbiA0MjY6XFx0XFx0d2hpbGUgKHRvdGxlbiBcXHUwMDNlPSBUTFZfSERSX0xFTikge1xcbiA0Mjc6XFx0XFx0XFx0aW50IGxlbiA9IGVsdC1cXHUwMDNlbGVuO1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRcXHQvKiB2YWxpZGF0ZSByZW1haW5pbmcgdG90bGVuICovXFxuIDQzMDpcXHRcXHRcXHRpZiAoKGVsdC1cXHUwMDNlaWQgPT0ga2V5KSBcXHUwMDI2XFx1MDAyNiAodG90bGVuIFxcdTAwM2U9IChsZW4gKyBUTFZfSERSX0xFTikpKVxcbiA0MzE6XFx0XFx0XFx0XFx0cmV0dXJuIGVsdDtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0XFx0ZWx0ID0gKHN0cnVjdCBicmNtZl90bHYgKikoKHU4ICopZWx0ICsgKGxlbiArIFRMVl9IRFJfTEVOKSk7XFxuIDQzNDpcXHRcXHRcXHR0b3RsZW4gLT0gKGxlbiArIFRMVl9IRFJfTEVOKTtcXG4gNDM1OlxcdFxcdH1cXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQzODpcXHR9XFxuIDQzOTpcXHRcXG4gNDQwOlxcdC8qIElzIGFueSBvZiB0aGUgdGx2cyB0aGUgZXhwZWN0ZWQgZW50cnk/IElmXFxuIDQ0MTpcXHQgKiBub3QgdXBkYXRlIHRoZSB0bHZzIGJ1ZmZlciBwb2ludGVyL2xlbmd0aC5cXG4gNDQyOlxcdCAqL1xcbiA0NDM6XFx0c3RhdGljIGJvb2xcXG4gNDQ0OlxcdGJyY21mX3Rsdl9oYXNfaWUoY29uc3QgdTggKmllLCBjb25zdCB1OCAqKnRsdnMsIHUzMiAqdGx2c19sZW4sXFxuIDQ0NTpcXHRcXHRcXHQgY29uc3QgdTggKm91aSwgdTMyIG91aV9sZW4sIHU4IHR5cGUpXFxuIDQ0NjpcXHR7XFxuIDQ0NzpcXHRcXHQvKiBJZiB0aGUgY29udGVudHMgbWF0Y2ggdGhlIE9VSSBhbmQgdGhlIHR5cGUgKi9cXG4gNDQ4OlxcdFxcdGlmIChpZVtUTFZfTEVOX09GRl0gXFx1MDAzZT0gb3VpX2xlbiArIDEgXFx1MDAyNlxcdTAwMjZcXG4gNDQ5OlxcdFxcdCAgICAhbWVtY21wKFxcdTAwMjZpZVtUTFZfQk9EWV9PRkZdLCBvdWksIG91aV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxuIDQ1MDpcXHRcXHQgICAgdHlwZSA9PSBpZVtUTFZfQk9EWV9PRkYgKyBvdWlfbGVuXSkge1xcbiA0NTE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQ1MjpcXHRcXHR9XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdGlmICh0bHZzID09IE5VTEwpXFxuIDQ1NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ1NjpcXHRcXHQvKiBwb2ludCB0byB0aGUgbmV4dCBpZSAqL1xcbiA0NTc6XFx0XFx0aWUgKz0gaWVbVExWX0xFTl9PRkZdICsgVExWX0hEUl9MRU47XFxuIDQ1ODpcXHRcXHQvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyICovXFxuIDQ1OTpcXHRcXHQqdGx2c19sZW4gLT0gKGludCkoaWUgLSAqdGx2cyk7XFxuIDQ2MDpcXHRcXHQvKiB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKi9cXG4gNDYxOlxcdFxcdCp0bHZzID0gaWU7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NTguMDIzNTczMzAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNjQ5ODk2MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBDb21wbGV0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb25uZWN0aW9uIGNvbXBsZXRpb24gbG9naWMuIEknbSBmb2N1c2luZyBvbiBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAgYW5kIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYC4gTG9va2luZyBhdCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIEkgc2VlIGl0J3Mgc2V0dGluZyB1cCB0aGUgYGNvbm5fcGFyYW1zYCBzdHJ1Y3R1cmU6IGByZXFfaWVfbGVuYCwgYHJlc3BfaWVgLCBhbmQgYHJlc3BfaWVfbGVuYCBhcmUgcG9wdWxhdGVkIGZyb20gYGNvbm5faW5mb2AuICBUaGVuLCB0aGVyZSdzIGEgY3J1Y2lhbCBjaGVjayBmb3IgYXV0aG9yaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgYXV0aG9yaXplZGAgc2VlbXMgdG8gaGluZ2Ugb24gYSBmZXcgY29uZGl0aW9uczogdGhlIGNvbm5lY3Rpb24gbXVzdCBiZSAqY29tcGxldGVkKiwgYW5kIHRoZSBwcm9maWxlIG5lZWRzIHRvIHVzZSBlaXRoZXIgMVggRlcgc3VwcG9ydCBvciByb2FtaW5nIEZXIHN1cHBvcnQuICBDcnVjaWFsbHksIGl0IHRoZW4gdXNlcyBgYnJjbWZfaGFzX3Bta2lkYCBvbiB0aGUgYGNvbm5fcGFyYW1zLnJlcV9pZWAuICBJZiBhbGwgdGhvc2UgY29uZGl0aW9ucyBhcmUgbWV0LCB0aGVuIGBjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWRgIGlzIGNhbGxlZCBhZnRlciBgY2ZnODAyMTFfY29ubmVjdF9kb25lYC5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IGBjb25uX3BhcmFtc2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgY29ubl9pbmZvYCBpcyBjb21pbmcgZnJvbSBhbmQgaG93IGl0cyBjb250ZW50cyBhcmUgcG9wdWxhdGVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgd2lsbCByZXZlYWwgaG93IGByZXFfaWVgLCBgcmVzcF9pZWAgYW5kIG90aGVyIGFzc29jaWF0ZWQgcGFyYW1ldGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NjQsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozODowOS42NzM0NzI3ODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY1OTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBjb25zdCBzdHJ1Y3QgYnJjbWZfZXZlbnRfbXNnICplLFxcbjY1OTE6XFx0XFx0XFx0ICAgICAgIGJvb2wgY29tcGxldGVkKVxcbjY1OTI6XFx0e1xcbjY1OTM6XFx0XFx0c3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG42NTk0OlxcdFxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2Vwcm9maWxlO1xcbjY1OTU6XFx0XFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcXG42NTk2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zO1xcbjY1OTc6XFx0XFx0Ym9vbCBhdXRob3JpemVkO1xcbjY1OTg6XFx0XFxuNjU5OTpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuNjYwMDpcXHRcXG42NjAxOlxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNUSU5HLFxcbjY2MDI6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpZnAtXFx1MDAzZXZpZi1cXHUwMDNlc21lX3N0YXRlKSkge1xcbjY2MDM6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZjb25uX3BhcmFtcywgMCwgc2l6ZW9mKGNvbm5fcGFyYW1zKSk7XFxuNjYwNDpcXHRcXHRcXHRpZiAoY29tcGxldGVkKSB7XFxuNjYwNTpcXHRcXHRcXHRcXHRicmNtZl9nZXRfYXNzb2NfaWVzKGNmZywgaWZwKTtcXG42NjA2OlxcdFxcdFxcdFxcdGJyY21mX3VwZGF0ZV9ic3NfaW5mbyhjZmcsIGlmcCk7XFxuNjYwNzpcXHRcXHRcXHRcXHRzZXRfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQ09OTkVDVEVELFxcbjY2MDg6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpO1xcbjY2MDk6XFx0XFx0XFx0XFx0Y29ubl9wYXJhbXMuc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUztcXG42NjEwOlxcdFxcdFxcdH0gZWxzZSB7XFxuNjYxMTpcXHRcXHRcXHRcXHRjbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19FQVBfU1VDQ0VTUyxcXG42NjEyOlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpO1xcbjY2MTM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQVNTT0NfU1VDQ0VTUyxcXG42NjE0OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpO1xcbjY2MTU6XFx0XFx0XFx0XFx0Y29ubl9wYXJhbXMuc3RhdHVzID0gV0xBTl9TVEFUVVNfQVVUSF9USU1FT1VUO1xcbjY2MTY6XFx0XFx0XFx0fVxcbjY2MTc6XFx0XFx0XFx0Y29ubl9wYXJhbXMubGlua3NbMF0uYnNzaWQgPSBwcm9maWxlLVxcdTAwM2Vic3NpZDtcXG42NjE4OlxcdFxcdFxcdGNvbm5fcGFyYW1zLnJlcV9pZSA9IGNvbm5faW5mby1cXHUwMDNlcmVxX2llO1xcbjY2MTk6XFx0XFx0XFx0Y29ubl9wYXJhbXMucmVxX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVxX2llX2xlbjtcXG42NjIwOlxcdFxcdFxcdGNvbm5fcGFyYW1zLnJlc3BfaWUgPSBjb25uX2luZm8tXFx1MDAzZXJlc3BfaWU7XFxuNjYyMTpcXHRcXHRcXHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVzcF9pZV9sZW47XFxuNjYyMjpcXHRcXHRcXHRhdXRob3JpemVkID0gY29tcGxldGVkIFxcdTAwMjZcXHUwMDI2XFxuNjYyMzpcXHRcXHRcXHRcXHQgICAgIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxcbjY2MjQ6XFx0XFx0XFx0XFx0ICAgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXFx1MDAyNlxcdTAwMjZcXG42NjI1OlxcdFxcdFxcdFxcdCAgICAgYnJjbWZfaGFzX3Bta2lkKGNvbm5fcGFyYW1zLnJlcV9pZSxcXG42NjI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7XFxuNjYyNzpcXHRcXHRcXHRjZmc4MDIxMV9jb25uZWN0X2RvbmUobmRldiwgXFx1MDAyNmNvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTtcXG42NjI4OlxcdFxcdFxcdGlmIChhdXRob3JpemVkKVxcbjY2Mjk6XFx0XFx0XFx0XFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXFx1MDAzZWJzc2lkLCBOVUxMLCAwLFxcbjY2MzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbjY2MzE6XFx0XFx0XFx0YnJjbWZfZGJnKENPTk4sIFxcXCJSZXBvcnQgY29ubmVjdCByZXN1bHQgLSBjb25uZWN0aW9uICVzXFxcXG5cXFwiLFxcbjY2MzI6XFx0XFx0XFx0XFx0ICBjb21wbGV0ZWQgPyBcXFwic3VjY2VlZGVkXFxcIiA6IFxcXCJmYWlsZWRcXFwiKTtcXG42NjMzOlxcdFxcdH1cXG42NjM0OlxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIkV4aXRcXFxcblxcXCIpO1xcbjY2MzU6XFx0XFx0cmV0dXJuIDA7XFxuNjYzNjpcXHR9XFxuNjYzNzpcXHRcXG42NjM4OlxcdHN0YXRpYyBzMzJcXG42NjM5OlxcdGJyY21mX25vdGlmeV9jb25uZWN0X3N0YXR1c19hcChzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozODowOS42NzQzMzU5NjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNjYyODY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBubDgwMjExX3NldF9wbWtgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQTUsgKFBhaXJ3aXNlIE1hc3RlciBLZXkpIGlzIGJlaW5nIHNldCB3aXRoaW4gdGhlIG5sODAyMTEgc3Vic3lzdGVtLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9zZXRfcG1rYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIHRoaXMgc2hvdWxkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgYW5hbHl6aW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIFBNSyBjb25maWd1cmF0aW9uLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgYXMgSSBkb24ndCB3YW50IHRvIGJlIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgc3BlbHVua2luZy4gVGltZSB0byBmaXJlIHVwIG15IGVkaXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM4OjExLjgwMDk2ODM5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQzMDpcXHRcXG4xODQzMTpcXHRcXHRyZXR1cm4gcmRldl9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QocmRldiwgZGV2LCBlbmFibGVkKTtcXG4xODQzMjpcXHR9XFxuMTg0MzM6XFx0XFxuMTg0MzQ6XFx0c3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xODQzNTpcXHR7XFxuMTg0MzY6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuMTg0Mzc6XFx0XFx0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeTtcXG4xODQzODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg0Mzk6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4xODQ0MDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgcG1rX2NvbmYgPSB7fTtcXG4xODQ0MTpcXHRcXG4xODQ0MjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXFx1MDAyNlxcdTAwMjZcXG4xODQ0MzpcXHRcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXFxuMTg0NDQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NDQ1OlxcdFxcbjE4NDQ2OlxcdFxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuMTg0NDc6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbjE4NDQ4OlxcdFxcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuMTg0NDk6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXFxuMTg0NTA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NDUxOlxcdFxcbjE4NDUyOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKVxcbjE4NDUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NDU0OlxcdFxcbjE4NDU1OlxcdFxcdGlmICghd2Rldi1cXHUwMDNlY29ubmVjdGVkKVxcbjE4NDU2OlxcdFxcdFxcdHJldHVybiAtRU5PVENPTk47XFxuMTg0NTc6XFx0XFxuMTg0NTg6XFx0XFx0cG1rX2NvbmYuYWEgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuMTg0NTk6XFx0XFx0aWYgKG1lbWNtcChwbWtfY29uZi5hYSwgd2Rldi1cXHUwMDNldS5jbGllbnQuY29ubmVjdGVkX2FkZHIsIEVUSF9BTEVOKSlcXG4xODQ2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODQ2MTpcXHRcXG4xODQ2MjpcXHRcXHRwbWtfY29uZi5wbWsgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LXSk7XFxuMTg0NjM6XFx0XFx0cG1rX2NvbmYucG1rX2xlbiA9IG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pO1xcbjE4NDY0OlxcdFxcdGlmIChwbWtfY29uZi5wbWtfbGVuICE9IFdMQU5fUE1LX0xFTiBcXHUwMDI2XFx1MDAyNlxcbjE4NDY1OlxcdFxcdCAgICBwbWtfY29uZi5wbWtfbGVuICE9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5MilcXG4xODQ2NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODQ2NzpcXHRcXG4xODQ2ODpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS1IwX05BTUVdKVxcbjE4NDY5OlxcdFxcdFxcdHBta19jb25mLnBta19yMF9uYW1lID1cXG4xODQ3MDpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LUjBfTkFNRV0pO1xcbjE4NDcxOlxcdFxcbjE4NDcyOlxcdFxcdHJldHVybiByZGV2X3NldF9wbWsocmRldiwgZGV2LCBcXHUwMDI2cG1rX2NvbmYpO1xcbjE4NDczOlxcdH1cXG4xODQ3NDpcXHRcXG4xODQ3NTpcXHRzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NDc2OlxcdHtcXG4xODQ3NzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODQ3ODpcXHRcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5O1xcbjE4NDc5OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODQ4MDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NDgxOlxcdFxcdGNvbnN0IHU4ICphYTtcXG4xODQ4MjpcXHRcXG4xODQ4MzpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXFx1MDAyNlxcdTAwMjZcXG4xODQ4NDpcXHRcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXFxuMTg0ODU6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NDg2OlxcdFxcbjE4NDg3OlxcdFxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuMTg0ODg6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbjE4NDg5OlxcdFxcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM4OjExLjgwMTYxOTA0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMDE0NTI1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogRmFzdCBSb2FtIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBhZGRpbmcgZmFzdCByb2FtIG9mZmxvYWQgKEZCVC9PS0MpIHN1cHBvcnQgd2l0aGluIHRoZSBicmNtZm1hYyBhbmQgbmw4MDIxMSBzdWJzeXN0ZW1zLiBUaGUgY29kZSBhZGRzIGZlYXR1cmUgZmxhZ3MsIHZhbGlkYXRlcyBQTUtJRHMsIGFuZCBtYW5hZ2VzIE9LQy9GVCBvcGVyYXRpb25zIGR1cmluZyBjb25uZWN0aW9uIGFuZCByb2FtaW5nLlxuXG5DcnVjaWFsbHksIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gSSd2ZSBzY3J1dGluaXplZCB0aGUgbWVtb3J5IGhhbmRsaW5nLCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBmb3VuZC5cblxuMS4gICoqTm8gS2VybmVsLXRvLVVzZXIgTGVha3M6KiogQWJzb2x1dGVseSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgb3IgdW5pbml0aWFsaXplZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIE5vdGhpbmcgbmV3IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuXG5cbjIuICAqKkluaXRpYWxpemF0aW9uIGlzIEtleToqKiBWYXJpYWJsZXMgbGlrZSBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCBhcmUgYWxsIGluaXRpYWxpemVkIGJlZm9yZSB0aGVpciB1c2UuIFRoZSBgb2tjX2VuYWJsZWAgdmFyaWFibGUgaXMgb25seSByZWFkIGlmIHRoZXJlIGlzIG5vIGVycm9yIHdoZW4gcXVlcnlpbmcgdGhlIGZpcm13YXJlLiBUaGUgYHByb2ZpbGVgIHN0cnVjdCBmaWVsZHMgcmVsYXRlZCB0byBzdGF0ZSAoYGlzX29rY2AsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC5cblxuMy4gICoqU2FmZSBQTUtJRCBIYW5kbGluZzoqKiBUaGUgYGJyY21mX2hhc19wbWtpZGAgZnVuY3Rpb24gZGlsaWdlbnRseSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IElFIGJ1ZmZlci4gTm8gcmlza3Mgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzIHRoZXJlLlxuXG40LiAgKipObyBDb21wbGV4IERhdGEgU3RydWN0dXJlcyB3aXRoIFVuaW5pdGlhbGl6ZWQgRmllbGRzOioqIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIHBvc2UgYSBwcm9ibGVtIGRvd24gdGhlIGxpbmUuXG5cbjUuICAqKk5vIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzIGluIENvbnRyb2wgRmxvdzoqKiBJIHNlZSBubyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cbkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggc3RpY2tzIHRvIGJlc3QgcHJhY3RpY2VzIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBidWZmZXIgb3ZlcnJ1bnMgZHVyaW5nIElFIHBhcnNpbmcgb3IgaW52YWxpZCBzdGF0ZSBoYW5kbGluZywgd291bGQgYmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDMyLCJPdXRwdXRUb2tlbnMiOjMyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozODoyMC44MDMwNzQwNzFaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGZhc3Qgcm9hbSBvZmZsb2FkIChGYXN0IEJTUyBUcmFuc2l0aW9uIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZykgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBhbmQgdGhlIG5sODAyMTEgc3Vic3lzdGVtLlxcblxcbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBzdGFjayBhbmQgaGVhcCB2YXJpYWJsZXMgKGUuZy4sIGBva2NfZW5hYmxlYCwgYGF1dGhvcml6ZWRgLCBgcG1rX2NvbmZgKSBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgdmFsdWVzIHByaW9yIHRvIGFueSByZWFkLiBgb2tjX2VuYWJsZWAgaXMgb25seSBhY2Nlc3NlZCBpZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCBzdWNjZXNzZnVsbHkgcmV0dXJucyAwLlxcbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXFxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cXG40LiBObyBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIGlvY3RsLCBvciBjb3B5X3RvX3VzZXIuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGZhc3Qgcm9hbSBvZmZsb2FkIChGYXN0IEJTUyBUcmFuc2l0aW9uIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZykgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBhbmQgdGhlIG5sODAyMTEgc3Vic3lzdGVtLlxcblxcbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBzdGFjayBhbmQgaGVhcCB2YXJpYWJsZXMgKGUuZy4sIGBva2NfZW5hYmxlYCwgYGF1dGhvcml6ZWRgLCBgcG1rX2NvbmZgKSBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgdmFsdWVzIHByaW9yIHRvIGFueSByZWFkLiBgb2tjX2VuYWJsZWAgaXMgb25seSBhY2Nlc3NlZCBpZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCBzdWNjZXNzZnVsbHkgcmV0dXJucyAwLlxcbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXFxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cXG40LiBObyBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIGlvY3RsLCBvciBjb3B5X3RvX3VzZXIuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 07:14:33 +0000 UTC FinishedAt: 2026-09-11 07:38:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "BRCMFMAC", "BRCMFMAC_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "BRCMFMAC", "BRCMFMAC_USB" ], "series_id": "6475b3ff-9c85-4aa7-a28e-e43753a65ca7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_set_pmk", "nl80211_del_pmk", "brcmf_set_key_mgmt", "brcmf_cfg80211_connect", "brcmf_cfg80211_set_pmk", "brcmf_bss_roaming_done", "brcmf_bss_connect_done", "brcmf_setup_wiphy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0dXBfd2lwaHkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cblxuS2V5IG9ic2VydmF0aW9ucyByZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXG4zLiBUaGUgbmV3IElFIHBhcnNpbmcgZnVuY3Rpb24gYGJyY21mX2hhc19wbWtpZGAgb3BlcmF0ZXMgd2l0aCBsZW5ndGggYW5kIG9mZnNldCBib3VuZHMgY2hlY2tzIG9uIGluY29taW5nIElFIGJ5dGUgYXJyYXlzOyBhbnkgb3V0LW9mLWJvdW5kcyByZWFkaW5nIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtaW5nIG9mZmxvYWQgKEZCVCAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcgLSBPS0MpIGFuZCBQTUsgb2ZmbG9hZCBhY3Jvc3MgdGhlIGNvcmUgbmw4MDIxMSBzdWJzeXN0ZW0gYW5kIHRoZSBicmNtZm1hYyBkcml2ZXIuIEl0IHVwZGF0ZXMgbmV0bGluayB2YWxpZGF0aW9uIGxvZ2ljIGluIG5sODAyMTFfc2V0X3Btay9ubDgwMjExX2RlbF9wbWssIGludHJvZHVjZXMgUlNOIFBNS0lEIElFIHBhcnNpbmcsIG1vZGlmaWVzIGNvbm5lY3QgYW5kIHJvYW0gY29tcGxldGlvbiBzdGF0ZSBoYW5kbGluZywgYW5kIHVwZGF0ZXMgV0FSTl9PTiBhc3NlcnRpb25zIGluIGNvbm5lY3Rpb24vUE1LIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZXNlIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChubDgwMjExKSBhbmQgdmlydHVhbGl6ZWQgVVNCIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYThhMThkNjg2MGI3ZGU0YjVhZDE3M2M2YjEwMmJiMjg3ZmZlMGU3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDg3MmM0ODgwNmQwOTEuLjUxOWRlOTZiMDQyZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0yMTEyLDkgJiM0MzsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRzMzIgdmFsO1xuIFx0czMyIGVycjtcbiYjNDM7XHRzMzIgb2tjX2VuYWJsZTtcbiBcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTtcbiBcdGNvbnN0IHU4ICppZTtcbiBcdHUzMiBpZV9sZW47XG4mIzQzO1x0Ym9vbCBmd3N1cF9yb2FtO1xuIFx0dTMyIG9mZnNldDtcbiBcdHUxNiByc25fY2FwO1xuIFx0dTMyIG1mcDtcbkBAIC0yMTIyLDYgJiM0MzsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FO1xuIFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IGZhbHNlO1xuJiM0MztcdHByb2ZpbGUtXHUwMDNlaXNfb2tjID0gZmFsc2U7XG4mIzQzO1x0ZndzdXBfcm9hbSA9IGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fFxuJiM0MztcdFx0ICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7XG4gXG4gXHRpZiAoIXNtZS1cdTAwM2VjcnlwdG8ubl9ha21fc3VpdGVzKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yMTM4LDYgJiM0MzsyMTQzLDggQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHR2YWwgPSBXUEFfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4mIzQzO1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOlxuIFx0XHRcdHZhbCA9IFdQQV9BVVRIX1BTSztcbkBAIC0yMTUzLDExICYjNDM7MjE2MCwxNSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4mIzQzO1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfODAyMVhfU0hBMjU2OlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XG4gXHRcdFx0aWYgKHNtZS1cdTAwM2V3YW50XzF4KVxuIFx0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xuJiM0MztcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuJiM0MztcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1BTS19TSEEyNTY6XG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1BTS19TSEEyNTY7XG5AQCAtMjE3MCwxMCAmIzQzOzIxODEsMTYgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4mIzQzO1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfRlRfUFNLOlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfRlQ7XG4gXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IHRydWU7XG4mIzQzO1x0XHRcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSlcbiYjNDM7XHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuJiM0MztcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuJiM0MztcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XG4gXHRcdFx0dmFsID0gV0ZBX0FVVEhfRFBQO1xuQEAgLTIyMDQsOCAmIzQzOzIyMjEsMjIgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKVxuIFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgMVggb2ZmbG9hZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG4mIzQzO1x0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkge1xuJiM0MztcdFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXCYjMzQ7b2tjX2VuYWJsZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcdTAwMjZva2NfZW5hYmxlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7Z2V0IG9rY19lbmFibGUgZmFpbGVkICglZClcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7b2tjX2VuYWJsZSAoJWQpXFxuXCYjMzQ7LCBva2NfZW5hYmxlKTtcbiYjNDM7XHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19va2MgPSBva2NfZW5hYmxlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSlcbiBcdFx0YnJjbWZfZGJnKElORk8sIFwmIzM0O3VzaW5nIFNBRSBvZmZsb2FkXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKVxuJiM0MztcdFx0YnJjbWZfZGJnKElORk8sIFwmIzM0O3VzaW5nIHJvYW1pbmcgb2ZmbG9hZFxcblwmIzM0Oyk7XG4gXG4gXHRpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSlcbiBcdFx0Z290byBza2lwX21mcF9jb25maWc7XG5AQCAtMjQ5NCwxMyAmIzQzOzI1MjUsMTQgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0aWYgKHNtZS1cdTAwM2VjcnlwdG8ucHNrIFx1MDAyNlx1MDAyNiAhaXNfc2FlX2FrbSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFKSB7XG4tXHRcdFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT1cbi1cdFx0XHRcdCAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XG4mIzQzO1x0XHRcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcbiYjNDM7XHRcdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuJiM0MztcdFx0XHRcdFx0ICAgQlJDTUZfUFJPRklMRV9GV1NVUF9QU0spKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBkb25lO1xuIFx0XHRcdH1cbi1cdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcXG5cJiMzNDspO1xuLVx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbiBcdFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuIFx0XHRcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xuQEAgLTU5NTMsMTcgJiM0Mzs1OTg1LDI5IEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2V0X3BtayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgKmNvbmYpXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4mIzQzO1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtlbnRlclxcblwmIzM0Oyk7XG4gXG4tXHQvKiBleHBlY3QgdXNpbmcgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgMVggKi9cbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpZiAoV0FSTl9PTihpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpKVxuJiM0MztcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbiYjNDM7XHRpZiAoV0FSTl9PTihpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19mdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLmlzX29rYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGNvbmYtXHUwMDNlcG1rX2xlbiBcdTAwM2UgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTilcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4mIzQzO1x0aWYgKGlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19va2MpIHtcbiYjNDM7XHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O29rY19pbmZvX3Bta1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O29rY19pbmZvX3BtayBpb3ZhciBmYWlsZWQ6IHJldD0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGJyY21mX3NldF9wbWsoaWZwLCBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbiB9XG4gXG5AQCAtNjQyMiw2ICYjNDM7NjQ2Niw0NyBAQCBzdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicmNtZl9oYXNfcG1raWQoY29uc3QgdTggKnBhcnNlLCB1MzIgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJyY21mX3RsdiAqcnNuX2llO1xuJiM0MztcdGNvbnN0IHU4ICppZTtcbiYjNDM7XHR1MzIgaWVfbGVuO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0dTE2IGNvdW50O1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhcnNlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7XG4mIzQzO1x0aWYgKCFyc25faWUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGllID0gKGNvbnN0IHU4ICopcnNuX2llO1xuJiM0MztcdGllX2xlbiA9IHJzbl9pZS1cdTAwM2VsZW4gJiM0MzsgVExWX0hEUl9MRU47XG4mIzQzO1xuJiM0MztcdG9mZnNldCA9IFRMVl9IRFJfTEVOICYjNDM7IFdQQV9JRV9WRVJTSU9OX0xFTiAmIzQzOyBXUEFfSUVfTUlOX09VSV9MRU47XG4mIzQzO1x0aWYgKG9mZnNldCAmIzQzOyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOIFx1MDAzZT0gaWVfbGVuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IGllW29mZnNldF0gJiM0MzsgKGllW29mZnNldCAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICYjNDM7IGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xuJiM0MztcdGlmIChvZmZzZXQgJiM0MzsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiBcdTAwM2U9IGllX2xlbilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdG9mZnNldCAmIzQzOz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmIzQzOyBjb3VudCAqIFdQQV9JRV9NSU5fT1VJX0xFTjtcbiYjNDM7XHRpZiAob2Zmc2V0ICYjNDM7IFJTTl9DQVBfTEVOIFx1MDAzZT0gaWVfbGVuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IFJTTl9DQVBfTEVOO1xuJiM0MztcdGlmIChvZmZzZXQgJiM0MzsgUlNOX1BNS0lEX0NPVU5UX0xFTiBcdTAwM2UgaWVfbGVuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IGllW29mZnNldF0gJiM0MzsgKGllW29mZnNldCAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3VudCBcdTAwM2UgMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgczMyXG4gYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtNjQzNiw2ICYjNDM7NjUyMSw3IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHN0cnVjdCBicmNtZl9ic3NfaW5mb19sZSAqYmk7XG4gXHRzdHJ1Y3QgYnJjbXVfY2hhbiBjaDtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yb2FtX2luZm8gcm9hbV9pbmZvID0ge307XG4mIzQzO1x0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHR1MzIgZnJlcTtcbiBcdHMzMiBlcnIgPSAwO1xuIFx0dTggKmJ1ZjtcbkBAIC02NDgyLDE0ICYjNDM7NjU2OCwxOCBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRyb2FtX2luZm8ucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0cm9hbV9pbmZvLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLVx1MDAzZXJlc3BfaWVfbGVuO1xuIFxuJiM0MztcdGlmICgocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxuJiM0MztcdCAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGJyY21mX2hhc19wbWtpZChyb2FtX2luZm8ucmVxX2llLCByb2FtX2luZm8ucmVxX2llX2xlbikgfHxcbiYjNDM7XHQgICAgIHByb2ZpbGUtXHUwMDNlaXNfZnQgfHwgcHJvZmlsZS1cdTAwM2Vpc19va2MpKVxuJiM0MztcdFx0YXV0aG9yaXplZCA9IHRydWU7XG4mIzQzO1xuIFx0Y2ZnODAyMTFfcm9hbWVkKG5kZXYsIFx1MDAyNnJvYW1faW5mbywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGF1dGhvcml6ZWQpXG4mIzQzO1x0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiBcdGJyY21mX2RiZyhDT05OLCBcJiMzNDtSZXBvcnQgcm9hbWluZyByZXN1bHRcXG5cJiMzNDspO1xuIFxuLVx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggXHUwMDI2XHUwMDI2IHByb2ZpbGUtXHUwMDNlaXNfZnQpIHtcbi1cdFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXHUwMDNlYnNzaWQsIE5VTEwsIDAsIEdGUF9LRVJORUwpO1xuLVx0XHRicmNtZl9kYmcoQ09OTiwgXCYjMzQ7UmVwb3J0IHBvcnQgYXV0aG9yaXplZFxcblwmIzM0Oyk7XG4tXHR9XG4tXG4gXHRzZXRfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQ09OTkVDVEVELCBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXNtZV9zdGF0ZSk7XG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0V4aXRcXG5cJiMzNDspO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02NTA0LDYgJiM0Mzs2NTk0LDcgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGU7XG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSBjZmdfdG9fY29ubihjZmcpO1xuIFx0c3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7XG4mIzQzO1x0Ym9vbCBhdXRob3JpemVkO1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4gXG5AQCAtNjUyOCw3ICYjNDM7NjYxOSwxNSBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVxX2llX2xlbjtcbiBcdFx0Y29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0XHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llX2xlbjtcbiYjNDM7XHRcdGF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcbiYjNDM7XHRcdFx0ICAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLFxuJiM0MztcdFx0XHRcdFx0ICAgICBjb25uX3BhcmFtcy5yZXFfaWVfbGVuKTtcbiBcdFx0Y2ZnODAyMTFfY29ubmVjdF9kb25lKG5kZXYsIFx1MDAyNmNvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmIChhdXRob3JpemVkKVxuJiM0MztcdFx0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuIFx0XHRicmNtZl9kYmcoQ09OTiwgXCYjMzQ7UmVwb3J0IGNvbm5lY3QgcmVzdWx0IC0gY29ubmVjdGlvbiAlc1xcblwmIzM0OyxcbiBcdFx0XHQgIGNvbXBsZXRlZCA/IFwmIzM0O3N1Y2NlZWRlZFwmIzM0OyA6IFwmIzM0O2ZhaWxlZFwmIzM0Oyk7XG4gXHR9XG5AQCAtNzczMSw2ICYjNDM7NzgzMCwxMCBAQCBzdGF0aWMgaW50IGJyY21mX3NldHVwX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIFx0fVxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFX0VYVCkpXG4gXHRcdHdpcGh5LVx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9TQUU7XG4mIzQzO1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fFxuJiM0MztcdCAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQykpXG4mIzQzO1x0XHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksXG4mIzQzO1x0XHRcdFx0ICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7XG4gXHR3aXBoeS1cdTAwM2VtZ210X3N0eXBlcyA9IGJyY21mX3R4cnhfc3R5cGVzO1xuIFx0d2lwaHktXHUwMDNlbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDtcbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BOTykpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2M2U1MzQ1MjNmNTE4Li4xYWE5OTM5MGE5NTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMTI3LDcgJiM0MzsxMjcsOCBAQCBlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAge1xuIFx0QlJDTUZfUFJPRklMRV9GV1NVUF9OT05FLFxuIFx0QlJDTUZfUFJPRklMRV9GV1NVUF9QU0ssXG4gXHRCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYLFxuLVx0QlJDTUZfUFJPRklMRV9GV1NVUF9TQUVcbiYjNDM7XHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSxcbiYjNDM7XHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU1cbiB9O1xuIFxuIC8qKlxuQEAgLTE2NCw2ICYjNDM7MTY1LDcgQEAgZW51bSBicmNtZl9tZ210X3R4X3N0YXR1cyB7XG4gICogQGJzc2lkOiBic3NpZCBvZiBqb2luZWQvam9pbmluZyBpYnNzLlxuICAqIEBzZWM6IHNlY3VyaXR5IGluZm9ybWF0aW9uLlxuICAqIEBrZXk6IGtleSBpbmZvcm1hdGlvblxuJiM0MzsgKiBAaXNfb2tjOiBPS0MgaXMgdXNlZCBmb3IgY3VycmVudCBjb25uZWN0aW9uLlxuICAqL1xuIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbkBAIC0xNzIsNiAmIzQzOzE3NCw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB1c2VfZndzdXA7XG4gXHR1MTYgdXNlX2Z3YXV0aDtcbiBcdGJvb2wgaXNfZnQ7XG4mIzQzO1x0Ym9vbCBpc19va2M7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuY1xuaW5kZXggNDg4MzY0ZWY4ZmYyYS4uY2MxOWU1ZTdlYmY1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcbkBAIC00NSw2ICYjNDM7NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7XG4gXHR7IEJSQ01GX0ZFQVRfU0FFLCBcJiMzNDtzYWUgXCYjMzQ7IH0sXG4gXHR7IEJSQ01GX0ZFQVRfRldBVVRILCBcJiMzNDtpZGF1dGhcJiMzNDsgfSxcbiBcdHsgQlJDTUZfRkVBVF9TQUVfRVhULCBcJiMzNDtzYWVfZXh0XCYjMzQ7IH0sXG4mIzQzO1x0eyBCUkNNRl9GRUFUX0ZCVCwgXCYjMzQ7ZmJ0IFwmIzM0OyB9LFxuJiM0MztcdHsgQlJDTUZfRkVBVF9PS0MsIFwmIzM0O29rY1wmIzM0OyB9LFxuIH07XG4gXG4gI2lmZGVmIERFQlVHXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmhcbmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG5AQCAtNTksNyAmIzQzOzU5LDkgQEBcbiBcdEJSQ01GX0ZFQVRfREVGKFNDQU5fVjIpIFxcXG4gXHRCUkNNRl9GRUFUX0RFRihQTUtJRF9WMikgXFxcbiBcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcXFxuLVx0QlJDTUZfRkVBVF9ERUYoU0FFX0VYVClcbiYjNDM7XHRCUkNNRl9GRUFUX0RFRihTQUVfRVhUKSBcXFxuJiM0MztcdEJSQ01GX0ZFQVRfREVGKEZCVCkgXFxcbiYjNDM7XHRCUkNNRl9GRUFUX0RFRihPS0MpXG4gXG4gLypcbiAgKiBRdWlya3M6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjkyMGQ1ZTJkOTk2NjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtNzExMCw2ICYjNDM7NzExMCwxMCBAQCBlbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7XG4gICogQE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPQkVfQVA6IERyaXZlciBzdXBwb3J0cyBwcm9iaW5nIHRoZSBhc3NvY2lhdGVkIEFQXG4gICpcdGluIFNUQSBtb2RlIHVzaW5nIEBOTDgwMjExX0NNRF9QUk9CRV9QRUVSLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEOiBEcml2ZXIgc3VwcG9ydHMgZmFzdCByb2FtaW5nXG4mIzQzOyAqXHRvZmZsb2FkIGluIHN0YXRpb24gbW9kZSwgaW5jbHVkaW5nIEZhc3QgVHJhbnNpdGlvbiBvciBPcHBvcnR1bmlzdGljXG4mIzQzOyAqXHRLZXkgQ2FjaGluZy5cbiYjNDM7ICpcbiAgKiBATlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBudW1iZXIgb2YgZXh0ZW5kZWQgZmVhdHVyZXMuXG4gICogQE1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUzogaGlnaGVzdCBleHRlbmRlZCBmZWF0dXJlIGluZGV4LlxuICAqL1xuQEAgLTcxOTIsNiAmIzQzOzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xuIFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9ST0NfQUREUl9GSUxURVIsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1NFVF9LRVlfTFRGX1NFRUQsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLFxuJiM0MztcdE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQsXG4gXG4gXHQvKiBhZGQgbmV3IGZlYXR1cmVzIGJlZm9yZSB0aGUgZGVmaW5pdGlvbiBiZWxvdyAqL1xuIFx0TlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA0NGYyYmFkMDg2NzA1Li5lNDg1MDEyOWE1ODJiIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTE4NDM0LDYgJiM0MzsxODQzNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4mIzQzO1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFx1MDAyNnJkZXYtXHUwMDNld2lwaHk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9O1xuQEAgLTE4NDQyLDcgJiM0MzsxODQ0Myw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuJiM0MztcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuIFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbkBAIC0xODQ3Miw2ICYjNDM7MTg0NzUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbiYjNDM7XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIFx0Y29uc3QgdTggKmFhO1xuQEAgLTE4NDgwLDcgJiM0MzsxODQ4NCw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuJiM0MztcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuIFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX3NldF9wbWsmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfcG1rJiMzNDssCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfYnNzX3JvYW1pbmdfZG9uZSYjMzQ7LAogICAgJiMzNDticmNtZl9ic3NfY29ubmVjdF9kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX3NldHVwX3dpcGh5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtaW5nIG9mZmxvYWQgKEZCVCAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcgLSBPS0MpIGFuZCBQTUsgb2ZmbG9hZCBhY3Jvc3MgdGhlIGNvcmUgbmw4MDIxMSBzdWJzeXN0ZW0gYW5kIHRoZSBicmNtZm1hYyBkcml2ZXIuIEl0IHVwZGF0ZXMgbmV0bGluayB2YWxpZGF0aW9uIGxvZ2ljIGluIG5sODAyMTFfc2V0X3Btay9ubDgwMjExX2RlbF9wbWssIGludHJvZHVjZXMgUlNOIFBNS0lEIElFIHBhcnNpbmcsIG1vZGlmaWVzIGNvbm5lY3QgYW5kIHJvYW0gY29tcGxldGlvbiBzdGF0ZSBoYW5kbGluZywgYW5kIHVwZGF0ZXMgV0FSTl9PTiBhc3NlcnRpb25zIGluIGNvbm5lY3Rpb24vUE1LIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZXNlIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChubDgwMjExKSBhbmQgdmlydHVhbGl6ZWQgVVNCIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYThhMThkNjg2MGI3ZGU0YjVhZDE3M2M2YjEwMmJiMjg3ZmZlMGU3MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwppbmRleCA4NzJjNDg4MDZkMDkxLi41MTlkZTk2YjA0MmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwpAQCAtMjExMiw5ICYjNDM7MjExMiwxMSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCXN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtJmd0O2RydnI7CiAJczMyIHZhbDsKIAlzMzIgZXJyOwomIzQzOwlzMzIgb2tjX2VuYWJsZTsKIAljb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7CiAJY29uc3QgdTggKmllOwogCXUzMiBpZV9sZW47CiYjNDM7CWJvb2wgZndzdXBfcm9hbTsKIAl1MzIgb2Zmc2V0OwogCXUxNiByc25fY2FwOwogCXUzMiBtZnA7CkBAIC0yMTIyLDYgJiM0MzsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIAogCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORTsKIAlwcm9maWxlLSZndDtpc19mdCA9IGZhbHNlOwomIzQzOwlwcm9maWxlLSZndDtpc19va2MgPSBmYWxzZTsKJiM0MzsJZndzdXBfcm9hbSA9IGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fAomIzQzOwkJICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7CiAKIAlpZiAoIXNtZS0mZ3Q7Y3J5cHRvLm5fYWttX3N1aXRlcykKIAkJcmV0dXJuIDA7CkBAIC0yMTM4LDYgJiM0MzsyMTQzLDggQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIAkJCXZhbCA9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEOwogCQkJaWYgKHNtZS0mZ3Q7d2FudF8xeCkKIAkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX1BTSzoKIAkJCXZhbCA9IFdQQV9BVVRIX1BTSzsKQEAgLTIxNTMsMTEgJiM0MzsyMTYwLDE1IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJCQl2YWwgPSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQ7CiAJCQlpZiAoc21lLSZndDt3YW50XzF4KQogCQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7CiYjNDM7CQkJZWxzZSBpZiAoZndzdXBfcm9hbSkKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9BS01fU1VJVEVfODAyMVhfU0hBMjU2OgogCQkJdmFsID0gV1BBMl9BVVRIXzFYX1NIQTI1NjsKIAkJCWlmIChzbWUtJmd0O3dhbnRfMXgpCiAJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDsKJiM0MzsJCQllbHNlIGlmIChmd3N1cF9yb2FtKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FLTV9TVUlURV9QU0tfU0hBMjU2OgogCQkJdmFsID0gV1BBMl9BVVRIX1BTS19TSEEyNTY7CkBAIC0yMTcwLDEwICYjNDM7MjE4MSwxNiBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCQkJcHJvZmlsZS0mZ3Q7aXNfZnQgPSB0cnVlOwogCQkJaWYgKHNtZS0mZ3Q7d2FudF8xeCkKIAkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX0ZUX1BTSzoKIAkJCXZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfRlQ7CiAJCQlwcm9maWxlLSZndDtpc19mdCA9IHRydWU7CiYjNDM7CQkJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRldTVVApKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKJiM0MzsJCQllbHNlIGlmIChmd3N1cF9yb2FtKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQOgogCQkJdmFsID0gV0ZBX0FVVEhfRFBQOwpAQCAtMjIwNCw4ICYjNDM7MjIyMSwyMiBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCiAJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKQogCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyAxWCBvZmZsb2FkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fAomIzQzOwkgICAgcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgewomIzQzOwkJZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgJiMzNDtva2NfZW5hYmxlJiMzNDssCiYjNDM7CQkJCQkgICAgICAgJmFtcDtva2NfZW5hYmxlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlicGh5X2VycihkcnZyLCAmIzM0O2dldCBva2NfZW5hYmxlIGZhaWxlZCAoJWQpXG4mIzM0OywgZXJyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJYnJjbWZfZGJnKElORk8sICYjMzQ7b2tjX2VuYWJsZSAoJWQpXG4mIzM0Oywgb2tjX2VuYWJsZSk7CiYjNDM7CQkJcHJvZmlsZS0mZ3Q7aXNfb2tjID0gb2tjX2VuYWJsZTsKJiM0MzsJCX0KJiM0MzsJfQogCWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpCiAJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIFNBRSBvZmZsb2FkXG4mIzM0Oyk7CiYjNDM7CWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKQomIzQzOwkJYnJjbWZfZGJnKElORk8sICYjMzQ7dXNpbmcgcm9hbWluZyBvZmZsb2FkXG4mIzM0Oyk7CiAKIAlpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSkKIAkJZ290byBza2lwX21mcF9jb25maWc7CkBAIC0yNDk0LDEzICYjNDM7MjUyNSwxNCBAQCBicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCiAJCWlmIChzbWUtJmd0O2NyeXB0by5wc2sgJmFtcDsmYW1wOyAhaXNfc2FlX2FrbSAmYW1wOyZhbXA7CiAJCSAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHsKLQkJCWlmIChXQVJOX09OKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPQotCQkJCSAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7CiYjNDM7CQkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHsKJiM0MzsJCQkJYnJjbWZfZGJnKElORk8sICYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcbiYjMzQ7KTsKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7CiYjNDM7CQkJfSBlbHNlIGlmIChXQVJOX09OKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPQomIzQzOwkJCQkJICAgQlJDTUZfUFJPRklMRV9GV1NVUF9QU0spKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9Ci0JCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxuJiMzNDspOwotCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7CiAJCX0KIAkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHsKIAkJCS8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqLwpAQCAtNTk1MywxNyAmIzQzOzU5ODUsMjkgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IGJyY21mX2lmICppZnA7CiYjNDM7CXN0cnVjdCBicmNtZl9wdWIgKmRydnI7CiYjNDM7CWludCByZXQ7CiAKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7ZW50ZXJcbiYjMzQ7KTsKIAotCS8qIGV4cGVjdCB1c2luZyBmaXJtd2FyZSBzdXBwbGljYW50IGZvciAxWCAqLwogCWlmcCA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKFdBUk5fT04oaWZwLSZndDt2aWYtJmd0O3Byb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpKQomIzQzOwlkcnZyID0gaWZwLSZndDtkcnZyOwomIzQzOwlpZiAoV0FSTl9PTihpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWlmcC0mZ3Q7dmlmLSZndDtwcm9maWxlLmlzX2Z0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaWZwLSZndDt2aWYtJmd0O3Byb2ZpbGUuaXNfb2tjKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29uZi0mZ3Q7cG1rX2xlbiAmZ3Q7IEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pCiAJCXJldHVybiAtRVJBTkdFOwogCiYjNDM7CWlmIChpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19va2MpIHsKJiM0MzsJCXJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsICYjMzQ7b2tjX2luZm9fcG1rJiMzNDssCiYjNDM7CQkJCQkgICAgICAgY29uZi0mZ3Q7cG1rLCBjb25mLSZndDtwbWtfbGVuKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWJwaHlfZXJyKGRydnIsICYjMzQ7b2tjX2luZm9fcG1rIGlvdmFyIGZhaWxlZDogcmV0PSVkXG4mIzM0OywKJiM0MzsJCQkJIHJldCk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gYnJjbWZfc2V0X3BtayhpZnAsIGNvbmYtJmd0O3BtaywgY29uZi0mZ3Q7cG1rX2xlbik7CiB9CiAKQEAgLTY0MjIsNiAmIzQzOzY0NjYsNDcgQEAgc3RhdGljIHMzMiBicmNtZl9nZXRfYXNzb2NfaWVzKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBib29sIGJyY21mX2hhc19wbWtpZChjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7CiYjNDM7CWNvbnN0IHU4ICppZTsKJiM0MzsJdTMyIGllX2xlbjsKJiM0MzsJdTMyIG9mZnNldDsKJiM0MzsJdTE2IGNvdW50OwomIzQzOwomIzQzOwlpZiAoIXBhcnNlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7CiYjNDM7CWlmICghcnNuX2llKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZSA9IChjb25zdCB1OCAqKXJzbl9pZTsKJiM0MzsJaWVfbGVuID0gcnNuX2llLSZndDtsZW4gJiM0MzsgVExWX0hEUl9MRU47CiYjNDM7CiYjNDM7CW9mZnNldCA9IFRMVl9IRFJfTEVOICYjNDM7IFdQQV9JRV9WRVJTSU9OX0xFTiAmIzQzOyBXUEFfSUVfTUlOX09VSV9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmZ3Q7PSBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNvdW50ID0gaWVbb2Zmc2V0XSAmIzQzOyAoaWVbb2Zmc2V0ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwlvZmZzZXQgJiM0Mzs9IFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gJiM0MzsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmZ3Q7PSBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNvdW50ID0gaWVbb2Zmc2V0XSAmIzQzOyAoaWVbb2Zmc2V0ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwlvZmZzZXQgJiM0Mzs9IFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gJiM0MzsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgUlNOX0NBUF9MRU4gJmd0Oz0gaWVfbGVuKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvZmZzZXQgJiM0Mzs9IFJTTl9DQVBfTEVOOwomIzQzOwlpZiAob2Zmc2V0ICYjNDM7IFJTTl9QTUtJRF9DT1VOVF9MRU4gJmd0OyBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNvdW50ID0gaWVbb2Zmc2V0XSAmIzQzOyAoaWVbb2Zmc2V0ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwomIzQzOwlyZXR1cm4gY291bnQgJmd0OyAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzMzIKIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LApAQCAtNjQzNiw2ICYjNDM7NjUyMSw3IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAlzdHJ1Y3QgYnJjbWZfYnNzX2luZm9fbGUgKmJpOwogCXN0cnVjdCBicmNtdV9jaGFuIGNoOwogCXN0cnVjdCBjZmc4MDIxMV9yb2FtX2luZm8gcm9hbV9pbmZvID0ge307CiYjNDM7CWJvb2wgYXV0aG9yaXplZCA9IGZhbHNlOwogCXUzMiBmcmVxOwogCXMzMiBlcnIgPSAwOwogCXU4ICpidWY7CkBAIC02NDgyLDE0ICYjNDM7NjU2OCwxOCBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJcm9hbV9pbmZvLnJlc3BfaWUgPSBjb25uX2luZm8tJmd0O3Jlc3BfaWU7CiAJcm9hbV9pbmZvLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLSZndDtyZXNwX2llX2xlbjsKIAomIzQzOwlpZiAoKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8CiYjNDM7CSAgICAgcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgJmFtcDsmYW1wOwomIzQzOwkgICAgKGJyY21mX2hhc19wbWtpZChyb2FtX2luZm8ucmVxX2llLCByb2FtX2luZm8ucmVxX2llX2xlbikgfHwKJiM0MzsJICAgICBwcm9maWxlLSZndDtpc19mdCB8fCBwcm9maWxlLSZndDtpc19va2MpKQomIzQzOwkJYXV0aG9yaXplZCA9IHRydWU7CiYjNDM7CiAJY2ZnODAyMTFfcm9hbWVkKG5kZXYsICZhbXA7cm9hbV9pbmZvLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGF1dGhvcml6ZWQpCiYjNDM7CQljZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS0mZ3Q7YnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCQkgR0ZQX0tFUk5FTCk7CiAJYnJjbWZfZGJnKENPTk4sICYjMzQ7UmVwb3J0IHJvYW1pbmcgcmVzdWx0XG4mIzM0Oyk7CiAKLQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggJmFtcDsmYW1wOyBwcm9maWxlLSZndDtpc19mdCkgewotCQljZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS0mZ3Q7YnNzaWQsIE5VTEwsIDAsIEdGUF9LRVJORUwpOwotCQlicmNtZl9kYmcoQ09OTiwgJiMzNDtSZXBvcnQgcG9ydCBhdXRob3JpemVkXG4mIzM0Oyk7Ci0JfQotCiAJc2V0X2JpdChCUkNNRl9WSUZfU1RBVFVTX0NPTk5FQ1RFRCwgJmFtcDtpZnAtJmd0O3ZpZi0mZ3Q7c21lX3N0YXRlKTsKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RXhpdFxuJiMzNDspOwogCXJldHVybiBlcnI7CkBAIC02NTA0LDYgJiM0Mzs2NTk0LDcgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gJmFtcDtpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZTsKIAlzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSBjZmdfdG9fY29ubihjZmcpOwogCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zOwomIzQzOwlib29sIGF1dGhvcml6ZWQ7CiAKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RW50ZXJcbiYjMzQ7KTsKIApAQCAtNjUyOCw3ICYjNDM7NjYxOSwxNSBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJCWNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tJmd0O3JlcV9pZV9sZW47CiAJCWNvbm5fcGFyYW1zLnJlc3BfaWUgPSBjb25uX2luZm8tJmd0O3Jlc3BfaWU7CiAJCWNvbm5fcGFyYW1zLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLSZndDtyZXNwX2llX2xlbjsKJiM0MzsJCWF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8CiYjNDM7CQkJICAgICAgcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgYnJjbWZfaGFzX3Bta2lkKGNvbm5fcGFyYW1zLnJlcV9pZSwKJiM0MzsJCQkJCSAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7CiAJCWNmZzgwMjExX2Nvbm5lY3RfZG9uZShuZGV2LCAmYW1wO2Nvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmIChhdXRob3JpemVkKQomIzQzOwkJCWNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLSZndDtic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWJyY21mX2RiZyhDT05OLCAmIzM0O1JlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcbiYjMzQ7LAogCQkJICBjb21wbGV0ZWQgPyAmIzM0O3N1Y2NlZWRlZCYjMzQ7IDogJiMzNDtmYWlsZWQmIzM0Oyk7CiAJfQpAQCAtNzczMSw2ICYjNDM7NzgzMCwxMCBAQCBzdGF0aWMgaW50IGJyY21mX3NldHVwX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBicmNtZl9pZiAqaWZwKQogCX0KIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9TQUVfRVhUKSkKIAkJd2lwaHktJmd0O2ZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9TQUU7CiYjNDM7CWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZCVCkgfHwKJiM0MzsJICAgIGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfT0tDKSkKJiM0MzsJCXdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwKJiM0MzsJCQkJICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7CiAJd2lwaHktJmd0O21nbXRfc3R5cGVzID0gYnJjbWZfdHhyeF9zdHlwZXM7CiAJd2lwaHktJmd0O21heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbiA9IDUwMDA7CiAJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE5PKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAppbmRleCA2M2U1MzQ1MjNmNTE4Li4xYWE5OTM5MGE5NTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaApAQCAtMTI3LDcgJiM0MzsxMjcsOCBAQCBlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAgewogCUJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSwKIAlCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSywKIAlCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYLAotCUJSQ01GX1BST0ZJTEVfRldTVVBfU0FFCiYjNDM7CUJSQ01GX1BST0ZJTEVfRldTVVBfU0FFLAomIzQzOwlCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0KIH07CiAKIC8qKgpAQCAtMTY0LDYgJiM0MzsxNjUsNyBAQCBlbnVtIGJyY21mX21nbXRfdHhfc3RhdHVzIHsKICAqIEBic3NpZDogYnNzaWQgb2Ygam9pbmVkL2pvaW5pbmcgaWJzcy4KICAqIEBzZWM6IHNlY3VyaXR5IGluZm9ybWF0aW9uLgogICogQGtleToga2V5IGluZm9ybWF0aW9uCiYjNDM7ICogQGlzX29rYzogT0tDIGlzIHVzZWQgZm9yIGN1cnJlbnQgY29ubmVjdGlvbi4KICAqLwogc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgewogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTE3Miw2ICYjNDM7MTc0LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgewogCWVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB1c2VfZndzdXA7CiAJdTE2IHVzZV9md2F1dGg7CiAJYm9vbCBpc19mdDsKJiM0MzsJYm9vbCBpc19va2M7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jCmluZGV4IDQ4ODM2NGVmOGZmMmEuLmNjMTllNWU3ZWJmNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYwpAQCAtNDUsNiAmIzQzOzQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0gewogCXsgQlJDTUZfRkVBVF9TQUUsICYjMzQ7c2FlICYjMzQ7IH0sCiAJeyBCUkNNRl9GRUFUX0ZXQVVUSCwgJiMzNDtpZGF1dGgmIzM0OyB9LAogCXsgQlJDTUZfRkVBVF9TQUVfRVhULCAmIzM0O3NhZV9leHQmIzM0OyB9LAomIzQzOwl7IEJSQ01GX0ZFQVRfRkJULCAmIzM0O2ZidCAmIzM0OyB9LAomIzQzOwl7IEJSQ01GX0ZFQVRfT0tDLCAmIzM0O29rYyYjMzQ7IH0sCiB9OwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oCmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaApAQCAtNTksNyAmIzQzOzU5LDkgQEAKIAlCUkNNRl9GRUFUX0RFRihTQ0FOX1YyKSBcCiAJQlJDTUZfRkVBVF9ERUYoUE1LSURfVjIpIFwKIAlCUkNNRl9GRUFUX0RFRihQTUtJRF9WMykgXAotCUJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpCiYjNDM7CUJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpIFwKJiM0MzsJQlJDTUZfRkVBVF9ERUYoRkJUKSBcCiYjNDM7CUJSQ01GX0ZFQVRfREVGKE9LQykKIAogLyoKICAqIFF1aXJrczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCmluZGV4IDAyMDM4N2Q3NjQxMjIuLjkyMGQ1ZTJkOTk2NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaApAQCAtNzExMCw2ICYjNDM7NzExMCwxMCBAQCBlbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7CiAgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9QUk9CRV9BUDogRHJpdmVyIHN1cHBvcnRzIHByb2JpbmcgdGhlIGFzc29jaWF0ZWQgQVAKICAqCWluIFNUQSBtb2RlIHVzaW5nIEBOTDgwMjExX0NNRF9QUk9CRV9QRUVSLgogICoKJiM0MzsgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRDogRHJpdmVyIHN1cHBvcnRzIGZhc3Qgcm9hbWluZwomIzQzOyAqCW9mZmxvYWQgaW4gc3RhdGlvbiBtb2RlLCBpbmNsdWRpbmcgRmFzdCBUcmFuc2l0aW9uIG9yIE9wcG9ydHVuaXN0aWMKJiM0MzsgKglLZXkgQ2FjaGluZy4KJiM0MzsgKgogICogQE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUzogbnVtYmVyIG9mIGV4dGVuZGVkIGZlYXR1cmVzLgogICogQE1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUzogaGlnaGVzdCBleHRlbmRlZCBmZWF0dXJlIGluZGV4LgogICovCkBAIC03MTkyLDYgJiM0Mzs3MTk2LDcgQEAgZW51bSBubDgwMjExX2V4dF9mZWF0dXJlX2luZGV4IHsKIAlOTDgwMjExX0VYVF9GRUFUVVJFX1JPQ19BRERSX0ZJTFRFUiwKIAlOTDgwMjExX0VYVF9GRUFUVVJFX1NFVF9LRVlfTFRGX1NFRUQsCiAJTkw4MDIxMV9FWFRfRkVBVFVSRV9QUk9CRV9BUCwKJiM0MzsJTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCwKIAogCS8qIGFkZCBuZXcgZmVhdHVyZXMgYmVmb3JlIHRoZSBkZWZpbml0aW9uIGJlbG93ICovCiAJTlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNDRmMmJhZDA4NjcwNS4uZTQ4NTAxMjlhNTgyYiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xODQzNCw2ICYjNDM7MTg0MzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tJmd0O3VzZXJfcHRyWzBdOwomIzQzOwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmFtcDtyZGV2LSZndDt3aXBoeTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMV07CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgcG1rX2NvbmYgPSB7fTsKQEAgLTE4NDQyLDcgJiM0MzsxODQ0Myw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJICAgIHdkZXYtJmd0O2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksCiYjNDM7CWlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LAogCQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTE4NDcyLDYgJiM0MzsxODQ3NSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tJmd0O3VzZXJfcHRyWzBdOwomIzQzOwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmFtcDtyZGV2LSZndDt3aXBoeTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMV07CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKIAljb25zdCB1OCAqYWE7CkBAIC0xODQ4MCw3ICYjNDM7MTg0ODQsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCSAgICB3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LAomIzQzOwlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LAomIzQzOwkJCQkgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSwKIAkJCQkgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBXaXJlbGVzcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGBicmNtZm1hY2Agd2lyZWxlc3MgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWNgIGRpcmVjdG9yeS4gSXQgYWxzbyBtb2RpZmllcyBgaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaGAgYW5kIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0JiMzOTtzIGNvcmUgd2lyZWxlc3MgbmV0bGluayBmdW5jdGlvbmFsaXR5LgoKU3BlY2lmaWNhbGx5LCB0aGUgY29yZSBjaGFuZ2UgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgY2hlY2tzIHJlbGF0ZWQgdG8gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgLiBUaGlzIGludm9sdmVzIGV4dGVuZGluZyBhbiBleGlzdGluZyBjaGVjayB3aXRoIGBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEYC4gTm93LCB0aGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgYG5sODAyMTEuY2AgaGFuZGxlcyB0aGVzZSBjb21tYW5kcyB2aWEgZ2VuZXJpYyBuZXRsaW5rIChgTkw4MDIxMV9DTURfU0VUX1BNS2AgLyBgTkw4MDIxMV9DTURfREVMX1BNS2ApIGZyb20gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBmdXp6aW5nISBBbmQsIGltcG9ydGFudGx5LCBgYnJjbWZtYWNgICpoYXMqIFVTQiBzdXBwb3J0IChgQ09ORklHX0JSQ01GTUFDX1VTQmApLCBtZWFuaW5nIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgYSBVU0IgZW11bGF0aW9uIHNldHVwIGlmIG5lZWRlZCwgbWFraW5nIGl0IGZ1enphYmxlLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlLgoKRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGluIHRoZSBgYnJjbWZtYWNgIGRyaXZlciBpdHNlbGYsIHBhcnRpY3VsYXJseSBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCwgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgLCBhbmQgYGJyY21mX2hhc19wbWtpZGAgbm93IGluY2x1ZGUgbmV3IHBhcnNpbmcgbG9naWMgYW5kIHNvbWUgYFdBUk5fT05gIGNoZWNrcy4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIChpbiBhIGdvb2Qgd2F5ISksIGltcGx5aW5nIG5ldyBjb2RlIHBhdGhzIGFuZCBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHRvIGZ1enppbmcuIFRoZXNlIGNoZWNrcyBhcmUgbm93IGNoZWNraW5nIGlmIGBpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCAmYW1wOyZhbXA7ICFpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19mdCAmYW1wOyZhbXA7ICFpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19va2NgLiBUaGlzIGlzIGFsbCBjcml0aWNhbCBjb25maWd1cmF0aW9uIGFuZCBmbG93IGNvbnRyb2wgbG9naWMuCgpTbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIFRoZSBuZXRsaW5rIGludGVyZmFjZSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGFuZCB0aGUgY2hhbmdlcyBpbmNsdWRlIG5ldyBsb2dpYywgcGFydGljdWxhcmx5IGluIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhIGxpa2Ugd2lyZWxlc3Mgc2VjdXJpdHkgYW5kIHJvYW1pbmcuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY29kZSBhbmQgZGVwZW5kZW5jaWVzIG1vcmUgZGVlcGx5IChLY29uZmlnLCBldGMuKSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gQnV0IGJhc2VkIG9uIHRoaXMgaW5pdGlhbCBhbmFseXNpcywgaXQmIzM5O3MgYSBzdHJvbmcgeWVzIGZvciBzeXprYWxsZXIgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOTDgwMjExX0NNRF9TRVRfUE1LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMDcxLVx0e1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDA3MjpcdFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUtTQSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNzMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDUzLVx0e1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ1NDpcdFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUssXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDU1LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2NvbmZpZyBJbnNwZWN0aW9uIGZvciBDRkc4MDIxMSBhbmQgQlJDTUZNQUMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucyBiZXR3ZWVuIENGRzgwMjExIGFuZCBCUkNNRk1BQyB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgZXhpc3QsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gYm90aCBkcml2ZXJzLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlaXIgYENPTkZJR19gIG9wdGlvbnMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgbW9kdWxlcyBvciBidWlsdC1pbiB0byB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBvcHRpb25zIHNldCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHVudXN1YWwgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgdGhhdCBtaWdodCBtYW5pZmVzdCBhcyBidWlsZCBlcnJvcnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBsYXRlciBvbi4gSXTigJlzIGFib3V0IGVuc3VyaW5nIHNlYW1sZXNzIGludGVncmF0aW9uLCBzbyBJIG11c3QgY29uc2lkZXIgaG93IHRoZXNlIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIga2VybmVsIHdpcmVsZXNzIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzE0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEJSQ004MDIxMSBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEkmIzM5O20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHF1aXJrcyBiYWtlZCBpbnRvIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBlc3NlbnRpYWxseSBiZSBteSByb2FkbWFwIHRvIHNlZSB3aGF0IEJyb2FkY29tIGZlYXR1cmVzIGFuZCB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFuZCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEJSQ01VVElMXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBCUkNNU01BQ1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gSUVFRTgwMi4xMW4gUENJZSBTb2Z0TUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA4Olx0XHRkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEVcbiAgIDk6XHRcdHNlbGVjdCBCQ01BXG4gIDEwOlx0XHRzZWxlY3QgQlJDTVVUSUxcbiAgMTE6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMTI6XHRcdHNlbGVjdCBDT1JESUNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQQ0llIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gIDE1Olx0XHQgIElFRUU4MDIuMTFuIFNvZnRNQUMgY2hpcHNldHMuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIHRoZVxuICAxNjpcdFx0ICBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgYnJjbXNtYWMua28uXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIEJSQ01TTUFDX0xFRFNcbiAgMTk6XHRcdGRlZl9ib29sIEJSQ01TTUFDIFx1MDAyNlx1MDAyNiBCQ01BX0RSSVZFUl9HUElPIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9MRURTXG4gIDIwOlx0XHRoZWxwXG4gIDIxOlx0XHQgIFRoZSBicmNtc21hYyBMRUQgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGVcbiAgMjI6XHRcdCAgQkNNQV9EUklWRVJfR1BJTyBkcml2ZXIsIGFuZCBpdCBvbmx5IHdvcmtzIGlmIExFRCBzdXBwb3J0XG4gIDIzOlx0XHQgIGlzIGVuYWJsZWQgYW5kIHJlYWNoYWJsZSBmcm9tIHRoZSBkcml2ZXIgbW9kdWxlLlxuICAyNDpcdFxuICAyNTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUkNNX1RSQUNJTkdcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7QnJvYWRjb20gZGV2aWNlIHRyYWNpbmdcJiMzNDtcbiAgMjk6XHRcdGRlcGVuZHMgb24gQlJDTVNNQUMgfHwgQlJDTUZNQUNcbiAgMzA6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlcnMgd2lsbCByZWdpc3RlclxuICAzMzpcdFx0ICB3aXRoIGZ0cmFjZSB0byBkdW1wIGV2ZW50IGluZm9ybWF0aW9uIGludG8gdGhlIHRyYWNlIHJpbmdidWZmZXIuXG4gIDM0Olx0XHQgIFRyYWNpbmcgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGltZSB0byBhaWQgaW4gZGVidWdnaW5nIHdpcmVsZXNzXG4gIDM1Olx0XHQgIGlzc3Vlcy4gVGhpcyBvcHRpb24gYWRkcyBhIHNtYWxsIGFtb3VudCBvZiBvdmVyaGVhZCB3aGVuIHRyYWNpbmdcbiAgMzY6XHRcdCAgaXMgZGlzYWJsZWQuIElmIHVuc3VyZSwgc2F5IFkgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byBiZXR0ZXIgaGVscFxuICAzNzpcdFx0ICB5b3Ugd2hlbiB3aXJlbGVzcyBwcm9ibGVtcyBvY2N1ci5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgQlJDTURCR1xuICA0MDpcdFx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXCYjMzQ7XG4gIDQxOlx0XHRkZXBlbmRzIG9uIEJSQ01TTUFDIHx8IEJSQ01GTUFDXG4gIDQyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVAgaWYgQlJDTUZNQUNcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgU2VsZWN0aW5nIHRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIGNvZGUgZm9yIGRlYnVnIHB1cnBvc2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTg0CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYnJjbWZtYWMgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJyb2FkY29tIGZ1bGxtYWMgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHRoYXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ludGF4OiBgY29uZmlnYCBibG9ja3MsIGBib29sYCBhbmQgYHRyaXN0YXRlYCBvcHRpb25zLCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIHB1bGwgaW4gc3VwcG9ydGluZyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGVscCB0ZXh0IHRvIGd1aWRlIHVzZXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYnJjbWZtYWMgZHJpdmVyIGFzIGEgd2hvbGUsIHBsdXMgYW55IGdyYW51bGFyIGNvbnRyb2xzIGZvciBzcGVjaWZpYyBmZWF0dXJlcyBvciBoYXJkd2FyZSB2YXJpYW50cy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbmVlZCB0byBiZSBwcmVzZW50IGZvciB0aGUgYnJjbWZtYWMgZHJpdmVyIHRvIGJ1aWxkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiBoZXJlLCBhbnl0aGluZyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQsIHJlZ3VsYXRvcnkgZG9tYWlucywgb3IgZmlybXdhcmUgbG9hZGluZz8gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGRyaXZlciYjMzk7cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gY29udHJpYnV0ZSB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIEJSQ01GTUFDXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA0Olx0XHRzZWxlY3QgQlJDTVVUSUxcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxuICAgNzpcdFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXG4gICA4Olx0XHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkXG4gICA5Olx0XHQgIGJyY21mbWFjLmtvLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBCUkNNRk1BQ19TRElPXG4gIDE4Olx0XHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcbiAgMjA6XHRcdGRlcGVuZHMgb24gQlJDTUZNQUNcbiAgMjE6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXG4gIDIyOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDI2Olx0XHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXG4gIDI3Olx0XHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhIFNESU8gd2lyZWxlc3MgY2FyZC5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgQlJDTUZNQUNfVVNCXG4gIDMwOlx0XHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIChVU0IgPSB5IHx8IFVTQiA9IEJSQ01GTUFDKVxuICAzMjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAzMzpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMzQ6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMzc6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMzg6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFVTQiB3aXJlbGVzcyBjYXJkLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXG4gIDQxOlx0XHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbiAgNDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDQ4Olx0XHQgIElFRUU4MDIuMTFhYyBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICA0OTpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gUENJRSB3aXJlbGVzcyBjYXJkLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzMQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBXaXJlbGVzcyBGYXN0IFJvYW1pbmcgT2ZmbG9hZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBUaGlzIHBhdGNoIGhpdHMgYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIHdpdGggY2hhbmdlcyB0byBgbmw4MDIxMV9zZXRfcG1rYCBhbmQgYG5sODAyMTFfZGVsX3Bta2AsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBOZXRsaW5rIGludGVyZmFjZXMgYXJlIGFsd2F5cyBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgYG5sODAyMTFgIGlzIHBhcnQgb2YgdGhlIGNvcmUgd2lyZWxlc3MgbmV0bGluayBpbnRlcmZhY2UsIHNvIHRoYXQmIzM5O3MgYSBkaXJlY3Qgcm91dGUgaW4gdmlhIGBORVRMSU5LX0dFTkVSSUNgLgoKVGhlbiwgd2UgaGF2ZSB0aGUgYGJyY21mbWFjYCBkcml2ZXIgY29kZTogYGJyY21mX3NldF9rZXlfbWdtdGAsIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCwgYGJyY21mX2NmZzgwMjExX3NldF9wbWtgLCBgYnJjbWZfaGFzX3Bta2lkYCwgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgLCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIGFuZCBgYnJjbWZfc2V0dXBfd2lwaHlgLiBUaGUgcHJlc2VuY2Ugb2YgYm90aCBkaXJlY3QgYG5sODAyMTFgIHRvdWNoZXMgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIGdvb2QgdGFyZ2V0LiBUaGUgYGJyY21mbWFjYCBkcml2ZXIgaXMgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGVtdWxhdGlvbiAoYENPTkZJR19CUkNNRk1BQ19VU0JgKSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGdlbmVyaWMgbmV0bGluayBhbmQgY2ZnODAyMTEgb3BlcmF0aW9ucyBsaWtlIGBOTDgwMjExX0NNRF9DT05ORUNUYCwgYE5MODAyMTFfQ01EX1NFVF9QTUtgLCBhbmQgYE5MODAyMTFfQ01EX0RFTF9QTUtgLiBUaGF0JiMzOTtzIGEgc29saWQgYXR0YWNrIHN1cmZhY2UuCgpUaGlzIHBhdGNoIGlzIGFkZGluZyBmYXN0IHJvYW1pbmcgb2ZmbG9hZCwgT0tDLCBQTUtJRCBwYXJzaW5nIHZpYSBgYnJjbWZfaGFzX3Bta2lkYCwgcG9ydCBhdXRob3JpemF0aW9uLCBhbmQgbW9kaWZ5aW5nIGRlZmVuc2l2ZSBhc3NlcnRpb25zIHdpdGggYFdBUk5fT05gIHdpdGhpbiB0aGUgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AgZnVuY3Rpb25zLiBUaGlzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoZSBjaGFuY2VzIG9mIGludGVyZXN0aW5nIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoqICAgYG5sODAyMTFfc2V0X3Bta2AKKiAgIGBubDgwMjExX2RlbF9wbWtgCiogICBgYnJjbWZfc2V0X2tleV9tZ210YAoqICAgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgCiogICBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AKKiAgIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYAoqICAgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgCiogICBgYnJjbWZfc2V0dXBfd2lwaHlgCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgYnJjbWZfc2V0X2tleV9tZ210YCBpcyBzdGF0aWMgb3IgZXhwb3J0ZWQvdXNlZCBpbiBgY2ZnODAyMTEuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSBob3cgZGlyZWN0bHkgY29udHJvbGxhYmxlIGl0IGlzIGZyb20gYSB1c2VyLXNwYWNlIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9zZXRfa2V5X21nbXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIxMDc9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjEwODpicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjEwOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MjQxMj1icmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI1MDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzoyNTA5Olx0ZXJyID0gYnJjbWZfc2V0X2tleV9tZ210KG5kZXYsIHNtZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNTEwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg4NAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYnJjbWYgV2ktRmkgRHJpdmVyJiMzOTtzIFBNS0lEIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgUE1LSURzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byByb2FtaW5nIGFuZCBjb25uZWN0aW9uIHByb2Nlc3Nlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGJyY21mX2hhc19wbWtpZGAuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgY2ZnODAyMTEuY2AsIGFuZCB0aGF0JiMzOTtzIGFscmVhZHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIGludGVybmFsIHRvIHRoZSBmaWxlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgYSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgb25seSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyBgYnJjbWZfaGFzX3Bta2lkYCBhY3R1YWxseSAqdXNlZCo/IEFoLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZWAgYW5kIGBicmNtZl9ic3NfY29ubmVjdF9kb25lYC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKTm93LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCBhbmQgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgIGFyZSB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXBzLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IGdvdmVybiB0aGUgY29tcGxldGlvbiBvZiB0aGUgcm9hbWluZyBhbmQgY29ubmVjdGlvbiBwcm9jZXNzZXMsIHJlc3BlY3RpdmVseS4gS25vd2luZyBob3cgYGJyY21mX2hhc19wbWtpZGAgaXMgaW52b2x2ZWQgaW4gKnRob3NlKiBjb21wbGV0aW9uIHJvdXRpbmVzIGlzIGdvaW5nIHRvIHRlbGwgbWUgZXhhY3RseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93IEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1ODg9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjU4OTpicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NTkwLVx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGNvbnN0IHN0cnVjdCBicmNtZl9ldmVudF9tc2cgKmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjY4Nj1icmNtZl9ub3RpZnlfY29ubmVjdF9zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjcxNS1cdFx0fSBlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2NzE2Olx0XHRcdGJyY21mX2Jzc19jb25uZWN0X2RvbmUoY2ZnLCBuZGV2LCBlLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MTctXHRcdGJyY21mX25ldF9zZXRjYXJyaWVyKGlmcCwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjcyOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY3MzA6XHRcdFx0YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShjZmcsIG5kZXYsIGUsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MzEtXHRcdFx0YnJjbWZfbGlua19kb3duKGlmcC1cdTAwM2V2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc0Ni1cdFx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc0NzpcdFx0XHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgbmRldiwgZSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc0OC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02NzU0PWJyY21mX25vdGlmeV9yb2FtaW5nX3N0YXR1cyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY1LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NjpcdFx0XHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgaWZwLVx1MDAzZW5kZXYsIGUsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc2Ny1cdFx0XHRicmNtZl9uZXRfc2V0Y2FycmllcihpZnAsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4MgoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIFdpRmkgZHJpdmVyIGRldmVsb3BtZW50OgoKKipFeGFtaW5pbmcgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgSSBrbm93IGl0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGZpbmFsIGhhbmRzaGFrZSBhbmQgY29tcGxldGlvbiBzdGF0ZSBmb3IgYSBCU1MgKEJhc2ljIFNlcnZpY2UgU2V0KSByb2FtaW5nIGV2ZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcywgd2hhdCBpdCAqc2hvdWxkKiBiZSBkb2luZywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcm9hbWluZyBwcm9jZXNzIHdpdGhpbiB0aGUgQnJvYWRjb20gV2lGaSBkcml2ZXIuIElzIGl0IHNpbXBseSBhIG5vdGlmaWNhdGlvbiBiYWNrIHRvIHRoZSB1cHBlciBsYXllcnMsIG9yIGlzIGl0IG1vcmUgY29tcGxleCB0aGFuIHRoYXQsIGhhbmRsaW5nIHRoaW5ncyBsaWtlIHNlY3VyaXR5IGtleSByZWZyZXNoIG9yIHVwZGF0aW5nIHRoZSBjb25uZWN0aW9uIHN0YXRlPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IGltcG9ydGFudCBzaWRlIGVmZmVjdHMgdGhpcyBmdW5jdGlvbiBoYXMgb24gZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEEgcXVpY2sgY2hlY2sgb2YgaXRzIGNhbGwgZ3JhcGggaXMgZGVmaW5pdGVseSBpbiBvcmRlciB0byBzZWUgd2hlcmUgaXQgc2l0cyBpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgYmUgcHJlc2VudCBoZXJlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSBsb2NraW5nIGlzc3VlcyBhbmQgYWNjZXNzIHRvIHNoYXJlZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2Jzc19yb2FtaW5nX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1MTA9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjUxMTpicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NTEyLVx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Njc1ND1icmNtZl9ub3RpZnlfcm9hbWluZ19zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc2My1cdFx0XHQgICAgIFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlc21lX3N0YXRlKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NDpcdFx0XHRicmNtZl9ic3Nfcm9hbWluZ19kb25lKGNmZywgaWZwLVx1MDAzZW5kZXYsIGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc2NS1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzMKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQnJvYWRjb20gV2ktRmkgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQnJvYWRjb20mIzM5O3MgZmVhdHVyZXMgYXJlIGluaXRpYWxpemVkIGFuZCBhdHRhY2hlZCB3aXRoaW4gdGhlaXIgd2lyZWxlc3MgZHJpdmVyLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdGhhdCBpcyB0aGUgYGJyY21mX2ZlYXRfYXR0YWNoYCBmdW5jdGlvbi4gU28sIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uIGFuZCBzZXR1cCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBoYW5kc2hha2UgYmV0d2VlbiB0aGUgZmlybXdhcmUgYW5kIHRoZSBkcml2ZXIgdGFrZXMgcGxhY2UsIEkmIzM5O20gc3VyZSBvZiBpdC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBtYW5hZ2VkLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGNvbmZpZ3VyZSB0aG9zZSBmZWF0dXJlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgc3RhcnQgd29ya2luZyBvdXR3YXJkcyBpbnRvIHRoZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2Z3Y2FwX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0zMj1zdHJ1Y3QgYnJjbWZfZmVhdF9md2NhcCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0zOC1cdHsgQlJDTUZfRkVBVF9NQlNTLCBcJiMzNDttYnNzXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0yMzA9c3RhdGljIHZvaWQgYnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXMoc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yNDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jOjI0NTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYnJjbWZfZndjYXBfbWFwKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ2Olx0XHRpZiAoc3RybnN0cihjYXBzLCBicmNtZl9md2NhcF9tYXBbaV0uZndjYXBfaWQsIHNpemVvZihjYXBzKSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ3Olx0XHRcdGlkID0gYnJjbWZfZndjYXBfbWFwW2ldLmZlYXR1cmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTI0OC1cdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7ZW5hYmxpbmcgZmVhdHVyZTogJXNcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjYwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgUE1LIE1hbmFnZW1lbnQgaW4gbmw4MDIxMS5jKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgYWdhaW4uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IFBNS3MgKFBhaXJ3aXNlIE1hc3RlciBLZXlzKSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExYCBzdWJzeXN0ZW0uIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYW5kIGRlbGV0aW5nIHRoZXNlIGtleXMg4oCTIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIEkgbmVlZCB0byByZXZpZXcgYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgIGZ1bmN0aW9ucyBpbiB0aGF0IHNvdXJjZSBmaWxlLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIGFuYWx5emUgaG93IHRoZSBQTUsgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0aW9uIG9yIG5ldHdvcmssIGFuZCB3aGF0IGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlIGZvciBzZWN1cml0eSwgcmV2b2NhdGlvbiwgYW5kIGFsbCB0aGF0IGZ1biBzdHVmZiB0aGF0JiMzOTtzIGNyaXRpY2FsIGluIGEgV2ktRmkgZW52aXJvbm1lbnQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODQzMDpcdFxuMTg0MzE6XHRcdHJldHVybiByZGV2X3NldF9tdWx0aWNhc3RfdG9fdW5pY2FzdChyZGV2LCBkZXYsIGVuYWJsZWQpO1xuMTg0MzI6XHR9XG4xODQzMzpcdFxuMTg0MzQ6XHRzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg0MzU6XHR7XG4xODQzNjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4NDM3Olx0XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbjE4NDM4Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4NDM5Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODQ0MDpcdFx0c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHBta19jb25mID0ge307XG4xODQ0MTpcdFxuMTg0NDI6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuMTg0NDM6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuMTg0NDQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg0NDU6XHRcbjE4NDQ2Olx0XHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuMTg0NDc6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgXHUwMDI2XHUwMDI2XG4xODQ0ODpcdFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbjE4NDQ5Olx0XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcbjE4NDUwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4NDUxOlx0XG4xODQ1MjpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8ICFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKVxuMTg0NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODQ1NDpcdFxuMTg0NTU6XHRcdGlmICghd2Rldi1cdTAwM2Vjb25uZWN0ZWQpXG4xODQ1NjpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTg0NTc6XHRcbjE4NDU4Olx0XHRwbWtfY29uZi5hYSA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuMTg0NTk6XHRcdGlmIChtZW1jbXAocG1rX2NvbmYuYWEsIHdkZXYtXHUwMDNldS5jbGllbnQuY29ubmVjdGVkX2FkZHIsIEVUSF9BTEVOKSlcbjE4NDYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg0NjE6XHRcbjE4NDYyOlx0XHRwbWtfY29uZi5wbWsgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKTtcbjE4NDYzOlx0XHRwbWtfY29uZi5wbWtfbGVuID0gbmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKTtcbjE4NDY0Olx0XHRpZiAocG1rX2NvbmYucG1rX2xlbiAhPSBXTEFOX1BNS19MRU4gXHUwMDI2XHUwMDI2XG4xODQ2NTpcdFx0ICAgIHBta19jb25mLnBta19sZW4gIT0gV0xBTl9QTUtfTEVOX1NVSVRFX0JfMTkyKVxuMTg0NjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODQ2NzpcdFxuMTg0Njg6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtSMF9OQU1FXSlcbjE4NDY5Olx0XHRcdHBta19jb25mLnBta19yMF9uYW1lID1cbjE4NDcwOlx0XHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LUjBfTkFNRV0pO1xuMTg0NzE6XHRcbjE4NDcyOlx0XHRyZXR1cm4gcmRldl9zZXRfcG1rKHJkZXYsIGRldiwgXHUwMDI2cG1rX2NvbmYpO1xuMTg0NzM6XHR9XG4xODQ3NDpcdFxuMTg0NzU6XHRzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg0NzY6XHR7XG4xODQ3NzpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4NDc4Olx0XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbjE4NDc5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4NDgwOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODQ4MTpcdFx0Y29uc3QgdTggKmFhO1xuMTg0ODI6XHRcbjE4NDgzOlx0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjZcbjE4NDg0Olx0XHQgICAgd2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcbjE4NDg1Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4NDg2Olx0XG4xODQ4NzpcdFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbjE4NDg4Olx0XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFx1MDAyNlx1MDAyNlxuMTg0ODk6XHRcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4xODQ5MDpcdFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXG4xODQ5MTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODQ5MjpcdFxuMTg0OTM6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcbjE4NDk0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg0OTU6XHRcbjE4NDk2Olx0XHRhYSA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuMTg0OTc6XHRcdHJldHVybiByZGV2X2RlbF9wbWsocmRldiwgZGV2LCBhYSk7XG4xODQ5ODpcdH1cbjE4NDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDAxCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBXaXJlbGVzcyBGYXN0IFJvYW0gT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQ0ZHODAyMTFgIGlzIGVzc2VudGlhbCwgbmF0dXJhbGx5LCBhcyBpdCYjMzk7cyB0aGUgY29yZSA4MDIuMTEgd2lyZWxlc3Mgc3VwcG9ydCBhbmQgY3J1Y2lhbCBmb3IgYG5sODAyMTEuY2AuIFRoZW4gd2UgaGF2ZSBgQlJDTUZNQUNgIGZvciB0aGUgQnJvYWRjb20gRnVsbE1BQyBkcml2ZXIgYW5kIGBCUkNNRk1BQ19VU0JgIGZvciB0aGUgVVNCIHZhcmlhbnQuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBDRkc4MDIxMWAgZGVwZW5kcyBvbiBgTkVUYCBhbmQgYFdJUkVMRVNTYCDigJMgeWVwLCB0aGF0IGFsaWducyB3aXRoIGV4cGVjdGF0aW9ucy4KCkxvb2tpbmcgaW50byBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGNvbmZpcm1zIGBDRkc4MDIxMWAgZGVwZW5kcyBvbiBgUkZLSUxMYCAob3IgaXRzIGludmVyc2UpIGFuZCBzZWxlY3RzIGBGV19MT0FERVJgLCB3aGljaCBpcyBzdGFuZGFyZC4gYEJSQ01GTUFDYCBpbiB0dXJuIGRlcGVuZHMgb24gYENGRzgwMjExYCBhbmQgc2VsZWN0cyBgQlJDTVVUSUxgLCBtYWtlcyBzZW5zZS4gYEJSQ01GTUFDX1VTQmAgYnVpbGRzIG9uIGBCUkNNRk1BQ2AgYW5kIG5lZWRzIGVpdGhlciBgVVNCID0geWAgb3IgYFVTQiA9IEJSQ01GTUFDYCwgYW5kIHNlbGVjdHMgYEJSQ01GTUFDX1BST1RPX0JDRENgIGFuZCBgRldfTE9BREVSYC4gQWxyaWdodCwgYWxsIHRoZSBkZXBlbmRlbmNpZXMgY2hlY2sgb3V0LgoKTmV4dCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBJIHNlZSBgbmw4MDIxMV9zZXRfcG1rYCwgYG5sODAyMTFfZGVsX3Bta2AsIGBicmNtZl9zZXRfa2V5X21nbXRgLCBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAsIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYCwgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgLCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIGFuZCBgYnJjbWZfc2V0dXBfd2lwaHlgLiBZZXMsIHRoZXNlIGFyZSBhbGwgcXVpdGUgc3BlY2lmaWMgdG8gbmV0bGluaywgQnJvYWRjb20sIFBNSyBjb25maWd1cmF0aW9uLCBjb25uZWN0aW9uIGFuZCByb2FtaW5nIGhhbmRsaW5nIOKAkyB0aGVzZSBhcmUgY2VydGFpbmx5IGdvb2QgdGFyZ2V0cy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBldmVyeXRoaW5nIGJlZm9yZSBJIGNvbW1pdCB0aGlzIGFuYWx5c2lzLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IHRydWU7IHRoaXMgaXMgYSBjbGVhciBhcmVhIGZvciBmdXp6aW5nLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmYXN0IHJvYW0gb2ZmbG9hZCAoRkJUL09LQykgc3VwcG9ydCwgUE1LIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBzcGFubmluZyBuZXRsaW5rIChgbmw4MDIxMS5jYCkgYW5kIHRoZSBCcm9hZGNvbSBkcml2ZXIgKGBicmNtZm1hY2ApLiBJdCYjMzk7cyBtb2RpZnlpbmcgbmV0bGluayBwZXJtaXNzaW9uIGNoZWNrcyBpbiBrZXkgcGF0aHMsIGFkZGluZyBQTUtJRCBwYXJzaW5nLCBhbmQgYWx0ZXJpbmcgYXV0aG9yaXphdGlvbiBsb2dpYyBkdXJpbmcgY29ubmVjdGlvbnMgYW5kIHJvYW1pbmcuIEFsc28gdGhlcmUgYXJlIGBXQVJOX09OYCBhc3NlcnRpb25zIGluIGtleSBtYW5hZ2VtZW50IGFuZCBQTUsgc2V0dGluZyBwYXRocy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChgTkw4MDIxMWApIGFuZCB2aXJ0dWFsIHdpcmVsZXNzL1VTQiBpbnRlcmZhY2VzLgoKVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdDogYFsmIzM0O0NGRzgwMjExJiMzNDssICYjMzQ7QlJDTUZNQUMmIzM0OywgJiMzNDtCUkNNRk1BQ19VU0ImIzM0O11gLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHdoYXQgSSBpZGVudGlmaWVkOiBgWyYjMzQ7bmw4MDIxMV9zZXRfcG1rJiMzNDssICYjMzQ7bmw4MDIxMV9kZWxfcG1rJiMzNDssICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssICYjMzQ7YnJjbWZfY2ZnODAyMTFfY29ubmVjdCYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWsmIzM0OywgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssICYjMzQ7YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZSYjMzQ7LCAmIzM0O2JyY21mX3NldHVwX3dpcGh5JiMzNDtdYC4KCkkmIzM5O3ZlIGNoZWNrZWQgb3ZlciB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzIG9uZSBsYXN0IHRpbWUuIFRoZXJlIGRvbiYjMzk7dCBzZWVtIHRvIGJlIGFueSBvdGhlciBpbW1lZGlhdGUgcmVkIGZsYWdzLiBJdCBhbGwgbG9va3MgY29tcHJlaGVuc2l2ZSBhbmQgd2VsbC1kZWZpbmVkLiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0dXBfd2lwaHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9wbWsmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3BtayYjMzQ7LAogICAgJiMzNDticmNtZl9ic3Nfcm9hbWluZ19kb25lJiMzNDssCiAgICAmIzM0O2JyY21mX2Jzc19jb25uZWN0X2RvbmUmIzM0OywKICAgICYjMzQ7YnJjbWZfc2V0dXBfd2lwaHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cblxuS2V5IG9ic2VydmF0aW9ucyByZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXG4zLiBUaGUgbmV3IElFIHBhcnNpbmcgZnVuY3Rpb24gYGJyY21mX2hhc19wbWtpZGAgb3BlcmF0ZXMgd2l0aCBsZW5ndGggYW5kIG9mZnNldCBib3VuZHMgY2hlY2tzIG9uIGluY29taW5nIElFIGJ5dGUgYXJyYXlzOyBhbnkgb3V0LW9mLWJvdW5kcyByZWFkaW5nIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxuXG5CZWNhdXNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOGExOGQ2ODYwYjdkZTRiNWFkMTczYzZiMTAyYmIyODdmZmUwZTcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6MzY6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCmluZGV4IDg3MmM0ODgwNmQwOTEuLjUxOWRlOTZiMDQyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCkBAIC0yMTEyLDkgJiM0MzsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC0mZ3Q7ZHJ2cjsKIAlzMzIgdmFsOwogCXMzMiBlcnI7CiYjNDM7CXMzMiBva2NfZW5hYmxlOwogCWNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTsKIAljb25zdCB1OCAqaWU7CiAJdTMyIGllX2xlbjsKJiM0MzsJYm9vbCBmd3N1cF9yb2FtOwogCXUzMiBvZmZzZXQ7CiAJdTE2IHJzbl9jYXA7CiAJdTMyIG1mcDsKQEAgLTIxMjIsNiAmIzQzOzIxMjQsOSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCiAJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FOwogCXByb2ZpbGUtJmd0O2lzX2Z0ID0gZmFsc2U7CiYjNDM7CXByb2ZpbGUtJmd0O2lzX29rYyA9IGZhbHNlOwomIzQzOwlmd3N1cF9yb2FtID0gYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8CiYjNDM7CQkgICAgIGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfT0tDKTsKIAogCWlmICghc21lLSZndDtjcnlwdG8ubl9ha21fc3VpdGVzKQogCQlyZXR1cm4gMDsKQEAgLTIxMzgsNiAmIzQzOzIxNDMsOCBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogCQkJdmFsID0gV1BBX0FVVEhfVU5TUEVDSUZJRUQ7CiAJCQlpZiAoc21lLSZndDt3YW50XzF4KQogCQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7CiYjNDM7CQkJZWxzZSBpZiAoZndzdXBfcm9hbSkKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOgogCQkJdmFsID0gV1BBX0FVVEhfUFNLOwpAQCAtMjE1MywxMSAmIzQzOzIxNjAsMTUgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIAkJCXZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDsKIAkJCWlmIChzbWUtJmd0O3dhbnRfMXgpCiAJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDsKJiM0MzsJCQllbHNlIGlmIChmd3N1cF9yb2FtKQomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FLTV9TVUlURV84MDIxWF9TSEEyNTY6CiAJCQl2YWwgPSBXUEEyX0FVVEhfMVhfU0hBMjU2OwogCQkJaWYgKHNtZS0mZ3Q7d2FudF8xeCkKIAkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX1BTS19TSEEyNTY6CiAJCQl2YWwgPSBXUEEyX0FVVEhfUFNLX1NIQTI1NjsKQEAgLTIxNzAsMTAgJiM0MzsyMTgxLDE2IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJCQlwcm9maWxlLSZndDtpc19mdCA9IHRydWU7CiAJCQlpZiAoc21lLSZndDt3YW50XzF4KQogCQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7CiYjNDM7CQkJZWxzZSBpZiAoZndzdXBfcm9hbSkKJiM0MzsJCQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9BS01fU1VJVEVfRlRfUFNLOgogCQkJdmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDsKIAkJCXByb2ZpbGUtJmd0O2lzX2Z0ID0gdHJ1ZTsKJiM0MzsJCQlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLOwomIzQzOwkJCWVsc2UgaWYgKGZ3c3VwX3JvYW0pCiYjNDM7CQkJCXByb2ZpbGUtJmd0O3VzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6CiAJCQl2YWwgPSBXRkFfQVVUSF9EUFA7CkBAIC0yMjA0LDggJiM0MzsyMjIxLDIyIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAKIAlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpCiAJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIDFYIG9mZmxvYWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8CiYjNDM7CSAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSB7CiYjNDM7CQllcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCAmIzM0O29rY19lbmFibGUmIzM0OywKJiM0MzsJCQkJCSAgICAgICAmYW1wO29rY19lbmFibGUpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWJwaHlfZXJyKGRydnIsICYjMzQ7Z2V0IG9rY19lbmFibGUgZmFpbGVkICglZClcbiYjMzQ7LCBlcnIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicmNtZl9kYmcoSU5GTywgJiMzNDtva2NfZW5hYmxlICglZClcbiYjMzQ7LCBva2NfZW5hYmxlKTsKJiM0MzsJCQlwcm9maWxlLSZndDtpc19va2MgPSBva2NfZW5hYmxlOwomIzQzOwkJfQomIzQzOwl9CiAJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkKIAkJYnJjbWZfZGJnKElORk8sICYjMzQ7dXNpbmcgU0FFIG9mZmxvYWRcbiYjMzQ7KTsKJiM0MzsJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pCiYjNDM7CQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyByb2FtaW5nIG9mZmxvYWRcbiYjMzQ7KTsKIAogCWlmICghYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NRlApKQogCQlnb3RvIHNraXBfbWZwX2NvbmZpZzsKQEAgLTI0OTQsMTMgJiM0MzsyNTI1LDE0IEBAIGJyY21mX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAKIAkJaWYgKHNtZS0mZ3Q7Y3J5cHRvLnBzayAmYW1wOyZhbXA7ICFpc19zYWVfYWttICZhbXA7JmFtcDsKIAkJICAgIHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkgewotCQkJaWYgKFdBUk5fT04ocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9Ci0JCQkJICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHsKJiM0MzsJCQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkgewomIzQzOwkJCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxuJiMzNDspOwomIzQzOwkJCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKJiM0MzsJCQl9IGVsc2UgaWYgKFdBUk5fT04ocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9CiYjNDM7CQkJCQkgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSykpIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIFBTSyBvZmZsb2FkXG4mIzM0Oyk7Ci0JCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKIAkJfQogCQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkgewogCQkJLyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovCkBAIC01OTUzLDE3ICYjNDM7NTk4NSwyOSBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NldF9wbWsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiAqY29uZikKIHsKIAlzdHJ1Y3QgYnJjbWZfaWYgKmlmcDsKJiM0MzsJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKJiM0MzsJaW50IHJldDsKIAogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtlbnRlclxuJiMzNDspOwogCi0JLyogZXhwZWN0IHVzaW5nIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIDFYICovCiAJaWZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoV0FSTl9PTihpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCkpCiYjNDM7CWRydnIgPSBpZnAtJmd0O2RydnI7CiYjNDM7CWlmIChXQVJOX09OKGlmcC0mZ3Q7dmlmLSZndDtwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaWZwLSZndDt2aWYtJmd0O3Byb2ZpbGUuaXNfZnQgJmFtcDsmYW1wOwomIzQzOwkJICAgICFpZnAtJmd0O3ZpZi0mZ3Q7cHJvZmlsZS5pc19va2MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb25mLSZndDtwbWtfbGVuICZndDsgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTikKIAkJcmV0dXJuIC1FUkFOR0U7CiAKJiM0MzsJaWYgKGlmcC0mZ3Q7dmlmLSZndDtwcm9maWxlLmlzX29rYykgewomIzQzOwkJcmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDtva2NfaW5mb19wbWsmIzM0OywKJiM0MzsJCQkJCSAgICAgICBjb25mLSZndDtwbWssIGNvbmYtJmd0O3Bta19sZW4pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtva2NfaW5mb19wbWsgaW92YXIgZmFpbGVkOiByZXQ9JWRcbiYjMzQ7LAomIzQzOwkJCQkgcmV0KTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBicmNtZl9zZXRfcG1rKGlmcCwgY29uZi0mZ3Q7cG1rLCBjb25mLSZndDtwbWtfbGVuKTsKIH0KIApAQCAtNjQyMiw2ICYjNDM7NjQ2Niw0NyBAQCBzdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTsKJiM0MzsJY29uc3QgdTggKmllOwomIzQzOwl1MzIgaWVfbGVuOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MTYgY291bnQ7CiYjNDM7CiYjNDM7CWlmICghcGFyc2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJzbl9pZSA9IGJyY21mX3BhcnNlX3RsdnMocGFyc2UsIGxlbiwgV0xBTl9FSURfUlNOKTsKJiM0MzsJaWYgKCFyc25faWUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWllID0gKGNvbnN0IHU4ICopcnNuX2llOwomIzQzOwlpZV9sZW4gPSByc25faWUtJmd0O2xlbiAmIzQzOyBUTFZfSERSX0xFTjsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gVExWX0hEUl9MRU4gJiM0MzsgV1BBX0lFX1ZFUlNJT05fTEVOICYjNDM7IFdQQV9JRV9NSU5fT1VJX0xFTjsKJiM0MzsJaWYgKG9mZnNldCAmIzQzOyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICZndDs9IGllX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CW9mZnNldCAmIzQzOz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmIzQzOyBjb3VudCAqIFdQQV9JRV9NSU5fT1VJX0xFTjsKJiM0MzsJaWYgKG9mZnNldCAmIzQzOyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICZndDs9IGllX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CW9mZnNldCAmIzQzOz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiAmIzQzOyBjb3VudCAqIFdQQV9JRV9NSU5fT1VJX0xFTjsKJiM0MzsJaWYgKG9mZnNldCAmIzQzOyBSU05fQ0FQX0xFTiAmZ3Q7PSBpZV9sZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9mZnNldCAmIzQzOz0gUlNOX0NBUF9MRU47CiYjNDM7CWlmIChvZmZzZXQgJiM0MzsgUlNOX1BNS0lEX0NPVU5UX0xFTiAmZ3Q7IGllX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY291bnQgPSBpZVtvZmZzZXRdICYjNDM7IChpZVtvZmZzZXQgJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudCAmZ3Q7IDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHMzMgogYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCkBAIC02NDM2LDYgJiM0Mzs2NTIxLDcgQEAgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCXN0cnVjdCBicmNtZl9ic3NfaW5mb19sZSAqYmk7CiAJc3RydWN0IGJyY211X2NoYW4gY2g7CiAJc3RydWN0IGNmZzgwMjExX3JvYW1faW5mbyByb2FtX2luZm8gPSB7fTsKJiM0MzsJYm9vbCBhdXRob3JpemVkID0gZmFsc2U7CiAJdTMyIGZyZXE7CiAJczMyIGVyciA9IDA7CiAJdTggKmJ1ZjsKQEAgLTY0ODIsMTQgJiM0Mzs2NTY4LDE4IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAlyb2FtX2luZm8ucmVzcF9pZSA9IGNvbm5faW5mby0mZ3Q7cmVzcF9pZTsKIAlyb2FtX2luZm8ucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tJmd0O3Jlc3BfaWVfbGVuOwogCiYjNDM7CWlmICgocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHwKJiM0MzsJICAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoYnJjbWZfaGFzX3Bta2lkKHJvYW1faW5mby5yZXFfaWUsIHJvYW1faW5mby5yZXFfaWVfbGVuKSB8fAomIzQzOwkgICAgIHByb2ZpbGUtJmd0O2lzX2Z0IHx8IHByb2ZpbGUtJmd0O2lzX29rYykpCiYjNDM7CQlhdXRob3JpemVkID0gdHJ1ZTsKJiM0MzsKIAljZmc4MDIxMV9yb2FtZWQobmRldiwgJmFtcDtyb2FtX2luZm8sIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoYXV0aG9yaXplZCkKJiM0MzsJCWNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLSZndDtic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJCSBHRlBfS0VSTkVMKTsKIAlicmNtZl9kYmcoQ09OTiwgJiMzNDtSZXBvcnQgcm9hbWluZyByZXN1bHRcbiYjMzQ7KTsKIAotCWlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCAmYW1wOyZhbXA7IHByb2ZpbGUtJmd0O2lzX2Z0KSB7Ci0JCWNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLSZndDtic3NpZCwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7Ci0JCWJyY21mX2RiZyhDT05OLCAmIzM0O1JlcG9ydCBwb3J0IGF1dGhvcml6ZWRcbiYjMzQ7KTsKLQl9Ci0KIAlzZXRfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQ09OTkVDVEVELCAmYW1wO2lmcC0mZ3Q7dmlmLSZndDtzbWVfc3RhdGUpOwogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtFeGl0XG4mIzM0Oyk7CiAJcmV0dXJuIGVycjsKQEAgLTY1MDQsNiAmIzQzOzY1OTQsNyBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsCiAJc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSAmYW1wO2lmcC0mZ3Q7dmlmLSZndDtwcm9maWxlOwogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7CiAJc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7CiYjNDM7CWJvb2wgYXV0aG9yaXplZDsKIAogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtFbnRlclxuJiMzNDspOwogCkBAIC02NTI4LDcgJiM0Mzs2NjE5LDE1IEBAIGJyY21mX2Jzc19jb25uZWN0X2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAkJY29ubl9wYXJhbXMucmVxX2llX2xlbiA9IGNvbm5faW5mby0mZ3Q7cmVxX2llX2xlbjsKIAkJY29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby0mZ3Q7cmVzcF9pZTsKIAkJY29ubl9wYXJhbXMucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tJmd0O3Jlc3BfaWVfbGVuOwomIzQzOwkJYXV0aG9yaXplZCA9IGNvbXBsZXRlZCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHwKJiM0MzsJCQkgICAgICBwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLAomIzQzOwkJCQkJICAgICBjb25uX3BhcmFtcy5yZXFfaWVfbGVuKTsKIAkJY2ZnODAyMTFfY29ubmVjdF9kb25lKG5kZXYsICZhbXA7Y29ubl9wYXJhbXMsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKGF1dGhvcml6ZWQpCiYjNDM7CQkJY2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtJmd0O2Jzc2lkLCBOVUxMLCAwLAomIzQzOwkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJYnJjbWZfZGJnKENPTk4sICYjMzQ7UmVwb3J0IGNvbm5lY3QgcmVzdWx0IC0gY29ubmVjdGlvbiAlc1xuJiMzNDssCiAJCQkgIGNvbXBsZXRlZCA/ICYjMzQ7c3VjY2VlZGVkJiMzNDsgOiAmIzM0O2ZhaWxlZCYjMzQ7KTsKIAl9CkBAIC03NzMxLDYgJiM0Mzs3ODMwLDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfc2V0dXBfd2lwaHkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGJyY21mX2lmICppZnApCiAJfQogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1NBRV9FWFQpKQogCQl3aXBoeS0mZ3Q7ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX1NBRTsKJiM0MzsJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fAomIzQzOwkgICAgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9PS0MpKQomIzQzOwkJd2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LAomIzQzOwkJCQkgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKTsKIAl3aXBoeS0mZ3Q7bWdtdF9zdHlwZXMgPSBicmNtZl90eHJ4X3N0eXBlczsKIAl3aXBoeS0mZ3Q7bWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDsKIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTk8pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oCmluZGV4IDYzZTUzNDUyM2Y1MTguLjFhYTk5MzkwYTk1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oCkBAIC0xMjcsNyAmIzQzOzEyNyw4IEBAIGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB7CiAJQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FLAogCUJSQ01GX1BST0ZJTEVfRldTVVBfUFNLLAogCUJSQ01GX1BST0ZJTEVfRldTVVBfMVgsCi0JQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUKJiM0MzsJQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUsCiYjNDM7CUJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTQogfTsKIAogLyoqCkBAIC0xNjQsNiAmIzQzOzE2NSw3IEBAIGVudW0gYnJjbWZfbWdtdF90eF9zdGF0dXMgewogICogQGJzc2lkOiBic3NpZCBvZiBqb2luZWQvam9pbmluZyBpYnNzLgogICogQHNlYzogc2VjdXJpdHkgaW5mb3JtYXRpb24uCiAgKiBAa2V5OiBrZXkgaW5mb3JtYXRpb24KJiM0MzsgKiBAaXNfb2tjOiBPS0MgaXMgdXNlZCBmb3IgY3VycmVudCBjb25uZWN0aW9uLgogICovCiBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwpAQCAtMTcyLDYgJiM0MzsxNzQsNyBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7CiAJZW51bSBicmNtZl9wcm9maWxlX2Z3c3VwIHVzZV9md3N1cDsKIAl1MTYgdXNlX2Z3YXV0aDsKIAlib29sIGlzX2Z0OwomIzQzOwlib29sIGlzX29rYzsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMKaW5kZXggNDg4MzY0ZWY4ZmYyYS4uY2MxOWU1ZTdlYmY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jCkBAIC00NSw2ICYjNDM7NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7CiAJeyBCUkNNRl9GRUFUX1NBRSwgJiMzNDtzYWUgJiMzNDsgfSwKIAl7IEJSQ01GX0ZFQVRfRldBVVRILCAmIzM0O2lkYXV0aCYjMzQ7IH0sCiAJeyBCUkNNRl9GRUFUX1NBRV9FWFQsICYjMzQ7c2FlX2V4dCYjMzQ7IH0sCiYjNDM7CXsgQlJDTUZfRkVBVF9GQlQsICYjMzQ7ZmJ0ICYjMzQ7IH0sCiYjNDM7CXsgQlJDTUZfRkVBVF9PS0MsICYjMzQ7b2tjJiMzNDsgfSwKIH07CiAKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgKaW5kZXggMzFmODY5NWNhNDE3Ni4uODE2NWEyODZiNjMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oCkBAIC01OSw3ICYjNDM7NTksOSBAQAogCUJSQ01GX0ZFQVRfREVGKFNDQU5fVjIpIFwKIAlCUkNNRl9GRUFUX0RFRihQTUtJRF9WMikgXAogCUJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcCi0JQlJDTUZfRkVBVF9ERUYoU0FFX0VYVCkKJiM0MzsJQlJDTUZfRkVBVF9ERUYoU0FFX0VYVCkgXAomIzQzOwlCUkNNRl9GRUFUX0RFRihGQlQpIFwKJiM0MzsJQlJDTUZfRkVBVF9ERUYoT0tDKQogCiAvKgogICogUXVpcmtzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKaW5kZXggMDIwMzg3ZDc2NDEyMi4uOTIwZDVlMmQ5OTY2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCkBAIC03MTEwLDYgJiM0Mzs3MTEwLDEwIEBAIGVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHsKICAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQOiBEcml2ZXIgc3VwcG9ydHMgcHJvYmluZyB0aGUgYXNzb2NpYXRlZCBBUAogICoJaW4gU1RBIG1vZGUgdXNpbmcgQE5MODAyMTFfQ01EX1BST0JFX1BFRVIuCiAgKgomIzQzOyAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEOiBEcml2ZXIgc3VwcG9ydHMgZmFzdCByb2FtaW5nCiYjNDM7ICoJb2ZmbG9hZCBpbiBzdGF0aW9uIG1vZGUsIGluY2x1ZGluZyBGYXN0IFRyYW5zaXRpb24gb3IgT3Bwb3J0dW5pc3RpYwomIzQzOyAqCUtleSBDYWNoaW5nLgomIzQzOyAqCiAgKiBATlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBudW1iZXIgb2YgZXh0ZW5kZWQgZmVhdHVyZXMuCiAgKiBATUFYX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBoaWdoZXN0IGV4dGVuZGVkIGZlYXR1cmUgaW5kZXguCiAgKi8KQEAgLTcxOTIsNiAmIzQzOzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXggewogCU5MODAyMTFfRVhUX0ZFQVRVUkVfUk9DX0FERFJfRklMVEVSLAogCU5MODAyMTFfRVhUX0ZFQVRVUkVfU0VUX0tFWV9MVEZfU0VFRCwKIAlOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLAomIzQzOwlOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FELAogCiAJLyogYWRkIG5ldyBmZWF0dXJlcyBiZWZvcmUgdGhlIGRlZmluaXRpb24gYmVsb3cgKi8KIAlOVU1fTkw4MDIxMV9FWFRfRkVBVFVSRVMsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA0NGYyYmFkMDg2NzA1Li5lNDg1MDEyOWE1ODJiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTE4NDM0LDYgJiM0MzsxODQzNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXBoeSAqd2lwaHkgPSAmYW1wO3JkZXYtJmd0O3dpcGh5OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LSZndDtpZWVlODAyMTFfcHRyOwogCXN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9OwpAQCAtMTg0NDIsNyAmIzQzOzE4NDQzLDkgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkgICAgd2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoJmFtcDtyZGV2LSZndDt3aXBoeSwKJiM0MzsJaWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSwKJiM0MzsJCQkJICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksCiAJCQkJICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtMTg0NzIsNiAmIzQzOzE4NDc1LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXBoeSAqd2lwaHkgPSAmYW1wO3JkZXYtJmd0O3dpcGh5OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LSZndDtpZWVlODAyMTFfcHRyOwogCWNvbnN0IHU4ICphYTsKQEAgLTE4NDgwLDcgJiM0MzsxODQ4NCw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJICAgIHdkZXYtJmd0O2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksCiYjNDM7CWlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LAogCQkJCSAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gQnJvYWRjb20gV2lGaSBEcml2ZXIgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGluIGFkZGl0aW9uIHRvIG91ciBzdGFuZGFyZCBLQVNBTiBlZmZvcnRzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgY291bGQgZXhwb3NlIHNvbWUgaW50ZXJlc3RpbmcgbWVtb3J5IGlzc3VlcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZSBjaGFuZ2VzIHRvIHJvYW1pbmcgYW5kIGtleSBtYW5hZ2VtZW50LgoKRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBva2NfZW5hYmxlYCB2YXJpYWJsZSwgZXZlbiBhcyBhIHN0YWNrLWFsbG9jYXRlZCBsb2NhbCwgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgZmxvdyBzZWVtcyB0byBpbnZvbHZlIHJldHJpZXZpbmcgYW4gaW50ZWdlciB2YWx1ZSBmb3IgYG9rY19lbmFibGVgIGZyb20gc29tZXdoZXJlIHRocm91Z2ggYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAuIFRoaXMgaW50ZWdlciB0aGVuIGRpcmVjdGx5IHNldHMgYHByb2ZpbGUtJmd0O2lzX29rY2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaW50ZWdlciBjb21lcyBmcm9tIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZC4gV2UgY2FuIHVzZSBgYnBmdHJhY2VgIG9yIHNpbWlsYXIgdG8gaW5zdHJ1bWVudCB0aGlzIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBjb2RlIGlzIG1vZGlmeWluZyBhIG1lbWJlciBvZiB0aGUgcHJvZmlsZSBzdHJ1Y3QgYmFzZWQgb24gYSBjb25maWd1cmF0aW9uIGludGVnZXIgYWRkcyBhIHBvdGVudGlhbCBmb3IgbWlzY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBrZXkgbWFuYWdlbWVudC4KClRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIHdoaWNoIG1vZGlmeSBob3cgYHByb2ZpbGUtJmd0O3VzZV9md3N1cGAgaXMgaGFuZGxlZCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGNoZWNrcyBvbiBib3RoIGBpc19mdGAgYW5kIGBpc19va2NgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYC4gVGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYCBiYXNlZCBvbiBgaXNfb2tjYCBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0OyB3ZSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaGFwcGVucyB3aGVuIHRoaXMgJiMzNDtva2NfaW5mb19wbWsmIzM0OyBpb3ZhciBpcyBzZXQuCgpUaGUgbmV3IGBicmNtZl9oYXNfcG1raWRgIGZ1bmN0aW9uLCBwYXJzaW5nIFRMVnMgZnJvbSB0aGUgUlNOIElFLCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVExWIHBhcnNpbmcgaXMgbm90b3Jpb3VzbHkgcHJvbmUgdG8gb2ZmLWJ5LW9uZSBlcnJvcnMgYW5kIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIG9mZnNldCBjYWxjdWxhdGlvbnMgdmVyeSBjYXJlZnVsbHkuIFRoaXMgaXMgYSBjbGFzc2ljIGFyZWEgd2hlcmUgS01TQU4gY2FuIHNoaW5lLiBXZSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIGNhcmVmdWxseSB1c2luZyBgYnBmdHJhY2VgLgoKVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIHBhcnRpY3VsYXJseSB0aGUgYXV0aG9yaXphdGlvbiBjaGVja3MgYW5kIGNhbGxzIHRvIGBjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWRgLCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgY2FuIGJlIHN1c2NlcHRpYmxlIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvcnJlY3Qgc3RhdGUgaGFuZGxpbmcuCgpGaW5hbGx5LCB0aGUgZW5hYmxpbmcgb2YgYE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQURgIGluIGBicmNtZl9zZXR1cF93aXBoeWAgYW5kIHRoZSBzdXBwb3J0aW5nIGNoYW5nZXMgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIGluIGBubDgwMjExX3NldF9wbWtgIGFuZCBgbmw4MDIxMV9kZWxfcG1rYCBzdWdnZXN0IHRoYXQgZmFzdCByb2FtaW5nIGlzIGJlaW5nIGludGVncmF0ZWQuIFRoaXMgYWRkcyBjb21wbGV4aXR5IGFuZCwgcG90ZW50aWFsbHksIG1vcmUgYXR0YWNrIHN1cmZhY2UuIEFueSBjb2RlIGludm9sdmluZyBvZmZsb2FkIGFuZCBzZXR0aW5nIFBNS3MgaXMgYSByZWQgZmxhZy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaGVyZS4KCkluIHN1bW1hcnksIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zLCBtb2RpZnkgZXhpc3Rpbmcga2V5IG1hbmFnZW1lbnQgYW5kIHJvYW1pbmcgbG9naWMsIGFuZCBpbmNsdWRlIFRMViBwYXJzaW5nLiBUaGVzZSBhcmUgYWxsIGhpZ2gtcmlzayBhcmVhcyBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSYjMzk7bGwgbmVlZCB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlc2Uga2V5IGZ1bmN0aW9ucyBhbmQgbG9vayBmb3IgYW55IGNsdWVzLiBMZXQmIzM5O3MgZmlyZSB1cCB0aGUgdG9vbHMsIGRvdWJsZS1jaGVjayBhbGwgdGhvc2UgY2FsbHMsIGFuZCBzZWUgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQsIHdoaWNoIEkgc3Ryb25nbHkgc3VzcGVjdCBpdCB3aWxsIGJlLCBnaXZlbiB0aGlzIGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIxMDg9YnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMTMzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjEzNDpcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChuZXRkZXZfcHJpdihuZGV2KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIxMzUtXHRcdFx0XHQgICAgICAgXCYjMzQ7d3BhX2F1dGhcJiMzNDssIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjIyNi1cdCAgICBwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIyMjc6XHRcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsIFwmIzM0O29rY19lbmFibGVcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMjI4LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2b2tjX2VuYWJsZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjc2OT1icmNtZl9jZmc4MDIxMV9jb25maWdfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjc4My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI3ODQ6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI3ODUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjg0Mj1icmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjk0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI5NDY6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI5NDctXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjk2ND1icmNtZl9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjk4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI5ODY6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI5ODctXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MzAzOD1icmNtZl9jZmc4MDIxMV9yZWNvbmZpZ3VyZV93ZXAoc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMzA1OS1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjMwNjA6XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcJiMzNDt3c2VjXCYjMzQ7LCBcdTAwMjZ3c2VjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTMwNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaD0xNjE9c3RhdGljIGlubGluZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaDoxNjI6czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xNjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg9MTcyPXMzMiBicmNtZl9maWxfYnNzY2ZnX2ludF9xdWVyeShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmgtMTc2LVx0KmRhdGFfbGUgPSBjcHVfdG9fbGUzMigqZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjE3NzpcdHJldHVybiBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBuYW1lLCBkYXRhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmgtMTc4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmd2lsLmhgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRhcmdldGluZyBhcm91bmQgbGluZSAxNjEuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGRlZmluZWQgb3IgZG9jdW1lbnRlZCB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGZpcm13YXJlIGludGVyZmFjZSBsYXllciDigJMgaGVuY2UgdGhlIGZpbGUgbmFtZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIEkmIzM5O20gaG9waW5nIEkgY2FuIGdsZWFuIHNvbWUgaW5zaWdodHMgaW50byBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgQnJvYWRjb20gZmlybXdhcmUgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTU6XHR7XG4gMTU2Olx0XHRfX2xlMzIgZGF0YV9sZSA9IGNwdV90b19sZTMyKGRhdGEpO1xuIDE1NzpcdFxuIDE1ODpcdFx0cmV0dXJuIGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQoaWZwLCBuYW1lLCBcdTAwMjZkYXRhX2xlLFxuIDE1OTpcdFx0XHRcdFx0XHQgc2l6ZW9mKGRhdGFfbGUpKTtcbiAxNjA6XHR9XG4gMTYxOlx0c3RhdGljIGlubGluZVxuIDE2MjpcdHMzMiBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSlcbiAxNjM6XHR7XG4gMTY0Olx0XHRzMzIgZXJyO1xuIDE2NTpcdFxuIDE2NjpcdFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX2dldChpZnAsIG5hbWUsIGRhdGEsIHNpemVvZigqZGF0YSkpO1xuIDE2NzpcdFx0aWYgKGVyciA9PSAwKVxuIDE2ODpcdFx0XHQqZGF0YSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopZGF0YSk7XG4gMTY5Olx0XHRyZXR1cm4gZXJyO1xuIDE3MDpcdH1cbiAxNzE6XHRzdGF0aWMgaW5saW5lXG4gMTcyOlx0czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X3F1ZXJ5KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEpXG4gMTczOlx0e1xuIDE3NDpcdFx0X19sZTMyICpkYXRhX2xlID0gKF9fbGUzMiAqKWRhdGE7XG4gMTc1Olx0XG4gMTc2Olx0XHQqZGF0YV9sZSA9IGNwdV90b19sZTMyKCpkYXRhKTtcbiAxNzc6XHRcdHJldHVybiBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBuYW1lLCBkYXRhKTtcbiAxNzg6XHR9XG4gMTc5Olx0XG4gMTgwOlx0czMyIGJyY21mX2ZpbF94dGx2X2RhdGFfc2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MTYgaWQsXG4gMTgxOlx0XHRcdFx0ICAgIHZvaWQgKmRhdGEsIHUzMiBsZW4pO1xuIDE4MjpcdHMzMiBicmNtZl9maWxfeHRsdl9kYXRhX2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTE2IGlkLFxuIDE4MzpcdFx0XHRcdCAgICB2b2lkICpkYXRhLCB1MzIgbGVuKTtcbiAxODQ6XHRzdGF0aWMgaW5saW5lXG4gMTg1Olx0czMyIGJyY21mX2ZpbF94dGx2X2ludF9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBpZCxcbiAxODY6XHRcdFx0XHQgICB1MzIgZGF0YSlcbiAxODc6XHR7XG4gMTg4Olx0XHRfX2xlMzIgZGF0YV9sZSA9IGNwdV90b19sZTMyKGRhdGEpO1xuIDE4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2V5IE1hbmFnZW1lbnQgYW5kIFBNS0lEIEhhbmRsaW5nIGluIHRoZSBCcm9hZGNvbSBXaUZpIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gRmlyc3QsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgYnJjbWZfc2V0X2tleV9tZ210YC4gVGhlIGNvZGUgY2hlY2tzIGlmIHdlJiMzOTtyZSB1c2luZyBmaXJtd2FyZS1zdXBwb3J0ZWQga2V5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgQlJDTUZfUFJPRklMRV9GV1NVUF8xWGAgb3IgYEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTWAuIElmIHNvLCBpdCB0cmllcyB0byByZWFkIGBva2NfZW5hYmxlYCB1c2luZyBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YC4gQSBub24temVybyBgZXJyYCBmcm9tIHRoYXQgZnVuY3Rpb24gbWVhbnMgdGhlIHJlYWQgZmFpbGVkLCBhbmQgYG9rY19lbmFibGVgIGlzbiYjMzk7dCB0b3VjaGVkLiBJZiBgZXJyYCBpcyB6ZXJvLCB0aGVuIGl0IGdyYWJzIHRoZSB2YWx1ZSB1c2luZyBgYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX2dldGAsIGFuZCB0aGVuIGNvbnZlcnRzIGl0IHRvIHRoZSBjb3JyZWN0IGJ5dGUgb3JkZXIuCgpOZXh0LCBJJiMzOTttIGV4YW1pbmluZyBgYnJjbWZfaGFzX3Bta2lkYC4gVGhpcyBmdW5jdGlvbiBzZWVtcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBQTUtJRCBpcyBwcmVzZW50IGluIGFuIFJTTiBJRS4gVGhlIGlucHV0IGBwYXJzZWAsIGFuZCBieSBleHRlbnNpb24gdGhlIGByc25faWVgIGJ1ZmZlciwgb3JpZ2luYXRlcyBmcm9tIGVpdGhlciBgcm9hbV9pbmZvLnJlcV9pZWAgb3IgYGNvbm5fcGFyYW1zLnJlcV9pZWAuCgpJJiMzOTttIGNhcmVmdWxseSB0cmFjaW5nIHRoZSBsb2dpYy4gRmlyc3QsIGl0IGNhbGxzIGBicmNtZl9wYXJzZV90bHZzYCB0byBmaW5kIHRoZSBSU04gSUUuIElmIHRoYXQgZmFpbHMsIHdlIHJldHVybiBlYXJseS4gVGhlbiwgaXQgcHJvY2VlZHMgd2l0aCB2YXJpb3VzIG9mZnNldCBjYWxjdWxhdGlvbnMgYW5kIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBSU04gSUUuIFNldmVyYWwgYm91bmRzIGNoZWNrcyBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIHRoZSB1c2Ugb2YgZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvIChgJmd0Oz1gKSB2ZXJzdXMgZ3JlYXRlci10aGFuIChgJmd0O2ApIGlzIGFuIGFyZWEgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIGFzIHRoYXQmIzM5O3MgYSBjb21tb24gc291cmNlIG9mIG9mZi1ieS1vbmUgZXJyb3JzLiBJdCYjMzk7cyBwYXJzaW5nIHRoZSBSU04gSUUgdG8gZ2V0IHZhcmlvdXMgY291bnRzIGFuZCBvZmZzZXRzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIHBhaXJ3aXNlIGNpcGhlcnMgYW5kIGdyb3VwIGNpcGhlcnMuIEZpbmFsbHksIGl0IGNoZWNrcyB0aGUgUE1LSUQgY291bnQuIEl0JiMzOTtzIHJldHVybmluZyB0cnVlIGlmIHRoZSBgY291bnRgIG9mIFBNS0lEcyBpcyBncmVhdGVyIHRoYW4gemVybywgaW5kaWNhdGluZyBhIFBNS0lEIGlzIHByZXNlbnQuIFRoZSBsb2dpYyBmbG93IGlzIHdlbGwtZGVmaW5lZCwgYW5kIHRoZSBidWZmZXIgb2Zmc2V0L3NpemUgY2FsY3VsYXRpb24gbG9va3MgcmVhc29uYWJsZSBzbyBmYXIsIGJ1dCBJIHdpbGwgd2FudCB0byB2ZXJpZnkgdGhvc2UgY2FsY3VsYXRpb25zIG15c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGFyc2VfdGx2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDIwOmJyY21mX3BhcnNlX3RsdnMoY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCB1aW50IGtleSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQyMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDY3PWJyY21mX2ZpbmRfd3BhaWUoY29uc3QgdTggKnBhcnNlLCB1MzIgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQ3MTpcdHdoaWxlICgoaWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NzItXHRcdGlmIChicmNtZl90bHZfaGFzX2llKChjb25zdCB1OCAqKWllLCBcdTAwMjZwYXJzZSwgXHUwMDI2bGVuLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ4MD1icmNtZl9maW5kX3dwc2llKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00ODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0ODQ6XHR3aGlsZSAoKGllID0gYnJjbWZfcGFyc2VfdGx2cyhwYXJzZSwgbGVuLCBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDg1LVx0XHRpZiAoYnJjbWZfdGx2X2hhc19pZSgodTggKilpZSwgXHUwMDI2cGFyc2UsIFx1MDAyNmxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMTA4PWJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjI0NS1cdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjI0NjpcdHJzbl9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKGNvbnN0IHU4ICopc21lLVx1MDAzZWllLCBzbWUtXHUwMDNlaWVfbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjI0Ny1cdFx0XHRcdCAgV0xBTl9FSURfUlNOKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yNDEyPWJyY21mX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjQ1Ni1cdFx0XHQvKiBmaW5kIHRoZSBSU05fSUUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI0NTc6XHRcdFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygoY29uc3QgdTggKilzbWUtXHUwMDNlaWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNDU4LVx0XHRcdFx0XHRcdCAgc21lLVx1MDAzZWllX2xlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTM1PWJyY21mX3BhcnNlX2NvbmZpZ3VyZV9zZWN1cml0eShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MTQzLVx0LyogZmluZCB0aGUgUlNOX0lFICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1MTQ0Olx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygodTggKilzZXR0aW5ncy1cdTAwM2ViZWFjb24udGFpbCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUxNDUtXHRcdFx0XHQgIHNldHRpbmdzLVx1MDAzZWJlYWNvbi50YWlsX2xlbiwgV0xBTl9FSURfUlNOKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTc3PWJyY21mX2NmZzgwMjExX3N0YXJ0X2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUyMTMtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTIxNDpcdFx0Y291bnRyeV9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKHU4ICopc2V0dGluZ3MtXHUwMDNlYmVhY29uLnRhaWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MjE1LVx0XHRcdFx0XHQgICAgICBzZXR0aW5ncy1cdTAwM2ViZWFjb24udGFpbF9sZW4sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTIyMy1cdFx0aWVfb2Zmc2V0ID0gRE9UMTFfTUdNVF9IRFJfTEVOICYjNDM7IERPVDExX0JDTl9QUkJfRklYRURfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTIyNDpcdFx0c3NpZF9pZSA9IGJyY21mX3BhcnNlX3RsdnMoXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MjI1LVx0XHRcdFx0KHU4ICopXHUwMDI2c2V0dGluZ3MtXHUwMDNlYmVhY29uLmhlYWRbaWVfb2Zmc2V0XSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02NDY5PXN0YXRpYyBib29sIGJyY21mX2hhc19wbWtpZChjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY0ODA6XHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NDgxLVx0aWYgKCFyc25faWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQzCgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGJyY21mX3BhcnNlX3RsdnNgIGluIGBjZmc4MDIxMS5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgYnJjbWZfcGFyc2VfdGx2c2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MTkgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jYC4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuYWx5emluZyByZWxhdGVkIHRvIGhvdyB0aGUgVExWcyBhcmUgYmVpbmcgcGFyc2VkLiBJdCBjb3VsZCBiZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggY2VydGFpbiBUTFYgdHlwZXMsIG9yIHBlcmhhcHMgSSYjMzk7bSBsb29raW5nIGF0IGEgc3BlY2lmaWMgYnVnIHJlcG9ydCBhbmQgdGhlIHJlbGV2YW50IGNvZGUuIFdoYXRldmVyIHRoZSByZWFzb24sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlc2UgVExWcyBhdCB0aGF0IHBvaW50IGluIGl0cyBleGVjdXRpb24gZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKlxuIDQyMDpcdGJyY21mX3BhcnNlX3RsdnMoY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCB1aW50IGtleSlcbiA0MjE6XHR7XG4gNDIyOlx0XHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICplbHQgPSBidWY7XG4gNDIzOlx0XHRpbnQgdG90bGVuID0gYnVmbGVuO1xuIDQyNDpcdFxuIDQyNTpcdFx0LyogZmluZCB0YWdnZWQgcGFyYW1ldGVyICovXG4gNDI2Olx0XHR3aGlsZSAodG90bGVuIFx1MDAzZT0gVExWX0hEUl9MRU4pIHtcbiA0Mjc6XHRcdFx0aW50IGxlbiA9IGVsdC1cdTAwM2VsZW47XG4gNDI4Olx0XG4gNDI5Olx0XHRcdC8qIHZhbGlkYXRlIHJlbWFpbmluZyB0b3RsZW4gKi9cbiA0MzA6XHRcdFx0aWYgKChlbHQtXHUwMDNlaWQgPT0ga2V5KSBcdTAwMjZcdTAwMjYgKHRvdGxlbiBcdTAwM2U9IChsZW4gJiM0MzsgVExWX0hEUl9MRU4pKSlcbiA0MzE6XHRcdFx0XHRyZXR1cm4gZWx0O1xuIDQzMjpcdFxuIDQzMzpcdFx0XHRlbHQgPSAoc3RydWN0IGJyY21mX3RsdiAqKSgodTggKillbHQgJiM0MzsgKGxlbiAmIzQzOyBUTFZfSERSX0xFTikpO1xuIDQzNDpcdFx0XHR0b3RsZW4gLT0gKGxlbiAmIzQzOyBUTFZfSERSX0xFTik7XG4gNDM1Olx0XHR9XG4gNDM2Olx0XG4gNDM3Olx0XHRyZXR1cm4gTlVMTDtcbiA0Mzg6XHR9XG4gNDM5Olx0XG4gNDQwOlx0LyogSXMgYW55IG9mIHRoZSB0bHZzIHRoZSBleHBlY3RlZCBlbnRyeT8gSWZcbiA0NDE6XHQgKiBub3QgdXBkYXRlIHRoZSB0bHZzIGJ1ZmZlciBwb2ludGVyL2xlbmd0aC5cbiA0NDI6XHQgKi9cbiA0NDM6XHRzdGF0aWMgYm9vbFxuIDQ0NDpcdGJyY21mX3Rsdl9oYXNfaWUoY29uc3QgdTggKmllLCBjb25zdCB1OCAqKnRsdnMsIHUzMiAqdGx2c19sZW4sXG4gNDQ1Olx0XHRcdCBjb25zdCB1OCAqb3VpLCB1MzIgb3VpX2xlbiwgdTggdHlwZSlcbiA0NDY6XHR7XG4gNDQ3Olx0XHQvKiBJZiB0aGUgY29udGVudHMgbWF0Y2ggdGhlIE9VSSBhbmQgdGhlIHR5cGUgKi9cbiA0NDg6XHRcdGlmIChpZVtUTFZfTEVOX09GRl0gXHUwMDNlPSBvdWlfbGVuICYjNDM7IDEgXHUwMDI2XHUwMDI2XG4gNDQ5Olx0XHQgICAgIW1lbWNtcChcdTAwMjZpZVtUTFZfQk9EWV9PRkZdLCBvdWksIG91aV9sZW4pIFx1MDAyNlx1MDAyNlxuIDQ1MDpcdFx0ICAgIHR5cGUgPT0gaWVbVExWX0JPRFlfT0ZGICYjNDM7IG91aV9sZW5dKSB7XG4gNDUxOlx0XHRcdHJldHVybiB0cnVlO1xuIDQ1MjpcdFx0fVxuIDQ1MzpcdFxuIDQ1NDpcdFx0aWYgKHRsdnMgPT0gTlVMTClcbiA0NTU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ1NjpcdFx0LyogcG9pbnQgdG8gdGhlIG5leHQgaWUgKi9cbiA0NTc6XHRcdGllICYjNDM7PSBpZVtUTFZfTEVOX09GRl0gJiM0MzsgVExWX0hEUl9MRU47XG4gNDU4Olx0XHQvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyICovXG4gNDU5Olx0XHQqdGx2c19sZW4gLT0gKGludCkoaWUgLSAqdGx2cyk7XG4gNDYwOlx0XHQvKiB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKi9cbiA0NjE6XHRcdCp0bHZzID0gaWU7XG4gNDYyOlx0XG4gNDYzOlx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODY0CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBDb21wbGV0aW9uIFByb2Nlc3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbm5lY3Rpb24gY29tcGxldGlvbiBsb2dpYy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAgYW5kIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYC4gTG9va2luZyBhdCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIEkgc2VlIGl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIGBjb25uX3BhcmFtc2Agc3RydWN0dXJlOiBgcmVxX2llX2xlbmAsIGByZXNwX2llYCwgYW5kIGByZXNwX2llX2xlbmAgYXJlIHBvcHVsYXRlZCBmcm9tIGBjb25uX2luZm9gLiAgVGhlbiwgdGhlcmUmIzM5O3MgYSBjcnVjaWFsIGNoZWNrIGZvciBhdXRob3JpemF0aW9uLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBhdXRob3JpemVkYCBzZWVtcyB0byBoaW5nZSBvbiBhIGZldyBjb25kaXRpb25zOiB0aGUgY29ubmVjdGlvbiBtdXN0IGJlICpjb21wbGV0ZWQqLCBhbmQgdGhlIHByb2ZpbGUgbmVlZHMgdG8gdXNlIGVpdGhlciAxWCBGVyBzdXBwb3J0IG9yIHJvYW1pbmcgRlcgc3VwcG9ydC4gIENydWNpYWxseSwgaXQgdGhlbiB1c2VzIGBicmNtZl9oYXNfcG1raWRgIG9uIHRoZSBgY29ubl9wYXJhbXMucmVxX2llYC4gIElmIGFsbCB0aG9zZSBjb25kaXRpb25zIGFyZSBtZXQsIHRoZW4gYGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZGAgaXMgY2FsbGVkIGFmdGVyIGBjZmc4MDIxMV9jb25uZWN0X2RvbmVgLgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IGBjb25uX3BhcmFtc2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgY29ubl9pbmZvYCBpcyBjb21pbmcgZnJvbSBhbmQgaG93IGl0cyBjb250ZW50cyBhcmUgcG9wdWxhdGVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgd2lsbCByZXZlYWwgaG93IGByZXFfaWVgLCBgcmVzcF9pZWAgYW5kIG90aGVyIGFzc29jaWF0ZWQgcGFyYW1ldGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjU5MDpcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGNvbnN0IHN0cnVjdCBicmNtZl9ldmVudF9tc2cgKmUsXG42NTkxOlx0XHRcdCAgICAgICBib29sIGNvbXBsZXRlZClcbjY1OTI6XHR7XG42NTkzOlx0XHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuNjU5NDpcdFx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGU7XG42NTk1Olx0XHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSBjZmdfdG9fY29ubihjZmcpO1xuNjU5NjpcdFx0c3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7XG42NTk3Olx0XHRib29sIGF1dGhvcml6ZWQ7XG42NTk4Olx0XG42NTk5Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbjY2MDA6XHRcbjY2MDE6XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNUSU5HLFxuNjYwMjpcdFx0XHRcdCAgICAgICBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXNtZV9zdGF0ZSkpIHtcbjY2MDM6XHRcdFx0bWVtc2V0KFx1MDAyNmNvbm5fcGFyYW1zLCAwLCBzaXplb2YoY29ubl9wYXJhbXMpKTtcbjY2MDQ6XHRcdFx0aWYgKGNvbXBsZXRlZCkge1xuNjYwNTpcdFx0XHRcdGJyY21mX2dldF9hc3NvY19pZXMoY2ZnLCBpZnApO1xuNjYwNjpcdFx0XHRcdGJyY21mX3VwZGF0ZV9ic3NfaW5mbyhjZmcsIGlmcCk7XG42NjA3Olx0XHRcdFx0c2V0X2JpdChCUkNNRl9WSUZfU1RBVFVTX0NPTk5FQ1RFRCxcbjY2MDg6XHRcdFx0XHRcdFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlc21lX3N0YXRlKTtcbjY2MDk6XHRcdFx0XHRjb25uX3BhcmFtcy5zdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTO1xuNjYxMDpcdFx0XHR9IGVsc2Uge1xuNjYxMTpcdFx0XHRcdGNsZWFyX2JpdChCUkNNRl9WSUZfU1RBVFVTX0VBUF9TVUNDRVNTLFxuNjYxMjpcdFx0XHRcdFx0ICBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXNtZV9zdGF0ZSk7XG42NjEzOlx0XHRcdFx0Y2xlYXJfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQVNTT0NfU1VDQ0VTUyxcbjY2MTQ6XHRcdFx0XHRcdCAgXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2VzbWVfc3RhdGUpO1xuNjYxNTpcdFx0XHRcdGNvbm5fcGFyYW1zLnN0YXR1cyA9IFdMQU5fU1RBVFVTX0FVVEhfVElNRU9VVDtcbjY2MTY6XHRcdFx0fVxuNjYxNzpcdFx0XHRjb25uX3BhcmFtcy5saW5rc1swXS5ic3NpZCA9IHByb2ZpbGUtXHUwMDNlYnNzaWQ7XG42NjE4Olx0XHRcdGNvbm5fcGFyYW1zLnJlcV9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXFfaWU7XG42NjE5Olx0XHRcdGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVxX2llX2xlbjtcbjY2MjA6XHRcdFx0Y29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuNjYyMTpcdFx0XHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llX2xlbjtcbjY2MjI6XHRcdFx0YXV0aG9yaXplZCA9IGNvbXBsZXRlZCBcdTAwMjZcdTAwMjZcbjY2MjM6XHRcdFx0XHQgICAgIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG42NjI0Olx0XHRcdFx0ICAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbjY2MjU6XHRcdFx0XHQgICAgIGJyY21mX2hhc19wbWtpZChjb25uX3BhcmFtcy5yZXFfaWUsXG42NjI2Olx0XHRcdFx0XHRcdCAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7XG42NjI3Olx0XHRcdGNmZzgwMjExX2Nvbm5lY3RfZG9uZShuZGV2LCBcdTAwMjZjb25uX3BhcmFtcywgR0ZQX0tFUk5FTCk7XG42NjI4Olx0XHRcdGlmIChhdXRob3JpemVkKVxuNjYyOTpcdFx0XHRcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVx1MDAzZWJzc2lkLCBOVUxMLCAwLFxuNjYzMDpcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbjY2MzE6XHRcdFx0YnJjbWZfZGJnKENPTk4sIFwmIzM0O1JlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcXG5cJiMzNDssXG42NjMyOlx0XHRcdFx0ICBjb21wbGV0ZWQgPyBcJiMzNDtzdWNjZWVkZWRcJiMzNDsgOiBcJiMzNDtmYWlsZWRcJiMzNDspO1xuNjYzMzpcdFx0fVxuNjYzNDpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFeGl0XFxuXCYjMzQ7KTtcbjY2MzU6XHRcdHJldHVybiAwO1xuNjYzNjpcdH1cbjY2Mzc6XHRcbjY2Mzg6XHRzdGF0aWMgczMyXG42NjM5Olx0YnJjbWZfbm90aWZ5X2Nvbm5lY3Rfc3RhdHVzX2FwKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTAxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmw4MDIxMV9zZXRfcG1rYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBNSyAoUGFpcndpc2UgTWFzdGVyIEtleSkgaXMgYmVpbmcgc2V0IHdpdGhpbiB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9zZXRfcG1rYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIHRoaXMgc2hvdWxkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgYW5hbHl6aW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIFBNSyBjb25maWd1cmF0aW9uLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgYXMgSSBkb24mIzM5O3Qgd2FudCB0byBiZSBzcGVuZGluZyB0b28gbXVjaCB0aW1lIHNwZWx1bmtpbmcuIFRpbWUgdG8gZmlyZSB1cCBteSBlZGl0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NDMwOlx0XG4xODQzMTpcdFx0cmV0dXJuIHJkZXZfc2V0X211bHRpY2FzdF90b191bmljYXN0KHJkZXYsIGRldiwgZW5hYmxlZCk7XG4xODQzMjpcdH1cbjE4NDMzOlx0XG4xODQzNDpcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xODQzNTpcdHtcbjE4NDM2Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTg0Mzc6XHRcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xuMTg0Mzg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuMTg0Mzk6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbjE4NDQwOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgcG1rX2NvbmYgPSB7fTtcbjE4NDQxOlx0XG4xODQ0MjpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXHUwMDI2XHUwMDI2XG4xODQ0MzpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXG4xODQ0NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODQ0NTpcdFxuMTg0NDY6XHRcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4xODQ0NzpcdFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbjE4NDQ4Olx0XHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuMTg0NDk6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxuMTg0NTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg0NTE6XHRcbjE4NDUyOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pXG4xODQ1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NDU0Olx0XG4xODQ1NTpcdFx0aWYgKCF3ZGV2LVx1MDAzZWNvbm5lY3RlZClcbjE4NDU2Olx0XHRcdHJldHVybiAtRU5PVENPTk47XG4xODQ1NzpcdFxuMTg0NTg6XHRcdHBta19jb25mLmFhID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XG4xODQ1OTpcdFx0aWYgKG1lbWNtcChwbWtfY29uZi5hYSwgd2Rldi1cdTAwM2V1LmNsaWVudC5jb25uZWN0ZWRfYWRkciwgRVRIX0FMRU4pKVxuMTg0NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODQ2MTpcdFxuMTg0NjI6XHRcdHBta19jb25mLnBtayA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pO1xuMTg0NjM6XHRcdHBta19jb25mLnBta19sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pO1xuMTg0NjQ6XHRcdGlmIChwbWtfY29uZi5wbWtfbGVuICE9IFdMQU5fUE1LX0xFTiBcdTAwMjZcdTAwMjZcbjE4NDY1Olx0XHQgICAgcG1rX2NvbmYucG1rX2xlbiAhPSBXTEFOX1BNS19MRU5fU1VJVEVfQl8xOTIpXG4xODQ2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NDY3Olx0XG4xODQ2ODpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS1IwX05BTUVdKVxuMTg0Njk6XHRcdFx0cG1rX2NvbmYucG1rX3IwX25hbWUgPVxuMTg0NzA6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtSMF9OQU1FXSk7XG4xODQ3MTpcdFxuMTg0NzI6XHRcdHJldHVybiByZGV2X3NldF9wbWsocmRldiwgZGV2LCBcdTAwMjZwbWtfY29uZik7XG4xODQ3MzpcdH1cbjE4NDc0Olx0XG4xODQ3NTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xODQ3NjpcdHtcbjE4NDc3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTg0Nzg6XHRcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xuMTg0Nzk6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuMTg0ODA6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbjE4NDgxOlx0XHRjb25zdCB1OCAqYWE7XG4xODQ4MjpcdFxuMTg0ODM6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuMTg0ODQ6XHRcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuMTg0ODU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg0ODY6XHRcbjE4NDg3Olx0XHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuMTg0ODg6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCkgXHUwMDI2XHUwMDI2XG4xODQ4OTpcdFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMzIKCQkJCQkJCW91dHB1dDogMzIxCgkJCQkJCQl0aG91Z2h0czogMTIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGYXN0IFJvYW0gT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIGZhc3Qgcm9hbSBvZmZsb2FkIChGQlQvT0tDKSBzdXBwb3J0IHdpdGhpbiB0aGUgYnJjbWZtYWMgYW5kIG5sODAyMTEgc3Vic3lzdGVtcy4gVGhlIGNvZGUgYWRkcyBmZWF0dXJlIGZsYWdzLCB2YWxpZGF0ZXMgUE1LSURzLCBhbmQgbWFuYWdlcyBPS0MvRlQgb3BlcmF0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiBhbmQgcm9hbWluZy4KCkNydWNpYWxseSwgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gSSYjMzk7dmUgc2NydXRpbml6ZWQgdGhlIG1lbW9yeSBoYW5kbGluZywgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBmb3VuZC4KCjEuICAqKk5vIEtlcm5lbC10by1Vc2VyIExlYWtzOioqIEFic29sdXRlbHkgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBOb3RoaW5nIG5ldyBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLgoKMi4gICoqSW5pdGlhbGl6YXRpb24gaXMgS2V5OioqIFZhcmlhYmxlcyBsaWtlIGBva2NfZW5hYmxlYCwgYGF1dGhvcml6ZWRgIGFyZSBhbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZWlyIHVzZS4gVGhlIGBva2NfZW5hYmxlYCB2YXJpYWJsZSBpcyBvbmx5IHJlYWQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igd2hlbiBxdWVyeWluZyB0aGUgZmlybXdhcmUuIFRoZSBgcHJvZmlsZWAgc3RydWN0IGZpZWxkcyByZWxhdGVkIHRvIHN0YXRlIChgaXNfb2tjYCwgYHVzZV9md3N1cGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKMy4gICoqU2FmZSBQTUtJRCBIYW5kbGluZzoqKiBUaGUgYGJyY21mX2hhc19wbWtpZGAgZnVuY3Rpb24gZGlsaWdlbnRseSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IElFIGJ1ZmZlci4gTm8gcmlza3Mgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzIHRoZXJlLgoKNC4gICoqTm8gQ29tcGxleCBEYXRhIFN0cnVjdHVyZXMgd2l0aCBVbmluaXRpYWxpemVkIEZpZWxkczoqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgcG9zZSBhIHByb2JsZW0gZG93biB0aGUgbGluZS4KCjUuICAqKk5vIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzIGluIENvbnRyb2wgRmxvdzoqKiBJIHNlZSBubyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIHN0aWNrcyB0byBiZXN0IHByYWN0aWNlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgYnVmZmVyIG92ZXJydW5zIGR1cmluZyBJRSBwYXJzaW5nIG9yIGludmFsaWQgc3RhdGUgaGFuZGxpbmcsIHdvdWxkIGJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgKipOZWVkc0tNU0FOID0gZmFsc2UqKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtIG9mZmxvYWQgKEZhc3QgQlNTIFRyYW5zaXRpb24gLyBPcHBvcnR1bmlzdGljIEtleSBDYWNoaW5nKSBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGFuZCB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uXG5cbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHN0YWNrIGFuZCBoZWFwIHZhcmlhYmxlcyAoZS5nLiwgYG9rY19lbmFibGVgLCBgYXV0aG9yaXplZGAsIGBwbWtfY29uZmApIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCBvciBhc3NpZ25lZCB2YWx1ZXMgcHJpb3IgdG8gYW55IHJlYWQuIGBva2NfZW5hYmxlYCBpcyBvbmx5IGFjY2Vzc2VkIGlmIGBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXRgIHN1Y2Nlc3NmdWxseSByZXR1cm5zIDAuXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cbjQuIE5vIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgaW9jdGwsIG9yIGNvcHlfdG9fdXNlci5cblxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtIG9mZmxvYWQgKEZhc3QgQlNTIFRyYW5zaXRpb24gLyBPcHBvcnR1bmlzdGljIEtleSBDYWNoaW5nKSBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGFuZCB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0uXG5cbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHN0YWNrIGFuZCBoZWFwIHZhcmlhYmxlcyAoZS5nLiwgYG9rY19lbmFibGVgLCBgYXV0aG9yaXplZGAsIGBwbWtfY29uZmApIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCBvciBhc3NpZ25lZCB2YWx1ZXMgcHJpb3IgdG8gYW55IHJlYWQuIGBva2NfZW5hYmxlYCBpcyBvbmx5IGFjY2Vzc2VkIGlmIGBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXRgIHN1Y2Nlc3NmdWxseSByZXR1cm5zIDAuXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cbjQuIE5vIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgaW9jdGwsIG9yIGNvcHlfdG9fdXNlci5cblxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNjo1MS4zMTY5NTg5MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ4NjE0OTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfc2V0X3Bta1wiLFxuICAgIFwibmw4MDIxMV9kZWxfcG1rXCIsXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtcIixcbiAgICBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIixcbiAgICBcImJyY21mX2Jzc19jb25uZWN0X2RvbmVcIixcbiAgICBcImJyY21mX3NldHVwX3dpcGh5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cXG5cXG5LZXkgb2JzZXJ2YXRpb25zIHJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxcbjMuIFRoZSBuZXcgSUUgcGFyc2luZyBmdW5jdGlvbiBgYnJjbWZfaGFzX3Bta2lkYCBvcGVyYXRlcyB3aXRoIGxlbmd0aCBhbmQgb2Zmc2V0IGJvdW5kcyBjaGVja3Mgb24gaW5jb21pbmcgSUUgYnl0ZSBhcnJheXM7IGFueSBvdXQtb2YtYm91bmRzIHJlYWRpbmcgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZhc3Qgcm9hbWluZyBvZmZsb2FkIChGQlQgLyBPcHBvcnR1bmlzdGljIEtleSBDYWNoaW5nIC0gT0tDKSBhbmQgUE1LIG9mZmxvYWQgYWNyb3NzIHRoZSBjb3JlIG5sODAyMTEgc3Vic3lzdGVtIGFuZCB0aGUgYnJjbWZtYWMgZHJpdmVyLiBJdCB1cGRhdGVzIG5ldGxpbmsgdmFsaWRhdGlvbiBsb2dpYyBpbiBubDgwMjExX3NldF9wbWsvbmw4MDIxMV9kZWxfcG1rLCBpbnRyb2R1Y2VzIFJTTiBQTUtJRCBJRSBwYXJzaW5nLCBtb2RpZmllcyBjb25uZWN0IGFuZCByb2FtIGNvbXBsZXRpb24gc3RhdGUgaGFuZGxpbmcsIGFuZCB1cGRhdGVzIFdBUk5fT04gYXNzZXJ0aW9ucyBpbiBjb25uZWN0aW9uL1BNSyBjb25maWd1cmF0aW9uIHBhdGhzLiBUaGVzZSBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgdmlhIEdlbmVyaWMgTmV0bGluayAobmw4MDIxMSkgYW5kIHZpcnR1YWxpemVkIFVTQiBkZXZpY2UgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6MzY6NTEuMzE2OTY0NzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDYwNTU2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOGExOGQ2ODYwYjdkZTRiNWFkMTczYzZiMTAyYmIyODdmZmUwZTcxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5pbmRleCA4NzJjNDg4MDZkMDkxLi41MTlkZTk2YjA0MmVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5AQCAtMjExMiw5ICsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuIFxcdHMzMiB2YWw7XFxuIFxcdHMzMiBlcnI7XFxuK1xcdHMzMiBva2NfZW5hYmxlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7XFxuIFxcdGNvbnN0IHU4ICppZTtcXG4gXFx0dTMyIGllX2xlbjtcXG4rXFx0Ym9vbCBmd3N1cF9yb2FtO1xcbiBcXHR1MzIgb2Zmc2V0O1xcbiBcXHR1MTYgcnNuX2NhcDtcXG4gXFx0dTMyIG1mcDtcXG5AQCAtMjEyMiw2ICsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcXG4gXFxuIFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORTtcXG4gXFx0cHJvZmlsZS1cXHUwMDNlaXNfZnQgPSBmYWxzZTtcXG4rXFx0cHJvZmlsZS1cXHUwMDNlaXNfb2tjID0gZmFsc2U7XFxuK1xcdGZ3c3VwX3JvYW0gPSBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZCVCkgfHxcXG4rXFx0XFx0ICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7XFxuIFxcbiBcXHRpZiAoIXNtZS1cXHUwMDNlY3J5cHRvLm5fYWttX3N1aXRlcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTIxMzgsNiArMjE0Myw4IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcdFxcdFxcdHZhbCA9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEO1xcbiBcXHRcXHRcXHRpZiAoc21lLVxcdTAwM2V3YW50XzF4KVxcbiBcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xcbitcXHRcXHRcXHRlbHNlIGlmIChmd3N1cF9yb2FtKVxcbitcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX1BTSzpcXG4gXFx0XFx0XFx0dmFsID0gV1BBX0FVVEhfUFNLO1xcbkBAIC0yMTUzLDExICsyMTYwLDE1IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcdFxcdFxcdHZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDtcXG4gXFx0XFx0XFx0aWYgKHNtZS1cXHUwMDNld2FudF8xeClcXG4gXFx0XFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcXG4rXFx0XFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0FLTV9TVUlURV84MDIxWF9TSEEyNTY6XFxuIFxcdFxcdFxcdHZhbCA9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XFxuIFxcdFxcdFxcdGlmIChzbWUtXFx1MDAzZXdhbnRfMXgpXFxuIFxcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXFxuK1xcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLX1NIQTI1NjpcXG4gXFx0XFx0XFx0dmFsID0gV1BBMl9BVVRIX1BTS19TSEEyNTY7XFxuQEAgLTIxNzAsMTAgKzIxODEsMTYgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcXG4gXFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNlaXNfZnQgPSB0cnVlO1xcbiBcXHRcXHRcXHRpZiAoc21lLVxcdTAwM2V3YW50XzF4KVxcbiBcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xcbitcXHRcXHRcXHRlbHNlIGlmIChmd3N1cF9yb2FtKVxcbitcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX0ZUX1BTSzpcXG4gXFx0XFx0XFx0dmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDtcXG4gXFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNlaXNfZnQgPSB0cnVlO1xcbitcXHRcXHRcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpXFxuK1xcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xcbitcXHRcXHRcXHRlbHNlIGlmIChmd3N1cF9yb2FtKVxcbitcXHRcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XFxuIFxcdFxcdFxcdHZhbCA9IFdGQV9BVVRIX0RQUDtcXG5AQCAtMjIwNCw4ICsyMjIxLDIyIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuIFxcbiBcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpXFxuIFxcdFxcdGJyY21mX2RiZyhJTkZPLCBcXFwidXNpbmcgMVggb2ZmbG9hZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcXG4rXFx0ICAgIHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pIHtcXG4rXFx0XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXFxcIm9rY19lbmFibGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm9rY19lbmFibGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJnZXQgb2tjX2VuYWJsZSBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJva2NfZW5hYmxlICglZClcXFxcblxcXCIsIG9rY19lbmFibGUpO1xcbitcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2Vpc19va2MgPSBva2NfZW5hYmxlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSlcXG4gXFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJ1c2luZyBTQUUgb2ZmbG9hZFxcXFxuXFxcIik7XFxuK1xcdGlmIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKVxcbitcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcInVzaW5nIHJvYW1pbmcgb2ZmbG9hZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSlcXG4gXFx0XFx0Z290byBza2lwX21mcF9jb25maWc7XFxuQEAgLTI0OTQsMTMgKzI1MjUsMTQgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdFxcdGlmIChzbWUtXFx1MDAzZWNyeXB0by5wc2sgXFx1MDAyNlxcdTAwMjYgIWlzX3NhZV9ha20gXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkge1xcbi1cXHRcXHRcXHRpZiAoV0FSTl9PTihwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT1cXG4tXFx0XFx0XFx0XFx0ICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcXG4rXFx0XFx0XFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJ1c2luZyBQU0sgb2ZmbG9hZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xcbitcXHRcXHRcXHR9IGVsc2UgaWYgKFdBUk5fT04ocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9XFxuK1xcdFxcdFxcdFxcdFxcdCAgIEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJ1c2luZyBQU0sgb2ZmbG9hZFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XFxuIFxcdFxcdFxcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xcbkBAIC01OTUzLDE3ICs1OTg1LDI5IEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2V0X3BtayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiAqY29uZilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4rXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcImVudGVyXFxcXG5cXFwiKTtcXG4gXFxuLVxcdC8qIGV4cGVjdCB1c2luZyBmaXJtd2FyZSBzdXBwbGljYW50IGZvciAxWCAqL1xcbiBcXHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRpZiAoV0FSTl9PTihpZnAtXFx1MDAzZXZpZi1cXHUwMDNlcHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCkpXFxuK1xcdGRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuK1xcdGlmIChXQVJOX09OKGlmcC1cXHUwMDNldmlmLVxcdTAwM2Vwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhaWZwLVxcdTAwM2V2aWYtXFx1MDAzZXByb2ZpbGUuaXNfZnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFpZnAtXFx1MDAzZXZpZi1cXHUwMDNlcHJvZmlsZS5pc19va2MpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChjb25mLVxcdTAwM2VwbWtfbGVuIFxcdTAwM2UgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTilcXG4gXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIFxcbitcXHRpZiAoaWZwLVxcdTAwM2V2aWYtXFx1MDAzZXByb2ZpbGUuaXNfb2tjKSB7XFxuK1xcdFxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJva2NfaW5mb19wbWtcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uZi1cXHUwMDNlcG1rLCBjb25mLVxcdTAwM2VwbWtfbGVuKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJva2NfaW5mb19wbWsgaW92YXIgZmFpbGVkOiByZXQ9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCByZXQpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gYnJjbWZfc2V0X3BtayhpZnAsIGNvbmYtXFx1MDAzZXBtaywgY29uZi1cXHUwMDNlcG1rX2xlbik7XFxuIH1cXG4gXFxuQEAgLTY0MjIsNiArNjQ2Niw0NyBAQCBzdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7XFxuK1xcdGNvbnN0IHU4ICppZTtcXG4rXFx0dTMyIGllX2xlbjtcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTE2IGNvdW50O1xcbitcXG4rXFx0aWYgKCFwYXJzZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cyhwYXJzZSwgbGVuLCBXTEFOX0VJRF9SU04pO1xcbitcXHRpZiAoIXJzbl9pZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWUgPSAoY29uc3QgdTggKilyc25faWU7XFxuK1xcdGllX2xlbiA9IHJzbl9pZS1cXHUwMDNlbGVuICsgVExWX0hEUl9MRU47XFxuK1xcbitcXHRvZmZzZXQgPSBUTFZfSERSX0xFTiArIFdQQV9JRV9WRVJTSU9OX0xFTiArIFdQQV9JRV9NSU5fT1VJX0xFTjtcXG4rXFx0aWYgKG9mZnNldCArIFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gXFx1MDAzZT0gaWVfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjb3VudCA9IGllW29mZnNldF0gKyAoaWVbb2Zmc2V0ICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdG9mZnNldCArPSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47XFxuK1xcdGlmIChvZmZzZXQgKyBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOIFxcdTAwM2U9IGllX2xlbilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y291bnQgPSBpZVtvZmZzZXRdICsgKGllW29mZnNldCArIDFdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRvZmZzZXQgKz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiArIGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xcbitcXHRpZiAob2Zmc2V0ICsgUlNOX0NBUF9MRU4gXFx1MDAzZT0gaWVfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvZmZzZXQgKz0gUlNOX0NBUF9MRU47XFxuK1xcdGlmIChvZmZzZXQgKyBSU05fUE1LSURfQ09VTlRfTEVOIFxcdTAwM2UgaWVfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjb3VudCA9IGllW29mZnNldF0gKyAoaWVbb2Zmc2V0ICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcbitcXHRyZXR1cm4gY291bnQgXFx1MDAzZSAwO1xcbit9XFxuK1xcbiBzdGF0aWMgczMyXFxuIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbkBAIC02NDM2LDYgKzY1MjEsNyBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuIFxcdHN0cnVjdCBicmNtZl9ic3NfaW5mb19sZSAqYmk7XFxuIFxcdHN0cnVjdCBicmNtdV9jaGFuIGNoO1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcm9hbV9pbmZvIHJvYW1faW5mbyA9IHt9O1xcbitcXHRib29sIGF1dGhvcml6ZWQgPSBmYWxzZTtcXG4gXFx0dTMyIGZyZXE7XFxuIFxcdHMzMiBlcnIgPSAwO1xcbiBcXHR1OCAqYnVmO1xcbkBAIC02NDgyLDE0ICs2NTY4LDE4IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0cm9hbV9pbmZvLnJlc3BfaWUgPSBjb25uX2luZm8tXFx1MDAzZXJlc3BfaWU7XFxuIFxcdHJvYW1faW5mby5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVzcF9pZV9sZW47XFxuIFxcbitcXHRpZiAoKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XFxuK1xcdCAgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChicmNtZl9oYXNfcG1raWQocm9hbV9pbmZvLnJlcV9pZSwgcm9hbV9pbmZvLnJlcV9pZV9sZW4pIHx8XFxuK1xcdCAgICAgcHJvZmlsZS1cXHUwMDNlaXNfZnQgfHwgcHJvZmlsZS1cXHUwMDNlaXNfb2tjKSlcXG4rXFx0XFx0YXV0aG9yaXplZCA9IHRydWU7XFxuK1xcbiBcXHRjZmc4MDIxMV9yb2FtZWQobmRldiwgXFx1MDAyNnJvYW1faW5mbywgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChhdXRob3JpemVkKVxcbitcXHRcXHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cXHUwMDNlYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4gXFx0YnJjbWZfZGJnKENPTk4sIFxcXCJSZXBvcnQgcm9hbWluZyByZXN1bHRcXFxcblxcXCIpO1xcbiBcXG4tXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFxcdTAwMjZcXHUwMDI2IHByb2ZpbGUtXFx1MDAzZWlzX2Z0KSB7XFxuLVxcdFxcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVxcdTAwM2Vic3NpZCwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7XFxuLVxcdFxcdGJyY21mX2RiZyhDT05OLCBcXFwiUmVwb3J0IHBvcnQgYXV0aG9yaXplZFxcXFxuXFxcIik7XFxuLVxcdH1cXG4tXFxuIFxcdHNldF9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNURUQsIFxcdTAwMjZpZnAtXFx1MDAzZXZpZi1cXHUwMDNlc21lX3N0YXRlKTtcXG4gXFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiRXhpdFxcXFxuXFxcIik7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTY1MDQsNiArNjU5NCw3IEBAIGJyY21mX2Jzc19jb25uZWN0X2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcXHUwMDI2aWZwLVxcdTAwM2V2aWYtXFx1MDAzZXByb2ZpbGU7XFxuIFxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zO1xcbitcXHRib29sIGF1dGhvcml6ZWQ7XFxuIFxcbiBcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuIFxcbkBAIC02NTI4LDcgKzY2MTksMTUgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbiBcXHRcXHRjb25uX3BhcmFtcy5yZXFfaWVfbGVuID0gY29ubl9pbmZvLVxcdTAwM2VyZXFfaWVfbGVuO1xcbiBcXHRcXHRjb25uX3BhcmFtcy5yZXNwX2llID0gY29ubl9pbmZvLVxcdTAwM2VyZXNwX2llO1xcbiBcXHRcXHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVzcF9pZV9sZW47XFxuK1xcdFxcdGF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcXG4rXFx0XFx0XFx0ICAgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4pO1xcbiBcXHRcXHRjZmc4MDIxMV9jb25uZWN0X2RvbmUobmRldiwgXFx1MDAyNmNvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKGF1dGhvcml6ZWQpXFxuK1xcdFxcdFxcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVxcdTAwM2Vic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbiBcXHRcXHRicmNtZl9kYmcoQ09OTiwgXFxcIlJlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgY29tcGxldGVkID8gXFxcInN1Y2NlZWRlZFxcXCIgOiBcXFwiZmFpbGVkXFxcIik7XFxuIFxcdH1cXG5AQCAtNzczMSw2ICs3ODMwLDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfc2V0dXBfd2lwaHkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGJyY21mX2lmICppZnApXFxuIFxcdH1cXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFX0VYVCkpXFxuIFxcdFxcdHdpcGh5LVxcdTAwM2VmZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfU0FFO1xcbitcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8XFxuK1xcdCAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQykpXFxuK1xcdFxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7XFxuIFxcdHdpcGh5LVxcdTAwM2VtZ210X3N0eXBlcyA9IGJyY21mX3R4cnhfc3R5cGVzO1xcbiBcXHR3aXBoeS1cXHUwMDNlbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDtcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE5PKSkge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuaW5kZXggNjNlNTM0NTIzZjUxOC4uMWFhOTkzOTBhOTUxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuQEAgLTEyNyw3ICsxMjcsOCBAQCBlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAge1xcbiBcXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUsXFxuIFxcdEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLLFxcbiBcXHRCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYLFxcbi1cXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRVxcbitcXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSxcXG4rXFx0QlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNXFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTY0LDYgKzE2NSw3IEBAIGVudW0gYnJjbWZfbWdtdF90eF9zdGF0dXMge1xcbiAgKiBAYnNzaWQ6IGJzc2lkIG9mIGpvaW5lZC9qb2luaW5nIGlic3MuXFxuICAqIEBzZWM6IHNlY3VyaXR5IGluZm9ybWF0aW9uLlxcbiAgKiBAa2V5OiBrZXkgaW5mb3JtYXRpb25cXG4rICogQGlzX29rYzogT0tDIGlzIHVzZWQgZm9yIGN1cnJlbnQgY29ubmVjdGlvbi5cXG4gICovXFxuIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcXG4gXFx0dTggYnNzaWRbRVRIX0FMRU5dO1xcbkBAIC0xNzIsNiArMTc0LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUge1xcbiBcXHRlbnVtIGJyY21mX3Byb2ZpbGVfZndzdXAgdXNlX2Z3c3VwO1xcbiBcXHR1MTYgdXNlX2Z3YXV0aDtcXG4gXFx0Ym9vbCBpc19mdDtcXG4rXFx0Ym9vbCBpc19va2M7XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcXG5pbmRleCA0ODgzNjRlZjhmZjJhLi5jYzE5ZTVlN2ViZjU3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXFxuQEAgLTQ1LDYgKzQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0ge1xcbiBcXHR7IEJSQ01GX0ZFQVRfU0FFLCBcXFwic2FlIFxcXCIgfSxcXG4gXFx0eyBCUkNNRl9GRUFUX0ZXQVVUSCwgXFxcImlkYXV0aFxcXCIgfSxcXG4gXFx0eyBCUkNNRl9GRUFUX1NBRV9FWFQsIFxcXCJzYWVfZXh0XFxcIiB9LFxcbitcXHR7IEJSQ01GX0ZFQVRfRkJULCBcXFwiZmJ0IFxcXCIgfSxcXG4rXFx0eyBCUkNNRl9GRUFUX09LQywgXFxcIm9rY1xcXCIgfSxcXG4gfTtcXG4gXFxuICNpZmRlZiBERUJVR1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxcbmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmhcXG5AQCAtNTksNyArNTksOSBAQFxcbiBcXHRCUkNNRl9GRUFUX0RFRihTQ0FOX1YyKSBcXFxcXFxuIFxcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YyKSBcXFxcXFxuIFxcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcXFxcXFxuLVxcdEJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpXFxuK1xcdEJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpIFxcXFxcXG4rXFx0QlJDTUZfRkVBVF9ERUYoRkJUKSBcXFxcXFxuK1xcdEJSQ01GX0ZFQVRfREVGKE9LQylcXG4gXFxuIC8qXFxuICAqIFF1aXJrczpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5pbmRleCAwMjAzODdkNzY0MTIyLi45MjBkNWUyZDk5NjYwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuQEAgLTcxMTAsNiArNzExMCwxMCBAQCBlbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7XFxuICAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQOiBEcml2ZXIgc3VwcG9ydHMgcHJvYmluZyB0aGUgYXNzb2NpYXRlZCBBUFxcbiAgKlxcdGluIFNUQSBtb2RlIHVzaW5nIEBOTDgwMjExX0NNRF9QUk9CRV9QRUVSLlxcbiAgKlxcbisgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRDogRHJpdmVyIHN1cHBvcnRzIGZhc3Qgcm9hbWluZ1xcbisgKlxcdG9mZmxvYWQgaW4gc3RhdGlvbiBtb2RlLCBpbmNsdWRpbmcgRmFzdCBUcmFuc2l0aW9uIG9yIE9wcG9ydHVuaXN0aWNcXG4rICpcXHRLZXkgQ2FjaGluZy5cXG4rICpcXG4gICogQE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUzogbnVtYmVyIG9mIGV4dGVuZGVkIGZlYXR1cmVzLlxcbiAgKiBATUFYX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBoaWdoZXN0IGV4dGVuZGVkIGZlYXR1cmUgaW5kZXguXFxuICAqL1xcbkBAIC03MTkyLDYgKzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xcbiBcXHROTDgwMjExX0VYVF9GRUFUVVJFX1JPQ19BRERSX0ZJTFRFUixcXG4gXFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9TRVRfS0VZX0xURl9TRUVELFxcbiBcXHROTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLFxcbitcXHROTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FELFxcbiBcXG4gXFx0LyogYWRkIG5ldyBmZWF0dXJlcyBiZWZvcmUgdGhlIGRlZmluaXRpb24gYmVsb3cgKi9cXG4gXFx0TlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbmluZGV4IDQ0ZjJiYWQwODY3MDUuLmU0ODUwMTI5YTU4MmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5AQCAtMTg0MzQsNiArMTg0MzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuK1xcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4gXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4gXFx0c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHBta19jb25mID0ge307XFxuQEAgLTE4NDQyLDcgKzE4NDQzLDkgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4rXFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxcbiBcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG5AQCAtMTg0NzIsNiArMTg0NzUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbitcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuIFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuIFxcdGNvbnN0IHU4ICphYTtcXG5AQCAtMTg0ODAsNyArMTg0ODQsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbitcXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxcbitcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuIFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNjo1MS45MjM2MTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDczNTM5MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfc2V0X3Bta1wiLFxuICAgIFwibmw4MDIxMV9kZWxfcG1rXCIsXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtcIixcbiAgICBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIixcbiAgICBcImJyY21mX2Jzc19jb25uZWN0X2RvbmVcIixcbiAgICBcImJyY21mX3NldHVwX3dpcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThhMThkNjg2MGI3ZGU0YjVhZDE3M2M2YjEwMmJiMjg3ZmZlMGU3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjM2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuaW5kZXggODcyYzQ4ODA2ZDA5MS4uNTE5ZGU5NmIwNDJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuQEAgLTIxMTIsOSArMjExMiwxMSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuIFx0czMyIHZhbDtcbiBcdHMzMiBlcnI7XG4rXHRzMzIgb2tjX2VuYWJsZTtcbiBcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTtcbiBcdGNvbnN0IHU4ICppZTtcbiBcdHUzMiBpZV9sZW47XG4rXHRib29sIGZ3c3VwX3JvYW07XG4gXHR1MzIgb2Zmc2V0O1xuIFx0dTE2IHJzbl9jYXA7XG4gXHR1MzIgbWZwO1xuQEAgLTIxMjIsNiArMjEyNCw5IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXG4gXHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORTtcbiBcdHByb2ZpbGUtXHUwMDNlaXNfZnQgPSBmYWxzZTtcbitcdHByb2ZpbGUtXHUwMDNlaXNfb2tjID0gZmFsc2U7XG4rXHRmd3N1cF9yb2FtID0gYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8XG4rXHRcdCAgICAgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9PS0MpO1xuIFxuIFx0aWYgKCFzbWUtXHUwMDNlY3J5cHRvLm5fYWttX3N1aXRlcylcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMjEzOCw2ICsyMTQzLDggQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHR2YWwgPSBXUEFfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1BTSzpcbiBcdFx0XHR2YWwgPSBXUEFfQVVUSF9QU0s7XG5AQCAtMjE1MywxMSArMjE2MCwxNSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9VTlNQRUNJRklFRDtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFXzgwMjFYX1NIQTI1NjpcbiBcdFx0XHR2YWwgPSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xuIFx0XHRcdGlmIChzbWUtXHUwMDNld2FudF8xeClcbiBcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcbitcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuK1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLX1NIQTI1NjpcbiBcdFx0XHR2YWwgPSBXUEEyX0FVVEhfUFNLX1NIQTI1NjtcbkBAIC0yMTcwLDEwICsyMTgxLDE2IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IHRydWU7XG4gXHRcdFx0aWYgKHNtZS1cdTAwM2V3YW50XzF4KVxuIFx0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xuK1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0FLTV9TVUlURV9GVF9QU0s6XG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDtcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbitcdFx0XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuK1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQOlxuIFx0XHRcdHZhbCA9IFdGQV9BVVRIX0RQUDtcbkBAIC0yMjA0LDggKzIyMjEsMjIgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKVxuIFx0XHRicmNtZl9kYmcoSU5GTywgXCJ1c2luZyAxWCBvZmZsb2FkXFxuXCIpO1xuK1xuK1x0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcbitcdCAgICBwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU0pIHtcbitcdFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXCJva2NfZW5hYmxlXCIsXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZva2NfZW5hYmxlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGJwaHlfZXJyKGRydnIsIFwiZ2V0IG9rY19lbmFibGUgZmFpbGVkICglZClcXG5cIiwgZXJyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicmNtZl9kYmcoSU5GTywgXCJva2NfZW5hYmxlICglZClcXG5cIiwgb2tjX2VuYWJsZSk7XG4rXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19va2MgPSBva2NfZW5hYmxlO1xuK1x0XHR9XG4rXHR9XG4gXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpXG4gXHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIFNBRSBvZmZsb2FkXFxuXCIpO1xuK1x0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSlcbitcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgcm9hbWluZyBvZmZsb2FkXFxuXCIpO1xuIFxuIFx0aWYgKCFicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX01GUCkpXG4gXHRcdGdvdG8gc2tpcF9tZnBfY29uZmlnO1xuQEAgLTI0OTQsMTMgKzI1MjUsMTQgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0aWYgKHNtZS1cdTAwM2VjcnlwdG8ucHNrIFx1MDAyNlx1MDAyNiAhaXNfc2FlX2FrbSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFKSB7XG4tXHRcdFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT1cbi1cdFx0XHRcdCAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XG4rXHRcdFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuK1x0XHRcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgUFNLIG9mZmxvYWRcXG5cIik7XG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuK1x0XHRcdH0gZWxzZSBpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuK1x0XHRcdFx0XHQgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSykpIHtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRnb3RvIGRvbmU7XG4gXHRcdFx0fVxuLVx0XHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIFBTSyBvZmZsb2FkXFxuXCIpO1xuLVx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbiBcdFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuIFx0XHRcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xuQEAgLTU5NTMsMTcgKzU5ODUsMjkgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiAqY29uZilcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbitcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcImVudGVyXFxuXCIpO1xuIFxuLVx0LyogZXhwZWN0IHVzaW5nIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIDFYICovXG4gXHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0aWYgKFdBUk5fT04oaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYKSlcbitcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbitcdGlmIChXQVJOX09OKGlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUuaXNfZnQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLmlzX29rYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGNvbmYtXHUwMDNlcG1rX2xlbiBcdTAwM2UgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTilcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4rXHRpZiAoaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLmlzX29rYykge1xuK1x0XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcIm9rY19pbmZvX3Bta1wiLFxuK1x0XHRcdFx0XHQgICAgICAgY29uZi1cdTAwM2VwbWssIGNvbmYtXHUwMDNlcG1rX2xlbik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJva2NfaW5mb19wbWsgaW92YXIgZmFpbGVkOiByZXQ9JWRcXG5cIixcbitcdFx0XHRcdCByZXQpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGJyY21mX3NldF9wbWsoaWZwLCBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbiB9XG4gXG5AQCAtNjQyMiw2ICs2NDY2LDQ3IEBAIHN0YXRpYyBzMzIgYnJjbWZfZ2V0X2Fzc29jX2llcyhzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7XG4rXHRjb25zdCB1OCAqaWU7XG4rXHR1MzIgaWVfbGVuO1xuK1x0dTMyIG9mZnNldDtcbitcdHUxNiBjb3VudDtcbitcbitcdGlmICghcGFyc2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJzbl9pZSA9IGJyY21mX3BhcnNlX3RsdnMocGFyc2UsIGxlbiwgV0xBTl9FSURfUlNOKTtcbitcdGlmICghcnNuX2llKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZSA9IChjb25zdCB1OCAqKXJzbl9pZTtcbitcdGllX2xlbiA9IHJzbl9pZS1cdTAwM2VsZW4gKyBUTFZfSERSX0xFTjtcbitcbitcdG9mZnNldCA9IFRMVl9IRFJfTEVOICsgV1BBX0lFX1ZFUlNJT05fTEVOICsgV1BBX0lFX01JTl9PVUlfTEVOO1xuK1x0aWYgKG9mZnNldCArIFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gXHUwMDNlPSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNvdW50ID0gaWVbb2Zmc2V0XSArIChpZVtvZmZzZXQgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRvZmZzZXQgKz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiArIGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xuK1x0aWYgKG9mZnNldCArIFdQQV9JRV9TVUlURV9DT1VOVF9MRU4gXHUwMDNlPSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNvdW50ID0gaWVbb2Zmc2V0XSArIChpZVtvZmZzZXQgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRvZmZzZXQgKz0gV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiArIGNvdW50ICogV1BBX0lFX01JTl9PVUlfTEVOO1xuK1x0aWYgKG9mZnNldCArIFJTTl9DQVBfTEVOIFx1MDAzZT0gaWVfbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvZmZzZXQgKz0gUlNOX0NBUF9MRU47XG4rXHRpZiAob2Zmc2V0ICsgUlNOX1BNS0lEX0NPVU5UX0xFTiBcdTAwM2UgaWVfbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjb3VudCA9IGllW29mZnNldF0gKyAoaWVbb2Zmc2V0ICsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuK1xuK1x0cmV0dXJuIGNvdW50IFx1MDAzZSAwO1xuK31cbitcbiBzdGF0aWMgczMyXG4gYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtNjQzNiw2ICs2NTIxLDcgQEAgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0c3RydWN0IGJyY21mX2Jzc19pbmZvX2xlICpiaTtcbiBcdHN0cnVjdCBicmNtdV9jaGFuIGNoO1xuIFx0c3RydWN0IGNmZzgwMjExX3JvYW1faW5mbyByb2FtX2luZm8gPSB7fTtcbitcdGJvb2wgYXV0aG9yaXplZCA9IGZhbHNlO1xuIFx0dTMyIGZyZXE7XG4gXHRzMzIgZXJyID0gMDtcbiBcdHU4ICpidWY7XG5AQCAtNjQ4MiwxNCArNjU2OCwxOCBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRyb2FtX2luZm8ucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0cm9hbV9pbmZvLnJlc3BfaWVfbGVuID0gY29ubl9pbmZvLVx1MDAzZXJlc3BfaWVfbGVuO1xuIFxuK1x0aWYgKChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG4rXHQgICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGJyY21mX2hhc19wbWtpZChyb2FtX2luZm8ucmVxX2llLCByb2FtX2luZm8ucmVxX2llX2xlbikgfHxcbitcdCAgICAgcHJvZmlsZS1cdTAwM2Vpc19mdCB8fCBwcm9maWxlLVx1MDAzZWlzX29rYykpXG4rXHRcdGF1dGhvcml6ZWQgPSB0cnVlO1xuK1xuIFx0Y2ZnODAyMTFfcm9hbWVkKG5kZXYsIFx1MDAyNnJvYW1faW5mbywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoYXV0aG9yaXplZClcbitcdFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXHUwMDNlYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiBcdGJyY21mX2RiZyhDT05OLCBcIlJlcG9ydCByb2FtaW5nIHJlc3VsdFxcblwiKTtcbiBcbi1cdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFx1MDAyNlx1MDAyNiBwcm9maWxlLVx1MDAzZWlzX2Z0KSB7XG4tXHRcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVx1MDAzZWJzc2lkLCBOVUxMLCAwLCBHRlBfS0VSTkVMKTtcbi1cdFx0YnJjbWZfZGJnKENPTk4sIFwiUmVwb3J0IHBvcnQgYXV0aG9yaXplZFxcblwiKTtcbi1cdH1cbi1cbiBcdHNldF9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNURUQsIFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlc21lX3N0YXRlKTtcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCJFeGl0XFxuXCIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02NTA0LDYgKzY1OTQsNyBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSAqcHJvZmlsZSA9IFx1MDAyNmlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZTtcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9yZXNwX3BhcmFtcyBjb25uX3BhcmFtcztcbitcdGJvb2wgYXV0aG9yaXplZDtcbiBcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCJFbnRlclxcblwiKTtcbiBcbkBAIC02NTI4LDcgKzY2MTksMTUgQEAgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHRjb25uX3BhcmFtcy5yZXFfaWVfbGVuID0gY29ubl9pbmZvLVx1MDAzZXJlcV9pZV9sZW47XG4gXHRcdGNvbm5fcGFyYW1zLnJlc3BfaWUgPSBjb25uX2luZm8tXHUwMDNlcmVzcF9pZTtcbiBcdFx0Y29ubl9wYXJhbXMucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVzcF9pZV9sZW47XG4rXHRcdGF1dGhvcml6ZWQgPSBjb21wbGV0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxuK1x0XHRcdCAgICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBicmNtZl9oYXNfcG1raWQoY29ubl9wYXJhbXMucmVxX2llLFxuK1x0XHRcdFx0XHQgICAgIGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4pO1xuIFx0XHRjZmc4MDIxMV9jb25uZWN0X2RvbmUobmRldiwgXHUwMDI2Y29ubl9wYXJhbXMsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoYXV0aG9yaXplZClcbitcdFx0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbitcdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4gXHRcdGJyY21mX2RiZyhDT05OLCBcIlJlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcXG5cIixcbiBcdFx0XHQgIGNvbXBsZXRlZCA/IFwic3VjY2VlZGVkXCIgOiBcImZhaWxlZFwiKTtcbiBcdH1cbkBAIC03NzMxLDYgKzc4MzAsMTAgQEAgc3RhdGljIGludCBicmNtZl9zZXR1cF93aXBoeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcbiBcdH1cbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1NBRV9FWFQpKVxuIFx0XHR3aXBoeS1cdTAwM2VmZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfU0FFO1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRkJUKSB8fFxuK1x0ICAgIGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfT0tDKSlcbitcdFx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LFxuK1x0XHRcdFx0ICAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCk7XG4gXHR3aXBoeS1cdTAwM2VtZ210X3N0eXBlcyA9IGJyY21mX3R4cnhfc3R5cGVzO1xuIFx0d2lwaHktXHUwMDNlbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDtcbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BOTykpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2M2U1MzQ1MjNmNTE4Li4xYWE5OTM5MGE5NTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMTI3LDcgKzEyNyw4IEBAIGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB7XG4gXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUsXG4gXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSyxcbiBcdEJSQ01GX1BST0ZJTEVfRldTVVBfMVgsXG4tXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRVxuK1x0QlJDTUZfUFJPRklMRV9GV1NVUF9TQUUsXG4rXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU1cbiB9O1xuIFxuIC8qKlxuQEAgLTE2NCw2ICsxNjUsNyBAQCBlbnVtIGJyY21mX21nbXRfdHhfc3RhdHVzIHtcbiAgKiBAYnNzaWQ6IGJzc2lkIG9mIGpvaW5lZC9qb2luaW5nIGlic3MuXG4gICogQHNlYzogc2VjdXJpdHkgaW5mb3JtYXRpb24uXG4gICogQGtleToga2V5IGluZm9ybWF0aW9uXG4rICogQGlzX29rYzogT0tDIGlzIHVzZWQgZm9yIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgKi9cbiBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7XG4gXHR1OCBic3NpZFtFVEhfQUxFTl07XG5AQCAtMTcyLDYgKzE3NCw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdGVudW0gYnJjbWZfcHJvZmlsZV9md3N1cCB1c2VfZndzdXA7XG4gXHR1MTYgdXNlX2Z3YXV0aDtcbiBcdGJvb2wgaXNfZnQ7XG4rXHRib29sIGlzX29rYztcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXG5pbmRleCA0ODgzNjRlZjhmZjJhLi5jYzE5ZTVlN2ViZjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuY1xuQEAgLTQ1LDYgKzQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIGJyY21mX2Z3Y2FwX21hcFtdID0ge1xuIFx0eyBCUkNNRl9GRUFUX1NBRSwgXCJzYWUgXCIgfSxcbiBcdHsgQlJDTUZfRkVBVF9GV0FVVEgsIFwiaWRhdXRoXCIgfSxcbiBcdHsgQlJDTUZfRkVBVF9TQUVfRVhULCBcInNhZV9leHRcIiB9LFxuK1x0eyBCUkNNRl9GRUFUX0ZCVCwgXCJmYnQgXCIgfSxcbitcdHsgQlJDTUZfRkVBVF9PS0MsIFwib2tjXCIgfSxcbiB9O1xuIFxuICNpZmRlZiBERUJVR1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG5pbmRleCAzMWY4Njk1Y2E0MTc2Li44MTY1YTI4NmI2MzA4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaFxuQEAgLTU5LDcgKzU5LDkgQEBcbiBcdEJSQ01GX0ZFQVRfREVGKFNDQU5fVjIpIFxcXG4gXHRCUkNNRl9GRUFUX0RFRihQTUtJRF9WMikgXFxcbiBcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YzKSBcXFxuLVx0QlJDTUZfRkVBVF9ERUYoU0FFX0VYVClcbitcdEJSQ01GX0ZFQVRfREVGKFNBRV9FWFQpIFxcXG4rXHRCUkNNRl9GRUFUX0RFRihGQlQpIFxcXG4rXHRCUkNNRl9GRUFUX0RFRihPS0MpXG4gXG4gLypcbiAgKiBRdWlya3M6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjkyMGQ1ZTJkOTk2NjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtNzExMCw2ICs3MTEwLDEwIEBAIGVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHtcbiAgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9QUk9CRV9BUDogRHJpdmVyIHN1cHBvcnRzIHByb2JpbmcgdGhlIGFzc29jaWF0ZWQgQVBcbiAgKlx0aW4gU1RBIG1vZGUgdXNpbmcgQE5MODAyMTFfQ01EX1BST0JFX1BFRVIuXG4gICpcbisgKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRDogRHJpdmVyIHN1cHBvcnRzIGZhc3Qgcm9hbWluZ1xuKyAqXHRvZmZsb2FkIGluIHN0YXRpb24gbW9kZSwgaW5jbHVkaW5nIEZhc3QgVHJhbnNpdGlvbiBvciBPcHBvcnR1bmlzdGljXG4rICpcdEtleSBDYWNoaW5nLlxuKyAqXG4gICogQE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUzogbnVtYmVyIG9mIGV4dGVuZGVkIGZlYXR1cmVzLlxuICAqIEBNQVhfTkw4MDIxMV9FWFRfRkVBVFVSRVM6IGhpZ2hlc3QgZXh0ZW5kZWQgZmVhdHVyZSBpbmRleC5cbiAgKi9cbkBAIC03MTkyLDYgKzcxOTYsNyBAQCBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xuIFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9ST0NfQUREUl9GSUxURVIsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1NFVF9LRVlfTFRGX1NFRUQsXG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQLFxuK1x0Tkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRCxcbiBcbiBcdC8qIGFkZCBuZXcgZmVhdHVyZXMgYmVmb3JlIHRoZSBkZWZpbml0aW9uIGJlbG93ICovXG4gXHROVU1fTkw4MDIxMV9FWFRfRkVBVFVSRVMsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDQ0ZjJiYWQwODY3MDUuLmU0ODUwMTI5YTU4MmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTg0MzQsNiArMTg0MzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuK1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFx1MDAyNnJkZXYtXHUwMDNld2lwaHk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9O1xuQEAgLTE4NDQyLDcgKzE4NDQzLDkgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4rXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuK1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4gXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuQEAgLTE4NDcyLDYgKzE4NDc1LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4rXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIFx0Y29uc3QgdTggKmFhO1xuQEAgLTE4NDgwLDcgKzE4NDg0LDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICB3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4rXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdpcGh5LFxuK1x0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4gXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6MzY6NTEuOTIzNjIwODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTE3NzgwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRXZhbHVhdGlvbjogV2lyZWxlc3MgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXMgcmVsYXRlZCB0byB0aGUgYGJyY21mbWFjYCB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hY2AgZGlyZWN0b3J5LiBJdCBhbHNvIG1vZGlmaWVzIGBpbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oYCBhbmQgYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQncyBjb3JlIHdpcmVsZXNzIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29yZSBjaGFuZ2UgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgY2hlY2tzIHJlbGF0ZWQgdG8gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgLiBUaGlzIGludm9sdmVzIGV4dGVuZGluZyBhbiBleGlzdGluZyBjaGVjayB3aXRoIGBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEYC4gTm93LCB0aGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgYG5sODAyMTEuY2AgaGFuZGxlcyB0aGVzZSBjb21tYW5kcyB2aWEgZ2VuZXJpYyBuZXRsaW5rIChgTkw4MDIxMV9DTURfU0VUX1BNS2AgLyBgTkw4MDIxMV9DTURfREVMX1BNS2ApIGZyb20gdXNlcnNwYWNlLiBUaGF0J3MgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGZ1enppbmchIEFuZCwgaW1wb3J0YW50bHksIGBicmNtZm1hY2AgKmhhcyogVVNCIHN1cHBvcnQgKGBDT05GSUdfQlJDTUZNQUNfVVNCYCksIG1lYW5pbmcgaXQncyByZWFjaGFibGUgdmlhIGEgVVNCIGVtdWxhdGlvbiBzZXR1cCBpZiBuZWVkZWQsIG1ha2luZyBpdCBmdXp6YWJsZS4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZS5cblxuRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGluIHRoZSBgYnJjbWZtYWNgIGRyaXZlciBpdHNlbGYsIHBhcnRpY3VsYXJseSBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCwgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgLCBhbmQgYGJyY21mX2hhc19wbWtpZGAgbm93IGluY2x1ZGUgbmV3IHBhcnNpbmcgbG9naWMgYW5kIHNvbWUgYFdBUk5fT05gIGNoZWNrcy4gVGhhdCdzIGEgcmVkIGZsYWcgKGluIGEgZ29vZCB3YXkhKSwgaW1wbHlpbmcgbmV3IGNvZGUgcGF0aHMgYW5kIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdG8gZnV6emluZy4gVGhlc2UgY2hlY2tzIGFyZSBub3cgY2hlY2tpbmcgaWYgYGlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS51c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCBcdTAwMjZcdTAwMjYgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19mdCBcdTAwMjZcdTAwMjYgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19va2NgLiBUaGlzIGlzIGFsbCBjcml0aWNhbCBjb25maWd1cmF0aW9uIGFuZCBmbG93IGNvbnRyb2wgbG9naWMuXG5cblNvLCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgYW5kIHRoZSBjaGFuZ2VzIGluY2x1ZGUgbmV3IGxvZ2ljLCBwYXJ0aWN1bGFybHkgaW4gYSBwb3RlbnRpYWxseSBjb21wbGV4IGFyZWEgbGlrZSB3aXJlbGVzcyBzZWN1cml0eSBhbmQgcm9hbWluZy4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlIGFuZCBkZXBlbmRlbmNpZXMgbW9yZSBkZWVwbHkgKEtjb25maWcsIGV0Yy4pIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBCdXQgYmFzZWQgb24gdGhpcyBpbml0aWFsIGFuYWx5c2lzLCBpdCdzIGEgc3Ryb25nIHllcyBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNjo1OC40NDE0MDQ1MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4OTg4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5MODAyMTFfQ01EX1NFVF9QTUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNzEtXFx0e1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAwNzI6XFx0XFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUtTQSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMDczLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NTMtXFx0e1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA0NTQ6XFx0XFx0LmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QTUssXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ1NS1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM2OjU4LjcwMDQwMDIxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MTQ2Njk3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIENGRzgwMjExIGFuZCBCUkNNRk1BQyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29uZmlndXJhdGlvbiBpbnRlcmFjdGlvbnMgYmV0d2VlbiBDRkc4MDIxMSBhbmQgQlJDTUZNQUMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgZW5hYmxlZCwgYW55IGRlcGVuZGVuY2llcyB0aGF0IGV4aXN0LCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gYm90aCBkcml2ZXJzLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlaXIgYENPTkZJR19gIG9wdGlvbnMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgbW9kdWxlcyBvciBidWlsdC1pbiB0byB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBvcHRpb25zIHNldCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdW51c3VhbCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyB0aGF0IG1pZ2h0IG1hbmlmZXN0IGFzIGJ1aWxkIGVycm9ycyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGxhdGVyIG9uLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgc2VhbWxlc3MgaW50ZWdyYXRpb24sIHNvIEkgbXVzdCBjb25zaWRlciBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgd2lyZWxlc3Mgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjA0LjExNTA3MjQxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY3NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MDQuMjAzNzU5MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTAzNDEyNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgQlJDTTgwMjExIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHF1aXJrcyBiYWtlZCBpbnRvIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBlc3NlbnRpYWxseSBiZSBteSByb2FkbWFwIHRvIHNlZSB3aGF0IEJyb2FkY29tIGZlYXR1cmVzIGFuZCB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFuZCBob3cgdGhleSdyZSBleHBvc2VkIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MDcuMTA3MTc0MTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBCUkNNVVRJTFxcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIEJSQ01TTUFDXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gSUVFRTgwMi4xMW4gUENJZSBTb2Z0TUFDIFdMQU4gZHJpdmVyXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBCQ01BX1BPU1NJQkxFXFxuICAgOTpcXHRcXHRzZWxlY3QgQkNNQVxcbiAgMTA6XFx0XFx0c2VsZWN0IEJSQ01VVElMXFxuICAxMTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAxMjpcXHRcXHRzZWxlY3QgQ09SRElDXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUENJZSB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgMTU6XFx0XFx0ICBJRUVFODAyLjExbiBTb2Z0TUFDIGNoaXBzZXRzLiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCB0aGVcXG4gIDE2OlxcdFxcdCAgZHJpdmVyIHdpbGwgYmUgY2FsbGVkIGJyY21zbWFjLmtvLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgQlJDTVNNQUNfTEVEU1xcbiAgMTk6XFx0XFx0ZGVmX2Jvb2wgQlJDTVNNQUMgXFx1MDAyNlxcdTAwMjYgQkNNQV9EUklWRVJfR1BJTyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9MRURTXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFRoZSBicmNtc21hYyBMRUQgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGVcXG4gIDIyOlxcdFxcdCAgQkNNQV9EUklWRVJfR1BJTyBkcml2ZXIsIGFuZCBpdCBvbmx5IHdvcmtzIGlmIExFRCBzdXBwb3J0XFxuICAyMzpcXHRcXHQgIGlzIGVuYWJsZWQgYW5kIHJlYWNoYWJsZSBmcm9tIHRoZSBkcml2ZXIgbW9kdWxlLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlJDTV9UUkFDSU5HXFxuICAyODpcXHRcXHRib29sIFxcXCJCcm9hZGNvbSBkZXZpY2UgdHJhY2luZ1xcXCJcXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gQlJDTVNNQUMgfHwgQlJDTUZNQUNcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR1xcbiAgMzE6XFx0XFx0aGVscFxcbiAgMzI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlcnMgd2lsbCByZWdpc3RlclxcbiAgMzM6XFx0XFx0ICB3aXRoIGZ0cmFjZSB0byBkdW1wIGV2ZW50IGluZm9ybWF0aW9uIGludG8gdGhlIHRyYWNlIHJpbmdidWZmZXIuXFxuICAzNDpcXHRcXHQgIFRyYWNpbmcgY2FuIGJlIGVuYWJsZWQgYXQgcnVudGltZSB0byBhaWQgaW4gZGVidWdnaW5nIHdpcmVsZXNzXFxuICAzNTpcXHRcXHQgIGlzc3Vlcy4gVGhpcyBvcHRpb24gYWRkcyBhIHNtYWxsIGFtb3VudCBvZiBvdmVyaGVhZCB3aGVuIHRyYWNpbmdcXG4gIDM2OlxcdFxcdCAgaXMgZGlzYWJsZWQuIElmIHVuc3VyZSwgc2F5IFkgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byBiZXR0ZXIgaGVscFxcbiAgMzc6XFx0XFx0ICB5b3Ugd2hlbiB3aXJlbGVzcyBwcm9ibGVtcyBvY2N1ci5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIEJSQ01EQkdcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIkJyb2FkY29tIGRyaXZlciBkZWJ1ZyBmdW5jdGlvbnNcXFwiXFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIEJSQ01TTUFDIHx8IEJSQ01GTUFDXFxuICA0MjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVAgaWYgQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgU2VsZWN0aW5nIHRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIGNvZGUgZm9yIGRlYnVnIHB1cnBvc2VzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzowNy4xMDcyNDQ0MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc0MjE5NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBicmNtZm1hYyBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCcm9hZGNvbSBmdWxsbWFjIGRyaXZlciBjb25maWd1cmF0aW9uIGlzIHNldCB1cCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGtleSB0byB0aGF0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ludGF4OiBgY29uZmlnYCBibG9ja3MsIGBib29sYCBhbmQgYHRyaXN0YXRlYCBvcHRpb25zLCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIHB1bGwgaW4gc3VwcG9ydGluZyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGVscCB0ZXh0IHRvIGd1aWRlIHVzZXJzLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgb3B0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoZSBicmNtZm1hYyBkcml2ZXIgYXMgYSB3aG9sZSwgcGx1cyBhbnkgZ3JhbnVsYXIgY29udHJvbHMgZm9yIHNwZWNpZmljIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHZhcmlhbnRzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG5lZWQgdG8gYmUgcHJlc2VudCBmb3IgdGhlIGJyY21mbWFjIGRyaXZlciB0byBidWlsZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgaW4gaGVyZSwgYW55dGhpbmcgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCByZWd1bGF0b3J5IGRvbWFpbnMsIG9yIGZpcm13YXJlIGxvYWRpbmc/IFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBkcml2ZXIncyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gY29udHJpYnV0ZSB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4NCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MDkuNTgxNDY2NjM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBCUkNNRk1BQ1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgIDc6XFx0XFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXFxuICAgODpcXHRcXHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWRcXG4gICA5OlxcdFxcdCAgYnJjbWZtYWMua28uXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEJSQ01GTUFDX1NESU9cXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gKE1NQyA9IHkgfHwgTU1DID0gQlJDTUZNQUMpXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIEJSQ01GTUFDXFxuICAyMTpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbiAgMjI6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgMjY6XFx0XFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xcbiAgMjc6XFx0XFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYSBTRElPIHdpcmVsZXNzIGNhcmQuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBCUkNNRk1BQ19VU0JcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiAoVVNCID0geSB8fCBVU0IgPSBCUkNNRk1BQylcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDMzOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAzNDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAzNzpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAzODpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhbiBVU0Igd2lyZWxlc3MgY2FyZC5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuICA0NTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgNDg6XFx0XFx0ICBJRUVFODAyLjExYWMgZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDQ5OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFBDSUUgd2lyZWxlc3MgY2FyZC5cXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzowOS41ODE1ODI4MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5NTA0MDY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBXaXJlbGVzcyBGYXN0IFJvYW1pbmcgT2ZmbG9hZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gVGhpcyBwYXRjaCBoaXRzIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCB3aXRoIGNoYW5nZXMgdG8gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gTmV0bGluayBpbnRlcmZhY2VzIGFyZSBhbHdheXMgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIGBubDgwMjExYCBpcyBwYXJ0IG9mIHRoZSBjb3JlIHdpcmVsZXNzIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyB0aGF0J3MgYSBkaXJlY3Qgcm91dGUgaW4gdmlhIGBORVRMSU5LX0dFTkVSSUNgLlxuXG5UaGVuLCB3ZSBoYXZlIHRoZSBgYnJjbWZtYWNgIGRyaXZlciBjb2RlOiBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9oYXNfcG1raWRgLCBgYnJjbWZfYnNzX3JvYW1pbmdfZG9uZWAsIGBicmNtZl9ic3NfY29ubmVjdF9kb25lYCwgYW5kIGBicmNtZl9zZXR1cF93aXBoeWAuIFRoZSBwcmVzZW5jZSBvZiBib3RoIGRpcmVjdCBgbmw4MDIxMWAgdG91Y2hlcyBhbmQgdGhlIGRyaXZlciBjaGFuZ2VzIHN1Z2dlc3RzIHRoaXMgaXMgbGlrZWx5IGEgZ29vZCB0YXJnZXQuIFRoZSBgYnJjbWZtYWNgIGRyaXZlciBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZW11bGF0aW9uIChgQ09ORklHX0JSQ01GTUFDX1VTQmApIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZ2VuZXJpYyBuZXRsaW5rIGFuZCBjZmc4MDIxMSBvcGVyYXRpb25zIGxpa2UgYE5MODAyMTFfQ01EX0NPTk5FQ1RgLCBgTkw4MDIxMV9DTURfU0VUX1BNS2AsIGFuZCBgTkw4MDIxMV9DTURfREVMX1BNS2AuIFRoYXQncyBhIHNvbGlkIGF0dGFjayBzdXJmYWNlLlxuXG5UaGlzIHBhdGNoIGlzIGFkZGluZyBmYXN0IHJvYW1pbmcgb2ZmbG9hZCwgT0tDLCBQTUtJRCBwYXJzaW5nIHZpYSBgYnJjbWZfaGFzX3Bta2lkYCwgcG9ydCBhdXRob3JpemF0aW9uLCBhbmQgbW9kaWZ5aW5nIGRlZmVuc2l2ZSBhc3NlcnRpb25zIHdpdGggYFdBUk5fT05gIHdpdGhpbiB0aGUgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AgZnVuY3Rpb25zLiBUaGlzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoZSBjaGFuY2VzIG9mIGludGVyZXN0aW5nIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmU6XG4qICAgYG5sODAyMTFfc2V0X3Bta2BcbiogICBgbmw4MDIxMV9kZWxfcG1rYFxuKiAgIGBicmNtZl9zZXRfa2V5X21nbXRgXG4qICAgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgXG4qICAgYGJyY21mX2NmZzgwMjExX3NldF9wbWtgXG4qICAgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgXG4qICAgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgXG4qICAgYGJyY21mX3NldHVwX3dpcGh5YFxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgYnJjbWZfc2V0X2tleV9tZ210YCBpcyBzdGF0aWMgb3IgZXhwb3J0ZWQvdXNlZCBpbiBgY2ZnODAyMTEuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSBob3cgZGlyZWN0bHkgY29udHJvbGxhYmxlIGl0IGlzIGZyb20gYSB1c2VyLXNwYWNlIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIzMSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjE2LjQ3NjYyNjMyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NjY2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3NldF9rZXlfbWdtdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIxMDc9c3RhdGljIHMzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIxMDg6YnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTI0MTI9YnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI1MDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjUwOTpcXHRlcnIgPSBicmNtZl9zZXRfa2V5X21nbXQobmRldiwgc21lKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNTEwLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MTYuNjE1Mjk3MjU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyODY5MzA4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBicmNtZiBXaS1GaSBEcml2ZXIncyBQTUtJRCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgUE1LSURzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byByb2FtaW5nIGFuZCBjb25uZWN0aW9uIHByb2Nlc3Nlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYnJjbWZfaGFzX3Bta2lkYC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYGNmZzgwMjExLmNgLCBhbmQgdGhhdCdzIGFscmVhZHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIGludGVybmFsIHRvIHRoZSBmaWxlLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSBhIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBvbmx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBicmNtZl9oYXNfcG1raWRgIGFjdHVhbGx5ICp1c2VkKj8gQWgsIGl0J3MgY2FsbGVkIGZyb20gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAuIFRoYXQncyB0aGUga2V5LlxuXG5Ob3csIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAgYXJlIHRoZSBjcnVjaWFsIG5leHQgc3RlcHMuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgZ292ZXJuIHRoZSBjb21wbGV0aW9uIG9mIHRoZSByb2FtaW5nIGFuZCBjb25uZWN0aW9uIHByb2Nlc3NlcywgcmVzcGVjdGl2ZWx5LiBLbm93aW5nIGhvdyBgYnJjbWZfaGFzX3Bta2lkYCBpcyBpbnZvbHZlZCBpbiAqdGhvc2UqIGNvbXBsZXRpb24gcm91dGluZXMgaXMgZ29pbmcgdG8gdGVsbCBtZSBleGFjdGx5IGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdyBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg4NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjE5LjkwMjIzMDcwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5MTA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1ODg9c3RhdGljIHMzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY1ODk6YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY1OTAtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBjb25zdCBzdHJ1Y3QgYnJjbWZfZXZlbnRfbXNnICplLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjY4Nj1icmNtZl9ub3RpZnlfY29ubmVjdF9zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzE1LVxcdFxcdH0gZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY3MTY6XFx0XFx0XFx0YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShjZmcsIG5kZXYsIGUsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MTctXFx0XFx0YnJjbWZfbmV0X3NldGNhcnJpZXIoaWZwLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjczMDpcXHRcXHRcXHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgbmRldiwgZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3MzEtXFx0XFx0XFx0YnJjbWZfbGlua19kb3duKGlmcC1cXHUwMDNldmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjc0Ni1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc0NzpcXHRcXHRcXHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgbmRldiwgZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY3NDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Njc1ND1icmNtZl9ub3RpZnlfcm9hbWluZ19zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY1LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NjpcXHRcXHRcXHRicmNtZl9ic3NfY29ubmVjdF9kb25lKGNmZywgaWZwLVxcdTAwM2VuZGV2LCBlLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY3LVxcdFxcdFxcdGJyY21mX25ldF9zZXRjYXJyaWVyKGlmcCwgdHJ1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjE5Ljk5NTE0NzQ0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI1ODU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBXaUZpIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipFeGFtaW5pbmcgYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgSSBrbm93IGl0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgZmluYWwgaGFuZHNoYWtlIGFuZCBjb21wbGV0aW9uIHN0YXRlIGZvciBhIEJTUyAoQmFzaWMgU2VydmljZSBTZXQpIHJvYW1pbmcgZXZlbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCB3aGF0IGl0ICpzaG91bGQqIGJlIGRvaW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSByb2FtaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBCcm9hZGNvbSBXaUZpIGRyaXZlci4gSXMgaXQgc2ltcGx5IGEgbm90aWZpY2F0aW9uIGJhY2sgdG8gdGhlIHVwcGVyIGxheWVycywgb3IgaXMgaXQgbW9yZSBjb21wbGV4IHRoYW4gdGhhdCwgaGFuZGxpbmcgdGhpbmdzIGxpa2Ugc2VjdXJpdHkga2V5IHJlZnJlc2ggb3IgdXBkYXRpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGU/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBpbnB1dHMsIG91dHB1dHMsIGFuZCBhbnkgaW1wb3J0YW50IHNpZGUgZWZmZWN0cyB0aGlzIGZ1bmN0aW9uIGhhcyBvbiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbS4gQSBxdWljayBjaGVjayBvZiBpdHMgY2FsbCBncmFwaCBpcyBkZWZpbml0ZWx5IGluIG9yZGVyIHRvIHNlZSB3aGVyZSBpdCBzaXRzIGluIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBiZSBwcmVzZW50IGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgbG9ja2luZyBpc3N1ZXMgYW5kIGFjY2VzcyB0byBzaGFyZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4MiwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjIzLjIyMTAwMzg5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5ODkwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYnNzX3JvYW1pbmdfZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY1MTA9c3RhdGljIHMzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjY1MTE6YnJjbWZfYnNzX3JvYW1pbmdfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY1MTItXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Njc1ND1icmNtZl9ub3RpZnlfcm9hbWluZ19zdGF0dXMoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzYzLVxcdFxcdFxcdCAgICAgXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Njc2NDpcXHRcXHRcXHRicmNtZl9ic3Nfcm9hbWluZ19kb25lKGNmZywgaWZwLVxcdTAwM2VuZGV2LCBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NzY1LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjIzLjMxNTk5NzM3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM4NjUyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQnJvYWRjb20gV2ktRmkgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCcm9hZGNvbSdzIGZlYXR1cmVzIGFyZSBpbml0aWFsaXplZCBhbmQgYXR0YWNoZWQgd2l0aGluIHRoZWlyIHdpcmVsZXNzIGRyaXZlci4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgdGhlIGBicmNtZl9mZWF0X2F0dGFjaGAgZnVuY3Rpb24uIFNvLCBsZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uIGFuZCBzZXR1cCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBoYW5kc2hha2UgYmV0d2VlbiB0aGUgZmlybXdhcmUgYW5kIHRoZSBkcml2ZXIgdGFrZXMgcGxhY2UsIEknbSBzdXJlIG9mIGl0LiBUaGlzIHdpbGwgc2hvdyBtZSB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIG1hbmFnZWQuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGZlYXR1cmUgc2V0cyBhbmQgd2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBjb25maWd1cmUgdGhvc2UgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEknbGwgc3RhcnQgd29ya2luZyBvdXR3YXJkcyBpbnRvIHRoZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODczLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MjUuODU0NjUzMzA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjUwMzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9md2NhcF9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTMyPXN0cnVjdCBicmNtZl9mZWF0X2Z3Y2FwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzozNzpzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0zOC1cXHR7IEJSQ01GX0ZFQVRfTUJTUywgXFxcIm1ic3NcXFwiIH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTIzMD1zdGF0aWMgdm9pZCBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ1OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJyY21mX2Z3Y2FwX21hcCk7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ2OlxcdFxcdGlmIChzdHJuc3RyKGNhcHMsIGJyY21mX2Z3Y2FwX21hcFtpXS5md2NhcF9pZCwgc2l6ZW9mKGNhcHMpKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjQ3OlxcdFxcdFxcdGlkID0gYnJjbWZfZndjYXBfbWFwW2ldLmZlYXR1cmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yNDgtXFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJlbmFibGluZyBmZWF0dXJlOiAlc1xcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MjUuOTIxMTYyMDU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODY4MDE4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIFBNSyBNYW5hZ2VtZW50IGluIG5sODAyMTEuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgYWdhaW4uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IFBNS3MgKFBhaXJ3aXNlIE1hc3RlciBLZXlzKSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBubDgwMjExYCBzdWJzeXN0ZW0uIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYW5kIGRlbGV0aW5nIHRoZXNlIGtleXMg4oCTIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gSSBuZWVkIHRvIHJldmlldyBgbmw4MDIxMV9zZXRfcG1rYCBhbmQgYG5sODAyMTFfZGVsX3Bta2AgZnVuY3Rpb25zIGluIHRoYXQgc291cmNlIGZpbGUsIG9mIGNvdXJzZS4gSSdsbCBhbmFseXplIGhvdyB0aGUgUE1LIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGlvbiBvciBuZXR3b3JrLCBhbmQgd2hhdCBjb25zaWRlcmF0aW9ucyBhcmUgbWFkZSBmb3Igc2VjdXJpdHksIHJldm9jYXRpb24sIGFuZCBhbGwgdGhhdCBmdW4gc3R1ZmYgdGhhdCdzIGNyaXRpY2FsIGluIGEgV2ktRmkgZW52aXJvbm1lbnQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjI4LjMwNzk2NjI0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg0MzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDMwOlxcdFxcbjE4NDMxOlxcdFxcdHJldHVybiByZGV2X3NldF9tdWx0aWNhc3RfdG9fdW5pY2FzdChyZGV2LCBkZXYsIGVuYWJsZWQpO1xcbjE4NDMyOlxcdH1cXG4xODQzMzpcXHRcXG4xODQzNDpcXHRzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NDM1OlxcdHtcXG4xODQzNjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODQzNzpcXHRcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5O1xcbjE4NDM4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODQzOTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NDQwOlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9wbWtfY29uZiBwbWtfY29uZiA9IHt9O1xcbjE4NDQxOlxcdFxcbjE4NDQyOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbjE4NDQzOlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcXG4xODQ0NDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0NDU6XFx0XFxuMTg0NDY6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ0NzpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuMTg0NDg6XFx0XFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ0OTpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcXG4xODQ1MDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0NTE6XFx0XFxuMTg0NTI6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pXFxuMTg0NTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg0NTQ6XFx0XFxuMTg0NTU6XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2Vjb25uZWN0ZWQpXFxuMTg0NTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4xODQ1NzpcXHRcXG4xODQ1ODpcXHRcXHRwbWtfY29uZi5hYSA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4xODQ1OTpcXHRcXHRpZiAobWVtY21wKHBta19jb25mLmFhLCB3ZGV2LVxcdTAwM2V1LmNsaWVudC5jb25uZWN0ZWRfYWRkciwgRVRIX0FMRU4pKVxcbjE4NDYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NDYxOlxcdFxcbjE4NDYyOlxcdFxcdHBta19jb25mLnBtayA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKTtcXG4xODQ2MzpcXHRcXHRwbWtfY29uZi5wbWtfbGVuID0gbmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LXSk7XFxuMTg0NjQ6XFx0XFx0aWYgKHBta19jb25mLnBta19sZW4gIT0gV0xBTl9QTUtfTEVOIFxcdTAwMjZcXHUwMDI2XFxuMTg0NjU6XFx0XFx0ICAgIHBta19jb25mLnBta19sZW4gIT0gV0xBTl9QTUtfTEVOX1NVSVRFX0JfMTkyKVxcbjE4NDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NDY3OlxcdFxcbjE4NDY4OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LUjBfTkFNRV0pXFxuMTg0Njk6XFx0XFx0XFx0cG1rX2NvbmYucG1rX3IwX25hbWUgPVxcbjE4NDcwOlxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtSMF9OQU1FXSk7XFxuMTg0NzE6XFx0XFxuMTg0NzI6XFx0XFx0cmV0dXJuIHJkZXZfc2V0X3BtayhyZGV2LCBkZXYsIFxcdTAwMjZwbWtfY29uZik7XFxuMTg0NzM6XFx0fVxcbjE4NDc0OlxcdFxcbjE4NDc1OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTg0NzY6XFx0e1xcbjE4NDc3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbjE4NDc4OlxcdFxcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxuMTg0Nzk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjE4NDgwOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuMTg0ODE6XFx0XFx0Y29uc3QgdTggKmFhO1xcbjE4NDgyOlxcdFxcbjE4NDgzOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbjE4NDg0OlxcdFxcdCAgICB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVClcXG4xODQ4NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0ODY6XFx0XFxuMTg0ODc6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ4ODpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuMTg0ODk6XFx0XFx0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcXG4xODQ5MDpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfNFdBWV9IQU5EU0hBS0VfU1RBXzFYKSlcXG4xODQ5MTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0OTI6XFx0XFxuMTg0OTM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG4xODQ5NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODQ5NTpcXHRcXG4xODQ5NjpcXHRcXHRhYSA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4xODQ5NzpcXHRcXHRyZXR1cm4gcmRldl9kZWxfcG1rKHJkZXYsIGRldiwgYWEpO1xcbjE4NDk4OlxcdH1cXG4xODQ5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MjguMzA5MTAxOTY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMDc4MzE0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgV2lyZWxlc3MgRmFzdCBSb2FtIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIGBDRkc4MDIxMWAgaXMgZXNzZW50aWFsLCBuYXR1cmFsbHksIGFzIGl0J3MgdGhlIGNvcmUgODAyLjExIHdpcmVsZXNzIHN1cHBvcnQgYW5kIGNydWNpYWwgZm9yIGBubDgwMjExLmNgLiBUaGVuIHdlIGhhdmUgYEJSQ01GTUFDYCBmb3IgdGhlIEJyb2FkY29tIEZ1bGxNQUMgZHJpdmVyIGFuZCBgQlJDTUZNQUNfVVNCYCBmb3IgdGhlIFVTQiB2YXJpYW50LiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGBDRkc4MDIxMWAgZGVwZW5kcyBvbiBgTkVUYCBhbmQgYFdJUkVMRVNTYCDigJMgeWVwLCB0aGF0IGFsaWducyB3aXRoIGV4cGVjdGF0aW9ucy5cblxuTG9va2luZyBpbnRvIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgY29uZmlybXMgYENGRzgwMjExYCBkZXBlbmRzIG9uIGBSRktJTExgIChvciBpdHMgaW52ZXJzZSkgYW5kIHNlbGVjdHMgYEZXX0xPQURFUmAsIHdoaWNoIGlzIHN0YW5kYXJkLiBgQlJDTUZNQUNgIGluIHR1cm4gZGVwZW5kcyBvbiBgQ0ZHODAyMTFgIGFuZCBzZWxlY3RzIGBCUkNNVVRJTGAsIG1ha2VzIHNlbnNlLiBgQlJDTUZNQUNfVVNCYCBidWlsZHMgb24gYEJSQ01GTUFDYCBhbmQgbmVlZHMgZWl0aGVyIGBVU0IgPSB5YCBvciBgVVNCID0gQlJDTUZNQUNgLCBhbmQgc2VsZWN0cyBgQlJDTUZNQUNfUFJPVE9fQkNEQ2AgYW5kIGBGV19MT0FERVJgLiBBbHJpZ2h0LCBhbGwgdGhlIGRlcGVuZGVuY2llcyBjaGVjayBvdXQuXG5cbk5leHQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gSSBzZWUgYG5sODAyMTFfc2V0X3Bta2AsIGBubDgwMjExX2RlbF9wbWtgLCBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta2AsIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYCwgYGJyY21mX2Jzc19jb25uZWN0X2RvbmVgLCBhbmQgYGJyY21mX3NldHVwX3dpcGh5YC4gWWVzLCB0aGVzZSBhcmUgYWxsIHF1aXRlIHNwZWNpZmljIHRvIG5ldGxpbmssIEJyb2FkY29tLCBQTUsgY29uZmlndXJhdGlvbiwgY29ubmVjdGlvbiBhbmQgcm9hbWluZyBoYW5kbGluZyDigJMgdGhlc2UgYXJlIGNlcnRhaW5seSBnb29kIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGV2ZXJ5dGhpbmcgYmVmb3JlIEkgY29tbWl0IHRoaXMgYW5hbHlzaXMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGRlZmluaXRlbHkgdHJ1ZTsgdGhpcyBpcyBhIGNsZWFyIGFyZWEgZm9yIGZ1enppbmcuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHdlJ3JlIHRhbGtpbmcgYWJvdXQgZmFzdCByb2FtIG9mZmxvYWQgKEZCVC9PS0MpIHN1cHBvcnQsIFBNSyBjb25maWd1cmF0aW9uIGNoYW5nZXMgc3Bhbm5pbmcgbmV0bGluayAoYG5sODAyMTEuY2ApIGFuZCB0aGUgQnJvYWRjb20gZHJpdmVyIChgYnJjbWZtYWNgKS4gSXQncyBtb2RpZnlpbmcgbmV0bGluayBwZXJtaXNzaW9uIGNoZWNrcyBpbiBrZXkgcGF0aHMsIGFkZGluZyBQTUtJRCBwYXJzaW5nLCBhbmQgYWx0ZXJpbmcgYXV0aG9yaXphdGlvbiBsb2dpYyBkdXJpbmcgY29ubmVjdGlvbnMgYW5kIHJvYW1pbmcuIEFsc28gdGhlcmUgYXJlIGBXQVJOX09OYCBhc3NlcnRpb25zIGluIGtleSBtYW5hZ2VtZW50IGFuZCBQTUsgc2V0dGluZyBwYXRocy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChgTkw4MDIxMWApIGFuZCB2aXJ0dWFsIHdpcmVsZXNzL1VTQiBpbnRlcmZhY2VzLlxuXG5UaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0OiBgW1wiQ0ZHODAyMTFcIiwgXCJCUkNNRk1BQ1wiLCBcIkJSQ01GTUFDX1VTQlwiXWAuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgd2hhdCBJIGlkZW50aWZpZWQ6IGBbXCJubDgwMjExX3NldF9wbWtcIiwgXCJubDgwMjExX2RlbF9wbWtcIiwgXCJicmNtZl9zZXRfa2V5X21nbXRcIiwgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta1wiLCBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIiwgXCJicmNtZl9ic3NfY29ubmVjdF9kb25lXCIsIFwiYnJjbWZfc2V0dXBfd2lwaHlcIl1gLlxuXG5JJ3ZlIGNoZWNrZWQgb3ZlciB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzIG9uZSBsYXN0IHRpbWUuIFRoZXJlIGRvbid0IHNlZW0gdG8gYmUgYW55IG90aGVyIGltbWVkaWF0ZSByZWQgZmxhZ3MuIEl0IGFsbCBsb29rcyBjb21wcmVoZW5zaXZlIGFuZCB3ZWxsLWRlZmluZWQuIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MDEsIk91dHB1dFRva2VucyI6Mjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6MzYuNTE2OTM2MDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDcxNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfc2V0X3Bta1wiLFxuICAgIFwibmw4MDIxMV9kZWxfcG1rXCIsXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtcIixcbiAgICBcImJyY21mX2Jzc19yb2FtaW5nX2RvbmVcIixcbiAgICBcImJyY21mX2Jzc19jb25uZWN0X2RvbmVcIixcbiAgICBcImJyY21mX3NldHVwX3dpcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmYXN0IHJvYW1pbmcgb2ZmbG9hZCAoRkJUIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZyAtIE9LQykgYW5kIFBNSyBvZmZsb2FkIGFjcm9zcyB0aGUgY29yZSBubDgwMjExIHN1YnN5c3RlbSBhbmQgdGhlIGJyY21mbWFjIGRyaXZlci4gSXQgdXBkYXRlcyBuZXRsaW5rIHZhbGlkYXRpb24gbG9naWMgaW4gbmw4MDIxMV9zZXRfcG1rL25sODAyMTFfZGVsX3BtaywgaW50cm9kdWNlcyBSU04gUE1LSUQgSUUgcGFyc2luZywgbW9kaWZpZXMgY29ubmVjdCBhbmQgcm9hbSBjb21wbGV0aW9uIHN0YXRlIGhhbmRsaW5nLCBhbmQgdXBkYXRlcyBXQVJOX09OIGFzc2VydGlvbnMgaW4gY29ubmVjdGlvbi9QTUsgY29uZmlndXJhdGlvbiBwYXRocy4gVGhlc2UgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKG5sODAyMTEpIGFuZCB2aXJ0dWFsaXplZCBVU0IgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX3NldF9wbWtcIixcbiAgICBcIm5sODAyMTFfZGVsX3Bta1wiLFxuICAgIFwiYnJjbWZfc2V0X2tleV9tZ210XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rXCIsXG4gICAgXCJicmNtZl9ic3Nfcm9hbWluZ19kb25lXCIsXG4gICAgXCJicmNtZl9ic3NfY29ubmVjdF9kb25lXCIsXG4gICAgXCJicmNtZl9zZXR1cF93aXBoeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmFzdCByb2FtaW5nIG9mZmxvYWQgKEZCVCAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcgLSBPS0MpIGFuZCBQTUsgb2ZmbG9hZCBhY3Jvc3MgdGhlIGNvcmUgbmw4MDIxMSBzdWJzeXN0ZW0gYW5kIHRoZSBicmNtZm1hYyBkcml2ZXIuIEl0IHVwZGF0ZXMgbmV0bGluayB2YWxpZGF0aW9uIGxvZ2ljIGluIG5sODAyMTFfc2V0X3Btay9ubDgwMjExX2RlbF9wbWssIGludHJvZHVjZXMgUlNOIFBNS0lEIElFIHBhcnNpbmcsIG1vZGlmaWVzIGNvbm5lY3QgYW5kIHJvYW0gY29tcGxldGlvbiBzdGF0ZSBoYW5kbGluZywgYW5kIHVwZGF0ZXMgV0FSTl9PTiBhc3NlcnRpb25zIGluIGNvbm5lY3Rpb24vUE1LIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZXNlIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSB2aWEgR2VuZXJpYyBOZXRsaW5rIChubDgwMjExKSBhbmQgdmlydHVhbGl6ZWQgVVNCIGRldmljZSBkcml2ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzozNi42NTkwMTc2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDQwNzg4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzozNi42NjE3Nzk4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MTQxMzExNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBmYXN0IHJvYW0gb2ZmbG9hZCAoRmFzdCBCU1MgVHJhbnNpdGlvbiAvIE9wcG9ydHVuaXN0aWMgS2V5IENhY2hpbmcpIGluIHRoZSBicmNtZm1hYyBkcml2ZXIgYW5kIHRoZSBubDgwMjExIHN1YnN5c3RlbS5cXG5cXG5LZXkgb2JzZXJ2YXRpb25zIHJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3RhY2sgYW5kIGhlYXAgdmFyaWFibGVzIChlLmcuLCBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCwgYHBta19jb25mYCkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byBhbnkgcmVhZC4gYG9rY19lbmFibGVgIGlzIG9ubHkgYWNjZXNzZWQgaWYgYGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldGAgc3VjY2Vzc2Z1bGx5IHJldHVybnMgMC5cXG4yLiBUaGUgYHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlYCBmaWVsZHMgKGBpc19va2NgLCBgaXNfZnRgLCBgdXNlX2Z3c3VwYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb24gY29ubmVjdGlvbiBzZXR1cCAoYGJyY21mX3NldF9rZXlfbWdtdGApLlxcbjMuIFRoZSBuZXcgSUUgcGFyc2luZyBmdW5jdGlvbiBgYnJjbWZfaGFzX3Bta2lkYCBvcGVyYXRlcyB3aXRoIGxlbmd0aCBhbmQgb2Zmc2V0IGJvdW5kcyBjaGVja3Mgb24gaW5jb21pbmcgSUUgYnl0ZSBhcnJheXM7IGFueSBvdXQtb2YtYm91bmRzIHJlYWRpbmcgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuNC4gTm8ga2VybmVsIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBpb2N0bCwgb3IgY29weV90b191c2VyLlxcblxcbkJlY2F1c2UgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOGExOGQ2ODYwYjdkZTRiNWFkMTczYzZiMTAyYmIyODdmZmUwZTcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6MzY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA4NzJjNDg4MDZkMDkxLi41MTlkZTk2YjA0MmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5AQCAtMjExMiw5ICsyMTEyLDExIEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRzMzIgdmFsO1xuIFx0czMyIGVycjtcbitcdHMzMiBva2NfZW5hYmxlO1xuIFx0Y29uc3Qgc3RydWN0IGJyY21mX3RsdiAqcnNuX2llO1xuIFx0Y29uc3QgdTggKmllO1xuIFx0dTMyIGllX2xlbjtcbitcdGJvb2wgZndzdXBfcm9hbTtcbiBcdHUzMiBvZmZzZXQ7XG4gXHR1MTYgcnNuX2NhcDtcbiBcdHUzMiBtZnA7XG5AQCAtMjEyMiw2ICsyMTI0LDkgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcbiBcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FO1xuIFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IGZhbHNlO1xuK1x0cHJvZmlsZS1cdTAwM2Vpc19va2MgPSBmYWxzZTtcbitcdGZ3c3VwX3JvYW0gPSBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZCVCkgfHxcbitcdFx0ICAgICBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX09LQyk7XG4gXG4gXHRpZiAoIXNtZS1cdTAwM2VjcnlwdG8ubl9ha21fc3VpdGVzKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yMTM4LDYgKzIxNDMsOCBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEO1xuIFx0XHRcdGlmIChzbWUtXHUwMDNld2FudF8xeClcbiBcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcbitcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuK1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOlxuIFx0XHRcdHZhbCA9IFdQQV9BVVRIX1BTSztcbkBAIC0yMTUzLDExICsyMTYwLDE1IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1VOU1BFQ0lGSUVEO1xuIFx0XHRcdGlmIChzbWUtXHUwMDNld2FudF8xeClcbiBcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWDtcbitcdFx0XHRlbHNlIGlmIChmd3N1cF9yb2FtKVxuK1x0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1JPQU07XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfODAyMVhfU0hBMjU2OlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XG4gXHRcdFx0aWYgKHNtZS1cdTAwM2V3YW50XzF4KVxuIFx0XHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYO1xuK1x0XHRcdGVsc2UgaWYgKGZ3c3VwX3JvYW0pXG4rXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0FLTV9TVUlURV9QU0tfU0hBMjU2OlxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xuQEAgLTIxNzAsMTAgKzIxODEsMTYgQEAgYnJjbWZfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbiBcdFx0XHRpZiAoc21lLVx1MDAzZXdhbnRfMXgpXG4gXHRcdFx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVg7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX0ZUX1BTSzpcbiBcdFx0XHR2YWwgPSBXUEEyX0FVVEhfUFNLIHwgV1BBMl9BVVRIX0ZUO1xuIFx0XHRcdHByb2ZpbGUtXHUwMDNlaXNfZnQgPSB0cnVlO1xuK1x0XHRcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4rXHRcdFx0ZWxzZSBpZiAoZndzdXBfcm9hbSlcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XG4gXHRcdFx0dmFsID0gV0ZBX0FVVEhfRFBQO1xuQEAgLTIyMDQsOCArMjIyMSwyMiBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFxuIFx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpXG4gXHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIDFYIG9mZmxvYWRcXG5cIik7XG4rXG4rXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxuK1x0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkge1xuK1x0XHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcIm9rY19lbmFibGVcIixcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm9rY19lbmFibGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJnZXQgb2tjX2VuYWJsZSBmYWlsZWQgKCVkKVxcblwiLCBlcnIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGJyY21mX2RiZyhJTkZPLCBcIm9rY19lbmFibGUgKCVkKVxcblwiLCBva2NfZW5hYmxlKTtcbitcdFx0XHRwcm9maWxlLVx1MDAzZWlzX29rYyA9IG9rY19lbmFibGU7XG4rXHRcdH1cbitcdH1cbiBcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSlcbiBcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgU0FFIG9mZmxvYWRcXG5cIik7XG4rXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKVxuK1x0XHRicmNtZl9kYmcoSU5GTywgXCJ1c2luZyByb2FtaW5nIG9mZmxvYWRcXG5cIik7XG4gXG4gXHRpZiAoIWJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTUZQKSlcbiBcdFx0Z290byBza2lwX21mcF9jb25maWc7XG5AQCAtMjQ5NCwxMyArMjUyNSwxNCBAQCBicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0XHRpZiAoc21lLVx1MDAzZWNyeXB0by5wc2sgXHUwMDI2XHUwMDI2ICFpc19zYWVfYWttIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuLVx0XHRcdFx0ICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcbitcdFx0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4rXHRcdFx0XHRicmNtZl9kYmcoSU5GTywgXCJ1c2luZyBQU0sgb2ZmbG9hZFxcblwiKTtcbitcdFx0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4rXHRcdFx0fSBlbHNlIGlmIChXQVJOX09OKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9XG4rXHRcdFx0XHRcdCAgIEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKSkge1xuIFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0XHR9XG4tXHRcdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgUFNLIG9mZmxvYWRcXG5cIik7XG4tXHRcdFx0cHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSztcbiBcdFx0fVxuIFx0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4gXHRcdFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXG5AQCAtNTk1MywxNyArNTk4NSwyOSBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NldF9wbWsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNmZzgwMjExX3Bta19jb25mICpjb25mKVxuIHtcbiBcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuK1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbitcdGludCByZXQ7XG4gXG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwiZW50ZXJcXG5cIik7XG4gXG4tXHQvKiBleHBlY3QgdXNpbmcgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgMVggKi9cbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpZiAoV0FSTl9PTihpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUudXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfMVgpKVxuK1x0ZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuK1x0aWYgKFdBUk5fT04oaWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlLnVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWlmcC1cdTAwM2V2aWYtXHUwMDNlcHJvZmlsZS5pc19mdCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUuaXNfb2tjKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoY29uZi1cdTAwM2VwbWtfbGVuIFx1MDAzZSBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbitcdGlmIChpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGUuaXNfb2tjKSB7XG4rXHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwib2tjX2luZm9fcG1rXCIsXG4rXHRcdFx0XHRcdCAgICAgICBjb25mLVx1MDAzZXBtaywgY29uZi1cdTAwM2VwbWtfbGVuKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRicGh5X2VycihkcnZyLCBcIm9rY19pbmZvX3BtayBpb3ZhciBmYWlsZWQ6IHJldD0lZFxcblwiLFxuK1x0XHRcdFx0IHJldCk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gYnJjbWZfc2V0X3BtayhpZnAsIGNvbmYtXHUwMDNlcG1rLCBjb25mLVx1MDAzZXBta19sZW4pO1xuIH1cbiBcbkBAIC02NDIyLDYgKzY0NjYsNDcgQEAgc3RhdGljIHMzMiBicmNtZl9nZXRfYXNzb2NfaWVzKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBicmNtZl9oYXNfcG1raWQoY29uc3QgdTggKnBhcnNlLCB1MzIgbGVuKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKnJzbl9pZTtcbitcdGNvbnN0IHU4ICppZTtcbitcdHUzMiBpZV9sZW47XG4rXHR1MzIgb2Zmc2V0O1xuK1x0dTE2IGNvdW50O1xuK1xuK1x0aWYgKCFwYXJzZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cyhwYXJzZSwgbGVuLCBXTEFOX0VJRF9SU04pO1xuK1x0aWYgKCFyc25faWUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGllID0gKGNvbnN0IHU4ICopcnNuX2llO1xuK1x0aWVfbGVuID0gcnNuX2llLVx1MDAzZWxlbiArIFRMVl9IRFJfTEVOO1xuK1xuK1x0b2Zmc2V0ID0gVExWX0hEUl9MRU4gKyBXUEFfSUVfVkVSU0lPTl9MRU4gKyBXUEFfSUVfTUlOX09VSV9MRU47XG4rXHRpZiAob2Zmc2V0ICsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiBcdTAwM2U9IGllX2xlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y291bnQgPSBpZVtvZmZzZXRdICsgKGllW29mZnNldCArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdG9mZnNldCArPSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47XG4rXHRpZiAob2Zmc2V0ICsgV1BBX0lFX1NVSVRFX0NPVU5UX0xFTiBcdTAwM2U9IGllX2xlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y291bnQgPSBpZVtvZmZzZXRdICsgKGllW29mZnNldCArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdG9mZnNldCArPSBXUEFfSUVfU1VJVEVfQ09VTlRfTEVOICsgY291bnQgKiBXUEFfSUVfTUlOX09VSV9MRU47XG4rXHRpZiAob2Zmc2V0ICsgUlNOX0NBUF9MRU4gXHUwMDNlPSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG9mZnNldCArPSBSU05fQ0FQX0xFTjtcbitcdGlmIChvZmZzZXQgKyBSU05fUE1LSURfQ09VTlRfTEVOIFx1MDAzZSBpZV9sZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNvdW50ID0gaWVbb2Zmc2V0XSArIChpZVtvZmZzZXQgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXG4rXHRyZXR1cm4gY291bnQgXHUwMDNlIDA7XG4rfVxuK1xuIHN0YXRpYyBzMzJcbiBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbkBAIC02NDM2LDYgKzY1MjEsNyBAQCBicmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRzdHJ1Y3QgYnJjbWZfYnNzX2luZm9fbGUgKmJpO1xuIFx0c3RydWN0IGJyY211X2NoYW4gY2g7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcm9hbV9pbmZvIHJvYW1faW5mbyA9IHt9O1xuK1x0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHR1MzIgZnJlcTtcbiBcdHMzMiBlcnIgPSAwO1xuIFx0dTggKmJ1ZjtcbkBAIC02NDgyLDE0ICs2NTY4LDE4IEBAIGJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHJvYW1faW5mby5yZXNwX2llID0gY29ubl9pbmZvLVx1MDAzZXJlc3BfaWU7XG4gXHRyb2FtX2luZm8ucmVzcF9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVzcF9pZV9sZW47XG4gXG4rXHRpZiAoKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggfHxcbitcdCAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoYnJjbWZfaGFzX3Bta2lkKHJvYW1faW5mby5yZXFfaWUsIHJvYW1faW5mby5yZXFfaWVfbGVuKSB8fFxuK1x0ICAgICBwcm9maWxlLVx1MDAzZWlzX2Z0IHx8IHByb2ZpbGUtXHUwMDNlaXNfb2tjKSlcbitcdFx0YXV0aG9yaXplZCA9IHRydWU7XG4rXG4gXHRjZmc4MDIxMV9yb2FtZWQobmRldiwgXHUwMDI2cm9hbV9pbmZvLCBHRlBfS0VSTkVMKTtcbitcdGlmIChhdXRob3JpemVkKVxuK1x0XHRjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWQobmRldiwgcHJvZmlsZS1cdTAwM2Vic3NpZCwgTlVMTCwgMCxcbitcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuIFx0YnJjbWZfZGJnKENPTk4sIFwiUmVwb3J0IHJvYW1pbmcgcmVzdWx0XFxuXCIpO1xuIFxuLVx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfMVggXHUwMDI2XHUwMDI2IHByb2ZpbGUtXHUwMDNlaXNfZnQpIHtcbi1cdFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXHUwMDNlYnNzaWQsIE5VTEwsIDAsIEdGUF9LRVJORUwpO1xuLVx0XHRicmNtZl9kYmcoQ09OTiwgXCJSZXBvcnQgcG9ydCBhdXRob3JpemVkXFxuXCIpO1xuLVx0fVxuLVxuIFx0c2V0X2JpdChCUkNNRl9WSUZfU1RBVFVTX0NPTk5FQ1RFRCwgXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2VzbWVfc3RhdGUpO1xuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkV4aXRcXG5cIik7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTY1MDQsNiArNjU5NCw3IEBAIGJyY21mX2Jzc19jb25uZWN0X2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlO1xuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcbiBcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zO1xuK1x0Ym9vbCBhdXRob3JpemVkO1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkVudGVyXFxuXCIpO1xuIFxuQEAgLTY1MjgsNyArNjYxOSwxNSBAQCBicmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdGNvbm5fcGFyYW1zLnJlcV9pZV9sZW4gPSBjb25uX2luZm8tXHUwMDNlcmVxX2llX2xlbjtcbiBcdFx0Y29ubl9wYXJhbXMucmVzcF9pZSA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llO1xuIFx0XHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cdTAwM2VyZXNwX2llX2xlbjtcbitcdFx0YXV0aG9yaXplZCA9IGNvbXBsZXRlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYIHx8XG4rXHRcdFx0ICAgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIGJyY21mX2hhc19wbWtpZChjb25uX3BhcmFtcy5yZXFfaWUsXG4rXHRcdFx0XHRcdCAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7XG4gXHRcdGNmZzgwMjExX2Nvbm5lY3RfZG9uZShuZGV2LCBcdTAwMjZjb25uX3BhcmFtcywgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmIChhdXRob3JpemVkKVxuK1x0XHRcdGNmZzgwMjExX3BvcnRfYXV0aG9yaXplZChuZGV2LCBwcm9maWxlLVx1MDAzZWJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiBcdFx0YnJjbWZfZGJnKENPTk4sIFwiUmVwb3J0IGNvbm5lY3QgcmVzdWx0IC0gY29ubmVjdGlvbiAlc1xcblwiLFxuIFx0XHRcdCAgY29tcGxldGVkID8gXCJzdWNjZWVkZWRcIiA6IFwiZmFpbGVkXCIpO1xuIFx0fVxuQEAgLTc3MzEsNiArNzgzMCwxMCBAQCBzdGF0aWMgaW50IGJyY21mX3NldHVwX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIFx0fVxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFX0VYVCkpXG4gXHRcdHdpcGh5LVx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9TQUU7XG4rXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GQlQpIHx8XG4rXHQgICAgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9PS0MpKVxuK1x0XHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksXG4rXHRcdFx0XHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKTtcbiBcdHdpcGh5LVx1MDAzZW1nbXRfc3R5cGVzID0gYnJjbWZfdHhyeF9zdHlwZXM7XG4gXHR3aXBoeS1cdTAwM2VtYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb24gPSA1MDAwO1xuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE5PKSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbmluZGV4IDYzZTUzNDUyM2Y1MTguLjFhYTk5MzkwYTk1MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbkBAIC0xMjcsNyArMTI3LDggQEAgZW51bSBicmNtZl9wcm9maWxlX2Z3c3VwIHtcbiBcdEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSxcbiBcdEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLLFxuIFx0QlJDTUZfUFJPRklMRV9GV1NVUF8xWCxcbi1cdEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFXG4rXHRCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSxcbitcdEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTVxuIH07XG4gXG4gLyoqXG5AQCAtMTY0LDYgKzE2NSw3IEBAIGVudW0gYnJjbWZfbWdtdF90eF9zdGF0dXMge1xuICAqIEBic3NpZDogYnNzaWQgb2Ygam9pbmVkL2pvaW5pbmcgaWJzcy5cbiAgKiBAc2VjOiBzZWN1cml0eSBpbmZvcm1hdGlvbi5cbiAgKiBAa2V5OiBrZXkgaW5mb3JtYXRpb25cbisgKiBAaXNfb2tjOiBPS0MgaXMgdXNlZCBmb3IgY3VycmVudCBjb25uZWN0aW9uLlxuICAqL1xuIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlIHtcbiBcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbkBAIC0xNzIsNiArMTc0LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUge1xuIFx0ZW51bSBicmNtZl9wcm9maWxlX2Z3c3VwIHVzZV9md3N1cDtcbiBcdHUxNiB1c2VfZndhdXRoO1xuIFx0Ym9vbCBpc19mdDtcbitcdGJvb2wgaXNfb2tjO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcbmluZGV4IDQ4ODM2NGVmOGZmMmEuLmNjMTllNWU3ZWJmNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jXG5AQCAtNDUsNiArNDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfZndjYXAgYnJjbWZfZndjYXBfbWFwW10gPSB7XG4gXHR7IEJSQ01GX0ZFQVRfU0FFLCBcInNhZSBcIiB9LFxuIFx0eyBCUkNNRl9GRUFUX0ZXQVVUSCwgXCJpZGF1dGhcIiB9LFxuIFx0eyBCUkNNRl9GRUFUX1NBRV9FWFQsIFwic2FlX2V4dFwiIH0sXG4rXHR7IEJSQ01GX0ZFQVRfRkJULCBcImZidCBcIiB9LFxuK1x0eyBCUkNNRl9GRUFUX09LQywgXCJva2NcIiB9LFxuIH07XG4gXG4gI2lmZGVmIERFQlVHXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmhcbmluZGV4IDMxZjg2OTVjYTQxNzYuLjgxNjVhMjg2YjYzMDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oXG5AQCAtNTksNyArNTksOSBAQFxuIFx0QlJDTUZfRkVBVF9ERUYoU0NBTl9WMikgXFxcbiBcdEJSQ01GX0ZFQVRfREVGKFBNS0lEX1YyKSBcXFxuIFx0QlJDTUZfRkVBVF9ERUYoUE1LSURfVjMpIFxcXG4tXHRCUkNNRl9GRUFUX0RFRihTQUVfRVhUKVxuK1x0QlJDTUZfRkVBVF9ERUYoU0FFX0VYVCkgXFxcbitcdEJSQ01GX0ZFQVRfREVGKEZCVCkgXFxcbitcdEJSQ01GX0ZFQVRfREVGKE9LQylcbiBcbiAvKlxuICAqIFF1aXJrczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uOTIwZDVlMmQ5OTY2MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC03MTEwLDYgKzcxMTAsMTAgQEAgZW51bSBubDgwMjExX2ZlYXR1cmVfZmxhZ3Mge1xuICAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX1BST0JFX0FQOiBEcml2ZXIgc3VwcG9ydHMgcHJvYmluZyB0aGUgYXNzb2NpYXRlZCBBUFxuICAqXHRpbiBTVEEgbW9kZSB1c2luZyBATkw4MDIxMV9DTURfUFJPQkVfUEVFUi5cbiAgKlxuKyAqIEBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEOiBEcml2ZXIgc3VwcG9ydHMgZmFzdCByb2FtaW5nXG4rICpcdG9mZmxvYWQgaW4gc3RhdGlvbiBtb2RlLCBpbmNsdWRpbmcgRmFzdCBUcmFuc2l0aW9uIG9yIE9wcG9ydHVuaXN0aWNcbisgKlx0S2V5IENhY2hpbmcuXG4rICpcbiAgKiBATlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTOiBudW1iZXIgb2YgZXh0ZW5kZWQgZmVhdHVyZXMuXG4gICogQE1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUzogaGlnaGVzdCBleHRlbmRlZCBmZWF0dXJlIGluZGV4LlxuICAqL1xuQEAgLTcxOTIsNiArNzE5Niw3IEBAIGVudW0gbmw4MDIxMV9leHRfZmVhdHVyZV9pbmRleCB7XG4gXHROTDgwMjExX0VYVF9GRUFUVVJFX1JPQ19BRERSX0ZJTFRFUixcbiBcdE5MODAyMTFfRVhUX0ZFQVRVUkVfU0VUX0tFWV9MVEZfU0VFRCxcbiBcdE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPQkVfQVAsXG4rXHROTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FELFxuIFxuIFx0LyogYWRkIG5ldyBmZWF0dXJlcyBiZWZvcmUgdGhlIGRlZmluaXRpb24gYmVsb3cgKi9cbiBcdE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUyxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggNDRmMmJhZDA4NjcwNS4uZTQ4NTAxMjlhNTgyYiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xODQzNCw2ICsxODQzNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4rXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIFx0c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHBta19jb25mID0ge307XG5AQCAtMTg0NDIsNyArMTg0NDMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbitcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4rXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbiBcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG5AQCAtMTg0NzIsNiArMTg0NzUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbitcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4gXHRjb25zdCB1OCAqYWE7XG5AQCAtMTg0ODAsNyArMTg0ODQsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbitcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXG4rXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRkFTVF9ST0FNX09GRkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3aXBoeSxcbiBcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV80V0FZX0hBTkRTSEFLRV9TVEFfMVgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzozNi42NjE3ODE1MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjQ4Mzc2MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIEJyb2FkY29tIFdpRmkgRHJpdmVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcyBhbmQgc2VlIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGNvdWxkIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIG1lbW9yeSBpc3N1ZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgY2hhbmdlcyB0byByb2FtaW5nIGFuZCBrZXkgbWFuYWdlbWVudC5cblxuRmlyc3QsIEknbSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYG9rY19lbmFibGVgIHZhcmlhYmxlLCBldmVuIGFzIGEgc3RhY2stYWxsb2NhdGVkIGxvY2FsLCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBmbG93IHNlZW1zIHRvIGludm9sdmUgcmV0cmlldmluZyBhbiBpbnRlZ2VyIHZhbHVlIGZvciBgb2tjX2VuYWJsZWAgZnJvbSBzb21ld2hlcmUgdGhyb3VnaCBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YC4gVGhpcyBpbnRlZ2VyIHRoZW4gZGlyZWN0bHkgc2V0cyBgcHJvZmlsZS1cdTAwM2Vpc19va2NgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaW50ZWdlciBjb21lcyBmcm9tIGFuZCBob3cgaXQncyBoYW5kbGVkLiBXZSBjYW4gdXNlIGBicGZ0cmFjZWAgb3Igc2ltaWxhciB0byBpbnN0cnVtZW50IHRoaXMgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGEgbWVtYmVyIG9mIHRoZSBwcm9maWxlIHN0cnVjdCBiYXNlZCBvbiBhIGNvbmZpZ3VyYXRpb24gaW50ZWdlciBhZGRzIGEgcG90ZW50aWFsIGZvciBtaXNjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGtleSBtYW5hZ2VtZW50LlxuXG5UaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCB3aGljaCBtb2RpZnkgaG93IGBwcm9maWxlLVx1MDAzZXVzZV9md3N1cGAgaXMgaGFuZGxlZCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGNoZWNrcyBvbiBib3RoIGBpc19mdGAgYW5kIGBpc19va2NgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYC4gVGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgIGluIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rYCBiYXNlZCBvbiBgaXNfb2tjYCBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0OyB3ZSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaGFwcGVucyB3aGVuIHRoaXMgXCJva2NfaW5mb19wbWtcIiBpb3ZhciBpcyBzZXQuXG5cblRoZSBuZXcgYGJyY21mX2hhc19wbWtpZGAgZnVuY3Rpb24sIHBhcnNpbmcgVExWcyBmcm9tIHRoZSBSU04gSUUsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUTFYgcGFyc2luZyBpcyBub3RvcmlvdXNseSBwcm9uZSB0byBvZmYtYnktb25lIGVycm9ycyBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9ucyB2ZXJ5IGNhcmVmdWxseS4gVGhpcyBpcyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBLTVNBTiBjYW4gc2hpbmUuIFdlJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBjYXJlZnVsbHkgdXNpbmcgYGJwZnRyYWNlYC5cblxuVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGJyY21mX2Jzc19yb2FtaW5nX2RvbmVgIGFuZCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIHBhcnRpY3VsYXJseSB0aGUgYXV0aG9yaXphdGlvbiBjaGVja3MgYW5kIGNhbGxzIHRvIGBjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWRgLCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgY2FuIGJlIHN1c2NlcHRpYmxlIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvcnJlY3Qgc3RhdGUgaGFuZGxpbmcuXG5cbkZpbmFsbHksIHRoZSBlbmFibGluZyBvZiBgTkw4MDIxMV9FWFRfRkVBVFVSRV9GQVNUX1JPQU1fT0ZGTE9BRGAgaW4gYGJyY21mX3NldHVwX3dpcGh5YCBhbmQgdGhlIHN1cHBvcnRpbmcgY2hhbmdlcyBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgaW4gYG5sODAyMTFfc2V0X3Bta2AgYW5kIGBubDgwMjExX2RlbF9wbWtgIHN1Z2dlc3QgdGhhdCBmYXN0IHJvYW1pbmcgaXMgYmVpbmcgaW50ZWdyYXRlZC4gVGhpcyBhZGRzIGNvbXBsZXhpdHkgYW5kLCBwb3RlbnRpYWxseSwgbW9yZSBhdHRhY2sgc3VyZmFjZS4gQW55IGNvZGUgaW52b2x2aW5nIG9mZmxvYWQgYW5kIHNldHRpbmcgUE1LcyBpcyBhIHJlZCBmbGFnLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjayBoZXJlLlxuXG5JbiBzdW1tYXJ5LCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbW9kaWZ5IGV4aXN0aW5nIGtleSBtYW5hZ2VtZW50IGFuZCByb2FtaW5nIGxvZ2ljLCBhbmQgaW5jbHVkZSBUTFYgcGFyc2luZy4gVGhlc2UgYXJlIGFsbCBoaWdoLXJpc2sgYXJlYXMgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEknbGwgbmVlZCB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlc2Uga2V5IGZ1bmN0aW9ucyBhbmQgbG9vayBmb3IgYW55IGNsdWVzLiBMZXQncyBmaXJlIHVwIHRoZSB0b29scywgZG91YmxlLWNoZWNrIGFsbCB0aG9zZSBjYWxscywgYW5kIHNlZSBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZCwgd2hpY2ggSSBzdHJvbmdseSBzdXNwZWN0IGl0IHdpbGwgYmUsIGdpdmVuIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NDQuMzEwMTYwNzkyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAxNjIxMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2ZpbF9ic3NjZmdfaW50X2dldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMTA4PWJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMTMzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIxMzQ6XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KG5ldGRldl9wcml2KG5kZXYpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIxMzUtXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ3cGFfYXV0aFxcXCIsIFxcdTAwMjZ2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjIyNi1cXHQgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIyMjc6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXFxcIm9rY19lbmFibGVcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIyMjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZva2NfZW5hYmxlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTI3Njk9YnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjc4My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzoyNzg0OlxcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsIFxcXCJ3c2VjXFxcIiwgXFx1MDAyNndzZWMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI3ODUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9Mjg0Mj1icmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yOTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI5NDY6XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgXFxcIndzZWNcXFwiLCBcXHUwMDI2d3NlYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjk0Ny1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yOTY0PWJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI5ODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Mjk4NjpcXHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcXFwid3NlY1xcXCIsIFxcdTAwMjZ3c2VjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yOTg3LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTMwMzg9YnJjbWZfY2ZnODAyMTFfcmVjb25maWd1cmVfd2VwKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMzA1OS1cXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MzA2MDpcXHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXQoaWZwLCBcXFwid3NlY1xcXCIsIFxcdTAwMjZ3c2VjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0zMDYxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg9MTYxPXN0YXRpYyBpbmxpbmVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjE2MjpzMzIgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xNjMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaD0xNzI9czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X3F1ZXJ5KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oLTE3Ni1cXHQqZGF0YV9sZSA9IGNwdV90b19sZTMyKCpkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjE3NzpcXHRyZXR1cm4gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0KGlmcCwgbmFtZSwgZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xNzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzo0Ni40MTE3ODcwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYwMzcyMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBmd2lsLmhgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmhgIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTYxLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBtaWdodCBiZSBkZWZpbmVkIG9yIGRvY3VtZW50ZWQgdGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgbGF5ZXIg4oCTIGhlbmNlIHRoZSBmaWxlIG5hbWUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIEknbSBob3BpbmcgSSBjYW4gZ2xlYW4gc29tZSBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBCcm9hZGNvbSBmaXJtd2FyZSBhdCB0aGF0IHBvaW50IGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjQ4LjI3MjE2MjE2MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTU6XFx0e1xcbiAxNTY6XFx0XFx0X19sZTMyIGRhdGFfbGUgPSBjcHVfdG9fbGUzMihkYXRhKTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0cmV0dXJuIGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQoaWZwLCBuYW1lLCBcXHUwMDI2ZGF0YV9sZSxcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdFxcdCBzaXplb2YoZGF0YV9sZSkpO1xcbiAxNjA6XFx0fVxcbiAxNjE6XFx0c3RhdGljIGlubGluZVxcbiAxNjI6XFx0czMyIGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxcbiAxNjM6XFx0e1xcbiAxNjQ6XFx0XFx0czMyIGVycjtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX2dldChpZnAsIG5hbWUsIGRhdGEsIHNpemVvZigqZGF0YSkpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciA9PSAwKVxcbiAxNjg6XFx0XFx0XFx0KmRhdGEgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKWRhdGEpO1xcbiAxNjk6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTcwOlxcdH1cXG4gMTcxOlxcdHN0YXRpYyBpbmxpbmVcXG4gMTcyOlxcdHMzMiBicmNtZl9maWxfYnNzY2ZnX2ludF9xdWVyeShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhKVxcbiAxNzM6XFx0e1xcbiAxNzQ6XFx0XFx0X19sZTMyICpkYXRhX2xlID0gKF9fbGUzMiAqKWRhdGE7XFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCpkYXRhX2xlID0gY3B1X3RvX2xlMzIoKmRhdGEpO1xcbiAxNzc6XFx0XFx0cmV0dXJuIGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsIG5hbWUsIGRhdGEpO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzMzIgYnJjbWZfZmlsX3h0bHZfZGF0YV9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBpZCxcXG4gMTgxOlxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCB1MzIgbGVuKTtcXG4gMTgyOlxcdHMzMiBicmNtZl9maWxfeHRsdl9kYXRhX2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTE2IGlkLFxcbiAxODM6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHUzMiBsZW4pO1xcbiAxODQ6XFx0c3RhdGljIGlubGluZVxcbiAxODU6XFx0czMyIGJyY21mX2ZpbF94dGx2X2ludF9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBpZCxcXG4gMTg2OlxcdFxcdFxcdFxcdCAgIHUzMiBkYXRhKVxcbiAxODc6XFx0e1xcbiAxODg6XFx0XFx0X19sZTMyIGRhdGFfbGUgPSBjcHVfdG9fbGUzMihkYXRhKTtcXG4gMTg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozNzo0OC4yNzIyNzk1NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcyNzI2Mjc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2V5IE1hbmFnZW1lbnQgYW5kIFBNS0lEIEhhbmRsaW5nIGluIHRoZSBCcm9hZGNvbSBXaUZpIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEZpcnN0LCBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnJjbWZfc2V0X2tleV9tZ210YC4gVGhlIGNvZGUgY2hlY2tzIGlmIHdlJ3JlIHVzaW5nIGZpcm13YXJlLXN1cHBvcnRlZCBrZXkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBCUkNNRl9QUk9GSUxFX0ZXU1VQXzFYYCBvciBgQlJDTUZfUFJPRklMRV9GV1NVUF9ST0FNYC4gSWYgc28sIGl0IHRyaWVzIHRvIHJlYWQgYG9rY19lbmFibGVgIHVzaW5nIGBicmNtZl9maWxfYnNzY2ZnX2ludF9nZXRgLiBBIG5vbi16ZXJvIGBlcnJgIGZyb20gdGhhdCBmdW5jdGlvbiBtZWFucyB0aGUgcmVhZCBmYWlsZWQsIGFuZCBgb2tjX2VuYWJsZWAgaXNuJ3QgdG91Y2hlZC4gSWYgYGVycmAgaXMgemVybywgdGhlbiBpdCBncmFicyB0aGUgdmFsdWUgdXNpbmcgYGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9nZXRgLCBhbmQgdGhlbiBjb252ZXJ0cyBpdCB0byB0aGUgY29ycmVjdCBieXRlIG9yZGVyLlxuXG5OZXh0LCBJJ20gZXhhbWluaW5nIGBicmNtZl9oYXNfcG1raWRgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGNyaXRpY2FsIGZvciBkZXRlcm1pbmluZyBpZiBhIFBNS0lEIGlzIHByZXNlbnQgaW4gYW4gUlNOIElFLiBUaGUgaW5wdXQgYHBhcnNlYCwgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgYHJzbl9pZWAgYnVmZmVyLCBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIGByb2FtX2luZm8ucmVxX2llYCBvciBgY29ubl9wYXJhbXMucmVxX2llYC5cblxuSSdtIGNhcmVmdWxseSB0cmFjaW5nIHRoZSBsb2dpYy4gRmlyc3QsIGl0IGNhbGxzIGBicmNtZl9wYXJzZV90bHZzYCB0byBmaW5kIHRoZSBSU04gSUUuIElmIHRoYXQgZmFpbHMsIHdlIHJldHVybiBlYXJseS4gVGhlbiwgaXQgcHJvY2VlZHMgd2l0aCB2YXJpb3VzIG9mZnNldCBjYWxjdWxhdGlvbnMgYW5kIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBSU04gSUUuIFNldmVyYWwgYm91bmRzIGNoZWNrcyBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIHRoZSB1c2Ugb2YgZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvIChgXHUwMDNlPWApIHZlcnN1cyBncmVhdGVyLXRoYW4gKGBcdTAwM2VgKSBpcyBhbiBhcmVhIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLCBhcyB0aGF0J3MgYSBjb21tb24gc291cmNlIG9mIG9mZi1ieS1vbmUgZXJyb3JzLiBJdCdzIHBhcnNpbmcgdGhlIFJTTiBJRSB0byBnZXQgdmFyaW91cyBjb3VudHMgYW5kIG9mZnNldHMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgcGFpcndpc2UgY2lwaGVycyBhbmQgZ3JvdXAgY2lwaGVycy4gRmluYWxseSwgaXQgY2hlY2tzIHRoZSBQTUtJRCBjb3VudC4gSXQncyByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgYGNvdW50YCBvZiBQTUtJRHMgaXMgZ3JlYXRlciB0aGFuIHplcm8sIGluZGljYXRpbmcgYSBQTUtJRCBpcyBwcmVzZW50LiBUaGUgbG9naWMgZmxvdyBpcyB3ZWxsLWRlZmluZWQsIGFuZCB0aGUgYnVmZmVyIG9mZnNldC9zaXplIGNhbGN1bGF0aW9uIGxvb2tzIHJlYXNvbmFibGUgc28gZmFyLCBidXQgSSB3aWxsIHdhbnQgdG8gdmVyaWZ5IHRob3NlIGNhbGN1bGF0aW9ucyBteXNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzExLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NTIuOTk5NTQ0MzA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE0OTYyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3BhcnNlX3RsdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0MjA6YnJjbWZfcGFyc2VfdGx2cyhjb25zdCB2b2lkICpidWYsIGludCBidWZsZW4sIHVpbnQga2V5KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQyMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00Njc9YnJjbWZfZmluZF93cGFpZShjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDcxOlxcdHdoaWxlICgoaWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDcyLVxcdFxcdGlmIChicmNtZl90bHZfaGFzX2llKChjb25zdCB1OCAqKWllLCBcXHUwMDI2cGFyc2UsIFxcdTAwMjZsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00ODA9YnJjbWZfZmluZF93cHNpZShjb25zdCB1OCAqcGFyc2UsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00ODMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDg0OlxcdHdoaWxlICgoaWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDg1LVxcdFxcdGlmIChicmNtZl90bHZfaGFzX2llKCh1OCAqKWllLCBcXHUwMDI2cGFyc2UsIFxcdTAwMjZsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMTA4PWJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMjQ1LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIyNDY6XFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygoY29uc3QgdTggKilzbWUtXFx1MDAzZWllLCBzbWUtXFx1MDAzZWllX2xlbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMjQ3LVxcdFxcdFxcdFxcdCAgV0xBTl9FSURfUlNOKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTI0MTI9YnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI0NTYtXFx0XFx0XFx0LyogZmluZCB0aGUgUlNOX0lFICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjQ1NzpcXHRcXHRcXHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKChjb25zdCB1OCAqKXNtZS1cXHUwMDNlaWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjQ1OC1cXHRcXHRcXHRcXHRcXHRcXHQgIHNtZS1cXHUwMDNlaWVfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTEzNT1icmNtZl9wYXJzZV9jb25maWd1cmVfc2VjdXJpdHkoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MTQzLVxcdC8qIGZpbmQgdGhlIFJTTl9JRSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjUxNDQ6XFx0cnNuX2llID0gYnJjbWZfcGFyc2VfdGx2cygodTggKilzZXR0aW5ncy1cXHUwMDNlYmVhY29uLnRhaWwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTE0NS1cXHRcXHRcXHRcXHQgIHNldHRpbmdzLVxcdTAwM2ViZWFjb24udGFpbF9sZW4sIFdMQU5fRUlEX1JTTik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTc3PWJyY21mX2NmZzgwMjExX3N0YXJ0X2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTIxMy1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjUyMTQ6XFx0XFx0Y291bnRyeV9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKHU4ICopc2V0dGluZ3MtXFx1MDAzZWJlYWNvbi50YWlsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUyMTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2V0dGluZ3MtXFx1MDAzZWJlYWNvbi50YWlsX2xlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUyMjMtXFx0XFx0aWVfb2Zmc2V0ID0gRE9UMTFfTUdNVF9IRFJfTEVOICsgRE9UMTFfQkNOX1BSQl9GSVhFRF9MRU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTIyNDpcXHRcXHRzc2lkX2llID0gYnJjbWZfcGFyc2VfdGx2cyhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MjI1LVxcdFxcdFxcdFxcdCh1OCAqKVxcdTAwMjZzZXR0aW5ncy1cXHUwMDNlYmVhY29uLmhlYWRbaWVfb2Zmc2V0XSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY0Njk9c3RhdGljIGJvb2wgYnJjbWZfaGFzX3Bta2lkKGNvbnN0IHU4ICpwYXJzZSwgdTMyIGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTY0NzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjQ4MDpcXHRyc25faWUgPSBicmNtZl9wYXJzZV90bHZzKHBhcnNlLCBsZW4sIFdMQU5fRUlEX1JTTik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ4MS1cXHRpZiAoIXJzbl9pZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NTUuNjE0NTExNjU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDg0MjA5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBicmNtZl9wYXJzZV90bHZzYCBpbiBgY2ZnODAyMTEuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBicmNtZl9wYXJzZV90bHZzYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQxOSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNgLiBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgSSdtIGludGVyZXN0ZWQgaW4gYW5hbHl6aW5nIHJlbGF0ZWQgdG8gaG93IHRoZSBUTFZzIGFyZSBiZWluZyBwYXJzZWQuIEl0IGNvdWxkIGJlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBjZXJ0YWluIFRMViB0eXBlcywgb3IgcGVyaGFwcyBJJ20gbG9va2luZyBhdCBhIHNwZWNpZmljIGJ1ZyByZXBvcnQgYW5kIHRoZSByZWxldmFudCBjb2RlLiBXaGF0ZXZlciB0aGUgcmVhc29uLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZXNlIFRMVnMgYXQgdGhhdCBwb2ludCBpbiBpdHMgZXhlY3V0aW9uIGZsb3cuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0MywiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM3OjU4LjAyMjkzNTA3MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE5LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpcXG4gNDIwOlxcdGJyY21mX3BhcnNlX3RsdnMoY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCB1aW50IGtleSlcXG4gNDIxOlxcdHtcXG4gNDIyOlxcdFxcdGNvbnN0IHN0cnVjdCBicmNtZl90bHYgKmVsdCA9IGJ1ZjtcXG4gNDIzOlxcdFxcdGludCB0b3RsZW4gPSBidWZsZW47XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdC8qIGZpbmQgdGFnZ2VkIHBhcmFtZXRlciAqL1xcbiA0MjY6XFx0XFx0d2hpbGUgKHRvdGxlbiBcXHUwMDNlPSBUTFZfSERSX0xFTikge1xcbiA0Mjc6XFx0XFx0XFx0aW50IGxlbiA9IGVsdC1cXHUwMDNlbGVuO1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRcXHQvKiB2YWxpZGF0ZSByZW1haW5pbmcgdG90bGVuICovXFxuIDQzMDpcXHRcXHRcXHRpZiAoKGVsdC1cXHUwMDNlaWQgPT0ga2V5KSBcXHUwMDI2XFx1MDAyNiAodG90bGVuIFxcdTAwM2U9IChsZW4gKyBUTFZfSERSX0xFTikpKVxcbiA0MzE6XFx0XFx0XFx0XFx0cmV0dXJuIGVsdDtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0XFx0ZWx0ID0gKHN0cnVjdCBicmNtZl90bHYgKikoKHU4ICopZWx0ICsgKGxlbiArIFRMVl9IRFJfTEVOKSk7XFxuIDQzNDpcXHRcXHRcXHR0b3RsZW4gLT0gKGxlbiArIFRMVl9IRFJfTEVOKTtcXG4gNDM1OlxcdFxcdH1cXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQzODpcXHR9XFxuIDQzOTpcXHRcXG4gNDQwOlxcdC8qIElzIGFueSBvZiB0aGUgdGx2cyB0aGUgZXhwZWN0ZWQgZW50cnk/IElmXFxuIDQ0MTpcXHQgKiBub3QgdXBkYXRlIHRoZSB0bHZzIGJ1ZmZlciBwb2ludGVyL2xlbmd0aC5cXG4gNDQyOlxcdCAqL1xcbiA0NDM6XFx0c3RhdGljIGJvb2xcXG4gNDQ0OlxcdGJyY21mX3Rsdl9oYXNfaWUoY29uc3QgdTggKmllLCBjb25zdCB1OCAqKnRsdnMsIHUzMiAqdGx2c19sZW4sXFxuIDQ0NTpcXHRcXHRcXHQgY29uc3QgdTggKm91aSwgdTMyIG91aV9sZW4sIHU4IHR5cGUpXFxuIDQ0NjpcXHR7XFxuIDQ0NzpcXHRcXHQvKiBJZiB0aGUgY29udGVudHMgbWF0Y2ggdGhlIE9VSSBhbmQgdGhlIHR5cGUgKi9cXG4gNDQ4OlxcdFxcdGlmIChpZVtUTFZfTEVOX09GRl0gXFx1MDAzZT0gb3VpX2xlbiArIDEgXFx1MDAyNlxcdTAwMjZcXG4gNDQ5OlxcdFxcdCAgICAhbWVtY21wKFxcdTAwMjZpZVtUTFZfQk9EWV9PRkZdLCBvdWksIG91aV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxuIDQ1MDpcXHRcXHQgICAgdHlwZSA9PSBpZVtUTFZfQk9EWV9PRkYgKyBvdWlfbGVuXSkge1xcbiA0NTE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQ1MjpcXHRcXHR9XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdGlmICh0bHZzID09IE5VTEwpXFxuIDQ1NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ1NjpcXHRcXHQvKiBwb2ludCB0byB0aGUgbmV4dCBpZSAqL1xcbiA0NTc6XFx0XFx0aWUgKz0gaWVbVExWX0xFTl9PRkZdICsgVExWX0hEUl9MRU47XFxuIDQ1ODpcXHRcXHQvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyICovXFxuIDQ1OTpcXHRcXHQqdGx2c19sZW4gLT0gKGludCkoaWUgLSAqdGx2cyk7XFxuIDQ2MDpcXHRcXHQvKiB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKi9cXG4gNDYxOlxcdFxcdCp0bHZzID0gaWU7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6Mzc6NTguMDIzNTczMzAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNjQ5ODk2MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBDb21wbGV0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb25uZWN0aW9uIGNvbXBsZXRpb24gbG9naWMuIEknbSBmb2N1c2luZyBvbiBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAgYW5kIGBicmNtZl9ic3Nfcm9hbWluZ19kb25lYC4gTG9va2luZyBhdCBgYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZWAsIEkgc2VlIGl0J3Mgc2V0dGluZyB1cCB0aGUgYGNvbm5fcGFyYW1zYCBzdHJ1Y3R1cmU6IGByZXFfaWVfbGVuYCwgYHJlc3BfaWVgLCBhbmQgYHJlc3BfaWVfbGVuYCBhcmUgcG9wdWxhdGVkIGZyb20gYGNvbm5faW5mb2AuICBUaGVuLCB0aGVyZSdzIGEgY3J1Y2lhbCBjaGVjayBmb3IgYXV0aG9yaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgYXV0aG9yaXplZGAgc2VlbXMgdG8gaGluZ2Ugb24gYSBmZXcgY29uZGl0aW9uczogdGhlIGNvbm5lY3Rpb24gbXVzdCBiZSAqY29tcGxldGVkKiwgYW5kIHRoZSBwcm9maWxlIG5lZWRzIHRvIHVzZSBlaXRoZXIgMVggRlcgc3VwcG9ydCBvciByb2FtaW5nIEZXIHN1cHBvcnQuICBDcnVjaWFsbHksIGl0IHRoZW4gdXNlcyBgYnJjbWZfaGFzX3Bta2lkYCBvbiB0aGUgYGNvbm5fcGFyYW1zLnJlcV9pZWAuICBJZiBhbGwgdGhvc2UgY29uZGl0aW9ucyBhcmUgbWV0LCB0aGVuIGBjZmc4MDIxMV9wb3J0X2F1dGhvcml6ZWRgIGlzIGNhbGxlZCBhZnRlciBgY2ZnODAyMTFfY29ubmVjdF9kb25lYC5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IGBjb25uX3BhcmFtc2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgY29ubl9pbmZvYCBpcyBjb21pbmcgZnJvbSBhbmQgaG93IGl0cyBjb250ZW50cyBhcmUgcG9wdWxhdGVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgd2lsbCByZXZlYWwgaG93IGByZXFfaWVgLCBgcmVzcF9pZWAgYW5kIG90aGVyIGFzc29jaWF0ZWQgcGFyYW1ldGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NjQsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozODowOS42NzM0NzI3ODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY1OTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBjb25zdCBzdHJ1Y3QgYnJjbWZfZXZlbnRfbXNnICplLFxcbjY1OTE6XFx0XFx0XFx0ICAgICAgIGJvb2wgY29tcGxldGVkKVxcbjY1OTI6XFx0e1xcbjY1OTM6XFx0XFx0c3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG42NTk0OlxcdFxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2Vwcm9maWxlO1xcbjY1OTU6XFx0XFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcXG42NTk2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3Jlc3BfcGFyYW1zIGNvbm5fcGFyYW1zO1xcbjY1OTc6XFx0XFx0Ym9vbCBhdXRob3JpemVkO1xcbjY1OTg6XFx0XFxuNjU5OTpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuNjYwMDpcXHRcXG42NjAxOlxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNUSU5HLFxcbjY2MDI6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpZnAtXFx1MDAzZXZpZi1cXHUwMDNlc21lX3N0YXRlKSkge1xcbjY2MDM6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZjb25uX3BhcmFtcywgMCwgc2l6ZW9mKGNvbm5fcGFyYW1zKSk7XFxuNjYwNDpcXHRcXHRcXHRpZiAoY29tcGxldGVkKSB7XFxuNjYwNTpcXHRcXHRcXHRcXHRicmNtZl9nZXRfYXNzb2NfaWVzKGNmZywgaWZwKTtcXG42NjA2OlxcdFxcdFxcdFxcdGJyY21mX3VwZGF0ZV9ic3NfaW5mbyhjZmcsIGlmcCk7XFxuNjYwNzpcXHRcXHRcXHRcXHRzZXRfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQ09OTkVDVEVELFxcbjY2MDg6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpO1xcbjY2MDk6XFx0XFx0XFx0XFx0Y29ubl9wYXJhbXMuc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUztcXG42NjEwOlxcdFxcdFxcdH0gZWxzZSB7XFxuNjYxMTpcXHRcXHRcXHRcXHRjbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19FQVBfU1VDQ0VTUyxcXG42NjEyOlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpO1xcbjY2MTM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KEJSQ01GX1ZJRl9TVEFUVVNfQVNTT0NfU1VDQ0VTUyxcXG42NjE0OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2VzbWVfc3RhdGUpO1xcbjY2MTU6XFx0XFx0XFx0XFx0Y29ubl9wYXJhbXMuc3RhdHVzID0gV0xBTl9TVEFUVVNfQVVUSF9USU1FT1VUO1xcbjY2MTY6XFx0XFx0XFx0fVxcbjY2MTc6XFx0XFx0XFx0Y29ubl9wYXJhbXMubGlua3NbMF0uYnNzaWQgPSBwcm9maWxlLVxcdTAwM2Vic3NpZDtcXG42NjE4OlxcdFxcdFxcdGNvbm5fcGFyYW1zLnJlcV9pZSA9IGNvbm5faW5mby1cXHUwMDNlcmVxX2llO1xcbjY2MTk6XFx0XFx0XFx0Y29ubl9wYXJhbXMucmVxX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVxX2llX2xlbjtcXG42NjIwOlxcdFxcdFxcdGNvbm5fcGFyYW1zLnJlc3BfaWUgPSBjb25uX2luZm8tXFx1MDAzZXJlc3BfaWU7XFxuNjYyMTpcXHRcXHRcXHRjb25uX3BhcmFtcy5yZXNwX2llX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlcmVzcF9pZV9sZW47XFxuNjYyMjpcXHRcXHRcXHRhdXRob3JpemVkID0gY29tcGxldGVkIFxcdTAwMjZcXHUwMDI2XFxuNjYyMzpcXHRcXHRcXHRcXHQgICAgIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF8xWCB8fFxcbjY2MjQ6XFx0XFx0XFx0XFx0ICAgICAgcHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUk9BTSkgXFx1MDAyNlxcdTAwMjZcXG42NjI1OlxcdFxcdFxcdFxcdCAgICAgYnJjbWZfaGFzX3Bta2lkKGNvbm5fcGFyYW1zLnJlcV9pZSxcXG42NjI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY29ubl9wYXJhbXMucmVxX2llX2xlbik7XFxuNjYyNzpcXHRcXHRcXHRjZmc4MDIxMV9jb25uZWN0X2RvbmUobmRldiwgXFx1MDAyNmNvbm5fcGFyYW1zLCBHRlBfS0VSTkVMKTtcXG42NjI4OlxcdFxcdFxcdGlmIChhdXRob3JpemVkKVxcbjY2Mjk6XFx0XFx0XFx0XFx0Y2ZnODAyMTFfcG9ydF9hdXRob3JpemVkKG5kZXYsIHByb2ZpbGUtXFx1MDAzZWJzc2lkLCBOVUxMLCAwLFxcbjY2MzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbjY2MzE6XFx0XFx0XFx0YnJjbWZfZGJnKENPTk4sIFxcXCJSZXBvcnQgY29ubmVjdCByZXN1bHQgLSBjb25uZWN0aW9uICVzXFxcXG5cXFwiLFxcbjY2MzI6XFx0XFx0XFx0XFx0ICBjb21wbGV0ZWQgPyBcXFwic3VjY2VlZGVkXFxcIiA6IFxcXCJmYWlsZWRcXFwiKTtcXG42NjMzOlxcdFxcdH1cXG42NjM0OlxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIkV4aXRcXFxcblxcXCIpO1xcbjY2MzU6XFx0XFx0cmV0dXJuIDA7XFxuNjYzNjpcXHR9XFxuNjYzNzpcXHRcXG42NjM4OlxcdHN0YXRpYyBzMzJcXG42NjM5OlxcdGJyY21mX25vdGlmeV9jb25uZWN0X3N0YXR1c19hcChzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozODowOS42NzQzMzU5NjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNjYyODY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBubDgwMjExX3NldF9wbWtgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQTUsgKFBhaXJ3aXNlIE1hc3RlciBLZXkpIGlzIGJlaW5nIHNldCB3aXRoaW4gdGhlIG5sODAyMTEgc3Vic3lzdGVtLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9zZXRfcG1rYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIHRoaXMgc2hvdWxkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgYW5hbHl6aW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIFBNSyBjb25maWd1cmF0aW9uLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgYXMgSSBkb24ndCB3YW50IHRvIGJlIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgc3BlbHVua2luZy4gVGltZSB0byBmaXJlIHVwIG15IGVkaXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM4OjExLjgwMDk2ODM5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQzMDpcXHRcXG4xODQzMTpcXHRcXHRyZXR1cm4gcmRldl9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QocmRldiwgZGV2LCBlbmFibGVkKTtcXG4xODQzMjpcXHR9XFxuMTg0MzM6XFx0XFxuMTg0MzQ6XFx0c3RhdGljIGludCBubDgwMjExX3NldF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xODQzNTpcXHR7XFxuMTg0MzY6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuMTg0Mzc6XFx0XFx0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeTtcXG4xODQzODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg0Mzk6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4xODQ0MDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYgcG1rX2NvbmYgPSB7fTtcXG4xODQ0MTpcXHRcXG4xODQ0MjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXFx1MDAyNlxcdTAwMjZcXG4xODQ0MzpcXHRcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXFxuMTg0NDQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NDQ1OlxcdFxcbjE4NDQ2OlxcdFxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuMTg0NDc6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbjE4NDQ4OlxcdFxcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuMTg0NDk6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFXzRXQVlfSEFORFNIQUtFX1NUQV8xWCkpXFxuMTg0NTA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NDUxOlxcdFxcbjE4NDUyOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtdKVxcbjE4NDUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NDU0OlxcdFxcbjE4NDU1OlxcdFxcdGlmICghd2Rldi1cXHUwMDNlY29ubmVjdGVkKVxcbjE4NDU2OlxcdFxcdFxcdHJldHVybiAtRU5PVENPTk47XFxuMTg0NTc6XFx0XFxuMTg0NTg6XFx0XFx0cG1rX2NvbmYuYWEgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuMTg0NTk6XFx0XFx0aWYgKG1lbWNtcChwbWtfY29uZi5hYSwgd2Rldi1cXHUwMDNldS5jbGllbnQuY29ubmVjdGVkX2FkZHIsIEVUSF9BTEVOKSlcXG4xODQ2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODQ2MTpcXHRcXG4xODQ2MjpcXHRcXHRwbWtfY29uZi5wbWsgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LXSk7XFxuMTg0NjM6XFx0XFx0cG1rX2NvbmYucG1rX2xlbiA9IG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS10pO1xcbjE4NDY0OlxcdFxcdGlmIChwbWtfY29uZi5wbWtfbGVuICE9IFdMQU5fUE1LX0xFTiBcXHUwMDI2XFx1MDAyNlxcbjE4NDY1OlxcdFxcdCAgICBwbWtfY29uZi5wbWtfbGVuICE9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5MilcXG4xODQ2NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODQ2NzpcXHRcXG4xODQ2ODpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS1IwX05BTUVdKVxcbjE4NDY5OlxcdFxcdFxcdHBta19jb25mLnBta19yMF9uYW1lID1cXG4xODQ3MDpcXHRcXHRcXHRcXHRubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LUjBfTkFNRV0pO1xcbjE4NDcxOlxcdFxcbjE4NDcyOlxcdFxcdHJldHVybiByZGV2X3NldF9wbWsocmRldiwgZGV2LCBcXHUwMDI2cG1rX2NvbmYpO1xcbjE4NDczOlxcdH1cXG4xODQ3NDpcXHRcXG4xODQ3NTpcXHRzdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NDc2OlxcdHtcXG4xODQ3NzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODQ3ODpcXHRcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5O1xcbjE4NDc5OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODQ4MDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NDgxOlxcdFxcdGNvbnN0IHU4ICphYTtcXG4xODQ4MjpcXHRcXG4xODQ4MzpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXFx1MDAyNlxcdTAwMjZcXG4xODQ4NDpcXHRcXHQgICAgd2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpXFxuMTg0ODU6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NDg2OlxcdFxcbjE4NDg3OlxcdFxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuMTg0ODg6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0ZBU1RfUk9BTV9PRkZMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbjE4NDg5OlxcdFxcdCAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2lwaHksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjM4OjExLjgwMTYxOTA0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMDE0NTI1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogRmFzdCBSb2FtIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBhZGRpbmcgZmFzdCByb2FtIG9mZmxvYWQgKEZCVC9PS0MpIHN1cHBvcnQgd2l0aGluIHRoZSBicmNtZm1hYyBhbmQgbmw4MDIxMSBzdWJzeXN0ZW1zLiBUaGUgY29kZSBhZGRzIGZlYXR1cmUgZmxhZ3MsIHZhbGlkYXRlcyBQTUtJRHMsIGFuZCBtYW5hZ2VzIE9LQy9GVCBvcGVyYXRpb25zIGR1cmluZyBjb25uZWN0aW9uIGFuZCByb2FtaW5nLlxuXG5DcnVjaWFsbHksIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gSSd2ZSBzY3J1dGluaXplZCB0aGUgbWVtb3J5IGhhbmRsaW5nLCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBmb3VuZC5cblxuMS4gICoqTm8gS2VybmVsLXRvLVVzZXIgTGVha3M6KiogQWJzb2x1dGVseSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgb3IgdW5pbml0aWFsaXplZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIE5vdGhpbmcgbmV3IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuXG5cbjIuICAqKkluaXRpYWxpemF0aW9uIGlzIEtleToqKiBWYXJpYWJsZXMgbGlrZSBgb2tjX2VuYWJsZWAsIGBhdXRob3JpemVkYCBhcmUgYWxsIGluaXRpYWxpemVkIGJlZm9yZSB0aGVpciB1c2UuIFRoZSBgb2tjX2VuYWJsZWAgdmFyaWFibGUgaXMgb25seSByZWFkIGlmIHRoZXJlIGlzIG5vIGVycm9yIHdoZW4gcXVlcnlpbmcgdGhlIGZpcm13YXJlLiBUaGUgYHByb2ZpbGVgIHN0cnVjdCBmaWVsZHMgcmVsYXRlZCB0byBzdGF0ZSAoYGlzX29rY2AsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC5cblxuMy4gICoqU2FmZSBQTUtJRCBIYW5kbGluZzoqKiBUaGUgYGJyY21mX2hhc19wbWtpZGAgZnVuY3Rpb24gZGlsaWdlbnRseSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IElFIGJ1ZmZlci4gTm8gcmlza3Mgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzIHRoZXJlLlxuXG40LiAgKipObyBDb21wbGV4IERhdGEgU3RydWN0dXJlcyB3aXRoIFVuaW5pdGlhbGl6ZWQgRmllbGRzOioqIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIHBvc2UgYSBwcm9ibGVtIGRvd24gdGhlIGxpbmUuXG5cbjUuICAqKk5vIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzIGluIENvbnRyb2wgRmxvdzoqKiBJIHNlZSBubyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cbkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggc3RpY2tzIHRvIGJlc3QgcHJhY3RpY2VzIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBidWZmZXIgb3ZlcnJ1bnMgZHVyaW5nIElFIHBhcnNpbmcgb3IgaW52YWxpZCBzdGF0ZSBoYW5kbGluZywgd291bGQgYmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDMyLCJPdXRwdXRUb2tlbnMiOjMyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzozODoyMC44MDMwNzQwNzFaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGZhc3Qgcm9hbSBvZmZsb2FkIChGYXN0IEJTUyBUcmFuc2l0aW9uIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZykgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBhbmQgdGhlIG5sODAyMTEgc3Vic3lzdGVtLlxcblxcbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBzdGFjayBhbmQgaGVhcCB2YXJpYWJsZXMgKGUuZy4sIGBva2NfZW5hYmxlYCwgYGF1dGhvcml6ZWRgLCBgcG1rX2NvbmZgKSBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgdmFsdWVzIHByaW9yIHRvIGFueSByZWFkLiBgb2tjX2VuYWJsZWAgaXMgb25seSBhY2Nlc3NlZCBpZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCBzdWNjZXNzZnVsbHkgcmV0dXJucyAwLlxcbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXFxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cXG40LiBObyBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIGlvY3RsLCBvciBjb3B5X3RvX3VzZXIuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGZhc3Qgcm9hbSBvZmZsb2FkIChGYXN0IEJTUyBUcmFuc2l0aW9uIC8gT3Bwb3J0dW5pc3RpYyBLZXkgQ2FjaGluZykgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBhbmQgdGhlIG5sODAyMTEgc3Vic3lzdGVtLlxcblxcbktleSBvYnNlcnZhdGlvbnMgcmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBzdGFjayBhbmQgaGVhcCB2YXJpYWJsZXMgKGUuZy4sIGBva2NfZW5hYmxlYCwgYGF1dGhvcml6ZWRgLCBgcG1rX2NvbmZgKSBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgdmFsdWVzIHByaW9yIHRvIGFueSByZWFkLiBgb2tjX2VuYWJsZWAgaXMgb25seSBhY2Nlc3NlZCBpZiBgYnJjbWZfZmlsX2Jzc2NmZ19pbnRfZ2V0YCBzdWNjZXNzZnVsbHkgcmV0dXJucyAwLlxcbjIuIFRoZSBgc3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGVgIGZpZWxkcyAoYGlzX29rY2AsIGBpc19mdGAsIGB1c2VfZndzdXBgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvbiBjb25uZWN0aW9uIHNldHVwIChgYnJjbWZfc2V0X2tleV9tZ210YCkuXFxuMy4gVGhlIG5ldyBJRSBwYXJzaW5nIGZ1bmN0aW9uIGBicmNtZl9oYXNfcG1raWRgIG9wZXJhdGVzIHdpdGggbGVuZ3RoIGFuZCBvZmZzZXQgYm91bmRzIGNoZWNrcyBvbiBpbmNvbWluZyBJRSBieXRlIGFycmF5czsgYW55IG91dC1vZi1ib3VuZHMgcmVhZGluZyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi5cXG40LiBObyBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIGlvY3RsLCBvciBjb3B5X3RvX3VzZXIuXFxuXFxuQmVjYXVzZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[1] Phase: Succeeded StartedAt: 2026-09-11 07:38:47 +0000 UTC FinishedAt: 2026-09-11 07:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 07:38:47 +0000 UTC FinishedAt: 2026-09-11 07:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2] Phase: Succeeded StartedAt: 2026-09-11 07:38:47 +0000 UTC FinishedAt: 2026-09-11 11:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 07:38:47 +0000 UTC FinishedAt: 2026-09-11 11:20:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 07:38:47 +0000 UTC FinishedAt: 2026-09-11 07:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 07:38:47 +0000 UTC FinishedAt: 2026-09-11 07:38:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzh5xq/series-workflowzh5xq-convert-artifact-1044501478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 07:38:57 +0000 UTC FinishedAt: 2026-09-11 07:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 07:38:57 +0000 UTC FinishedAt: 2026-09-11 07:56:04 +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:*d7fa712e-a87d-4825-9665-f06f56f198bd,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-workflowzh5xq/series-workflowzh5xq-convert-artifact-1044501478/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": "9f4565c7-eae6-4e93-84f3-ffae07f95938", "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-workflowzh5xq/series-workflowzh5xq-build-action-373453692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 07:38:57 +0000 UTC FinishedAt: 2026-09-11 07:55: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:*d7fa712e-a87d-4825-9665-f06f56f198bd,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-workflowzh5xq/series-workflowzh5xq-convert-artifact-1044501478/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": "9f4565c7-eae6-4e93-84f3-ffae07f95938", "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-workflowzh5xq/series-workflowzh5xq-build-action-373453692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 07:56:04 +0000 UTC FinishedAt: 2026-09-11 07:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 07:56:04 +0000 UTC FinishedAt: 2026-09-11 07:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 07:56:04 +0000 UTC FinishedAt: 2026-09-11 07:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 07:56:04 +0000 UTC FinishedAt: 2026-09-11 07:56:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzh5xq/series-workflowzh5xq-convert-artifact-1141309241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 07:56:14 +0000 UTC FinishedAt: 2026-09-11 07:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 07:56:14 +0000 UTC FinishedAt: 2026-09-11 07:57:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f4565c7-eae6-4e93-84f3-ffae07f95938,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-workflowzh5xq/series-workflowzh5xq-build-action-373453692/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-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 07:58:07 +0000 UTC FinishedAt: 2026-09-11 07:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 07:58:07 +0000 UTC FinishedAt: 2026-09-11 07:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 07:58:07 +0000 UTC FinishedAt: 2026-09-11 08:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 07:58:07 +0000 UTC FinishedAt: 2026-09-11 08:15:05 +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:*d7fa712e-a87d-4825-9665-f06f56f198bd,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-workflowzh5xq/series-workflowzh5xq-convert-artifact-1141309241/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": "c0a4d102-6d19-457a-84bb-47b49ed511dd", "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-workflowzh5xq/series-workflowzh5xq-build-action-146987029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 07:58:07 +0000 UTC FinishedAt: 2026-09-11 08:14:55 +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:*d7fa712e-a87d-4825-9665-f06f56f198bd,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-workflowzh5xq/series-workflowzh5xq-convert-artifact-1141309241/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": "c0a4d102-6d19-457a-84bb-47b49ed511dd", "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-workflowzh5xq/series-workflowzh5xq-build-action-146987029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 08:15:05 +0000 UTC FinishedAt: 2026-09-11 08:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 08:15:05 +0000 UTC FinishedAt: 2026-09-11 08:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 08:15:05 +0000 UTC FinishedAt: 2026-09-11 08:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 08:15:05 +0000 UTC FinishedAt: 2026-09-11 08:16:49 +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:*c0a4d102-6d19-457a-84bb-47b49ed511dd,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-workflowzh5xq/series-workflowzh5xq-build-action-146987029/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-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 11:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 11:20:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"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:*9f4565c7-eae6-4e93-84f3-ffae07f95938,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0a4d102-6d19-457a-84bb-47b49ed511dd,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-workflowzh5xq/series-workflowzh5xq-build-action-373453692/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-workflowzh5xq/series-workflowzh5xq-build-action-146987029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 08:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 08:17:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"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-workflowzh5xq/series-workflowzh5xq-convert-artifact-101306798/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 08:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 08:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 08:17:00 +0000 UTC FinishedAt: 2026-09-11 08:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 08:17:10 +0000 UTC FinishedAt: 2026-09-11 11:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzh5xq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_set_pmk","nl80211_del_pmk","brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_cfg80211_set_pmk","brcmf_bss_roaming_done","brcmf_bss_connect_done","brcmf_setup_wiphy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","BRCMFMAC","BRCMFMAC_USB"],"series_id":"6475b3ff-9c85-4aa7-a28e-e43753a65ca7","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 08:17:10 +0000 UTC FinishedAt: 2026-09-11 11:20:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f4565c7-eae6-4e93-84f3-ffae07f95938,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0a4d102-6d19-457a-84bb-47b49ed511dd,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-workflowzh5xq/series-workflowzh5xq-build-action-373453692/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-workflowzh5xq/series-workflowzh5xq-build-action-146987029/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-workflowzh5xq/series-workflowzh5xq-convert-artifact-101306798/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,}