Name: series-workflowpt7xf Phase: Succeeded StartedAt: 2026-09-06 01:32:06 +0000 UTC FinishedAt: 2026-09-06 05:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[0] Phase: Succeeded StartedAt: 2026-09-06 01:32:06 +0000 UTC FinishedAt: 2026-09-06 01:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 01:32:06 +0000 UTC FinishedAt: 2026-09-06 01:35:34 +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": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211" ], "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": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211" ], "series_id": "bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_switch_netns", "__cfg80211_switch_netns", "cfg80211_switch_wdev_netns", "cfg80211_pernet_exit", "nl80211_wiphy_netns", "ieee80211_uninit", "ieee80211_unlist_sdata" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3Blcm5ldF9leGl0JiMzNDssCiAgICAmIzM0O25sODAyMTFfd2lwaHlfbmV0bnMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdW5saXN0X3NkYXRhJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBmb3Igd2lyZWxlc3MgZGV2aWNlcyAoY2ZnODAyMTEpIGFuZCBoYW5kbGVzIGludGVyZmFjZSB1bmxpc3RpbmcgZHVyaW5nIG5ldGRldiB1bmluaXRpYWxpemF0aW9uIChtYWM4MDIxMSkuIFRoZSBjaGFuZ2VzIGludm9sdmUgbGlzdCBtYW5hZ2VtZW50LCBpbnRlcmZhY2UgdW5yZWdpc3RyYXRpb24gb24gbmV0bnMgbWlncmF0aW9uIGZhaWx1cmUsIGFuZCBsb2NraW5nIGFkanVzdG1lbnRzIChtdXRleCBndWFyZHMpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBidWZmZXIgY29waWVzIHRvL2Zyb20gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMvYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gaW50ZXJmYWNlIGxpZmVjeWNsZSBvciBsaXN0IG1hbmlwdWxhdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSB1bnJlZ2lzdGVyLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjNzZhMDRkNDUzNTk1ZTI1N2RiMjM2Mjg0ZWM5ZWM4MzdkODc1NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjMzOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05MjQsOSAmIzQzOzkyNCwzMyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHR9XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XG4mIzQzOyAqIGNvcmUgd2hlbiBjZmc4MDIxMSBjb3VsZG4mIzM5O3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0JiMzOTtzIGJlaW5nXG4mIzQzOyAqIGRlc3Ryb3llZC4gRHJvcCBpdCBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCBlaXRoZXIgd2F5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAoaXRlciAhPSBzZGF0YSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRndWFyZChtdXRleCkoXHUwMDI2bG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4mIzQzO1x0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcbiYjNDM7XHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuaW5kZXggZDEzMzEwZmVmNjkxYS4uMzFkMGY3MDg2NzAxMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbkBAIC0xNTMsNjggJiM0MzsxNTMsOTMgQEAgaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuJiM0MztzdGF0aWMgaW50IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuIHtcbi1cdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XG4tXHRpbnQgZXJyID0gMDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19ORVROU19PSykpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4mIzQzO1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4mIzQzO1x0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4mIzQzO1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiYjNDM7XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0ZXJyID0gY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2RldiwgbmV0KTtcbiYjNDM7XHRcdGlmICghZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcbi1cdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG4mIzQzO1x0XHRpZiAoIWZvcmNlKVxuJiM0MztcdFx0XHRnb3RvIHVuZG87XG4mIzQzO1x0XHQvKiByZW1vdmUgaW50ZXJmYWNlcyB0aGF0IGZhaWwgdG8gYWxsb3cgd2lwaHkgc3dpdGNoaW5nICovXG4mIzQzO1x0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuJiM0MztcdFx0XHRjZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7XG4mIzQzO1x0XHRlcnIgPSAwO1xuIFx0fVxuIFxuLVx0aWYgKGVycikge1xuLVx0XHQvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovXG4tXHRcdG5ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCxcbi1cdFx0XHRcdFx0XHQgICAgIGxpc3QpIHtcbiYjNDM7XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpIHtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4tXHRcdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsXG4tXHRcdFx0XHRcdFx0XHRcJiMzNDt3bGFuJWRcJiMzNDspO1xuLVx0XHRcdFdBUk5fT04oZXJyKTtcbi1cdFx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuJiM0MztcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiBcdFx0fVxuIFxuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuJiM0MztcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbiBcbi1cdGd1YXJkKHdpcGh5KShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiYjNDM7XHRcdHdpcGh5X25ldF9zZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgbmV0KTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG4tXHR9XG4mIzQzO1x0XHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXG4mIzQzO1x0XHRlcnIgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2LFxuJiM0MztcdFx0XHRcdCAgICBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIWZvcmNlKVxuJiM0MztcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG9sZF9uZXQpO1xuIFxuLVx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbiYjNDM7XHRcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4gXG4tXHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbi1cdGVyciA9IGRldmljZV9yZW5hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYsIGRldl9uYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2KSk7XG4tXHRXQVJOX09OKGVycik7XG4mIzQzO1x0aWYgKCFlcnIgfHwgZm9yY2UpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuIFxuLVx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiYjNDM7XHQvKiBzZXQgdG8gdGhlIGxhc3Qgb25lIHRvIHVuZG8gYWxsIG9mIHRoZW0gKi9cbiYjNDM7XHR3ZGV2ID0gbGlzdF9lbnRyeShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XG4mIzQzO3VuZG86XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZlIGJhY2sgZXZlcnl0aGluZywgaWYgdGhpcyBmYWlscyBhZ2FpbiAoYWxsb2NhdGlvbiBmYWlsdXJlcylcbiYjNDM7XHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGxpc3QpXG4mIzQzO1x0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG9sZF9uZXQpKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4tXHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuJiM0MztcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcbkBAIC0xODY4LDcgJiM0MzsxODkzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRydG5sX2xvY2soKTtcbiBcdGZvcl9lYWNoX3JkZXYocmRldikge1xuIFx0XHRpZiAobmV0X2VxKHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSwgbmV0KSlcbi1cdFx0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCkpO1xuJiM0MztcdFx0XHRXQVJOX09OKF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XG4gXHR9XG4gXHRydG5sX3VubG9jaygpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wZXJuZXRfZXhpdCYjMzQ7LAogICAgJiMzNDtubDgwMjExX3dpcGh5X25ldG5zJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV91bmluaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VubGlzdF9zZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi91bmxpc3RpbmcgbG9naWMgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgaGFuZGxpbmcgb2YgaW50ZXJmYWNlcyBmYWlsaW5nIHRvIHN3aXRjaCBuYW1lc3BhY2VzIG9uIG5ldG5zIGV4aXQgYW5kIGVuc3VyZXMgbWFjODAyMTEgZHJvcHMgbmV0ZGV2cyBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCB1cG9uIHVuaW5pdC4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIHdpdGggdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChlLmcuLCBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3Yzc2YTA0ZDQ1MzU5NWUyNTdkYjIzNjI4NGVjOWVjODM3ZDg3NTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMTozMzo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggZmRhYzcyOWNhNTgwZC4uNDkxYmJiNjk1ZDE3YiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTkyNCw5ICYjNDM7OTI0LDMzIEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBuZXRkZXYgY2FuIGJlIHVucmVnaXN0ZXJlZCB3aXRob3V0IG1hYzgwMjExIGRvaW5nIGl0LCBlLmcuIGJ5IHRoZSBuZXRkZXYKJiM0MzsgKiBjb3JlIHdoZW4gY2ZnODAyMTEgY291bGRuJiMzOTt0IG1vdmUgaXQgb3V0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UgdGhhdCYjMzk7cyBiZWluZwomIzQzOyAqIGRlc3Ryb3llZC4gRHJvcCBpdCBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCBlaXRoZXIgd2F5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmYW1wO2xvY2FsLSZndDtpbnRlcmZhY2VzLCBsaXN0KSB7CiYjNDM7CQlpZiAoaXRlciAhPSBzZGF0YSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWd1YXJkKG11dGV4KSgmYW1wO2xvY2FsLSZndDtpZmxpc3RfbXR4KTsKJiM0MzsJCWxpc3RfZGVsX3JjdSgmYW1wO3NkYXRhLSZndDtsaXN0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKJiM0MzsKJiM0MzsJaWVlZTgwMjExX3VubGlzdF9zZGF0YShzZGF0YSk7CiYjNDM7CWllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggZDEzMzEwZmVmNjkxYS4uMzFkMGY3MDg2NzAxMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xNTMsNjggJiM0MzsxNTMsOTMgQEAgaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJldHVybiAwOwogfQogCi1pbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCSAgc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldCAqbmV0KQogewotCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7Ci0JaW50IGVyciA9IDA7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoIShyZGV2LSZndDt3aXBoeS5mbGFncyAmYW1wOyBXSVBIWV9GTEFHX05FVE5TX09LKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAoIXdkZXYtJmd0O25ldGRldikKJiM0MzsJCXJldHVybiAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXdkZXYtJmd0O25ldGRldikKJiM0MzsJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSBmYWxzZTsKJiM0MzsJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtJmd0O25ldGRldiwgbmV0LCAmIzM0O3dsYW4lZCYjMzQ7KTsKJiM0MzsJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldCgmYW1wO3JkZXYtJmd0O3dpcGh5KTsKJiM0MzsJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgKnRtcDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiYjNDM7CQllcnIgPSBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBuZXQpOwomIzQzOwkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKLQkJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSBmYWxzZTsKLQkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtJmd0O25ldGRldiwgbmV0LCAmIzM0O3dsYW4lZCYjMzQ7KTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCQl3ZGV2LSZndDtuZXRkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiYjNDM7CQlpZiAoIWZvcmNlKQomIzQzOwkJCWdvdG8gdW5kbzsKJiM0MzsJCS8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi8KJiM0MzsJCWRldl9jbG9zZSh3ZGV2LSZndDtuZXRkZXYpOwomIzQzOwkJc2NvcGVkX2d1YXJkKHdpcGh5LCAmYW1wO3JkZXYtJmd0O3dpcGh5KQomIzQzOwkJCWNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldih3ZGV2KTsKJiM0MzsJCWVyciA9IDA7CiAJfQogCi0JaWYgKGVycikgewotCQkvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovCi0JCW5ldCA9IHdpcGh5X25ldCgmYW1wO3JkZXYtJmd0O3dpcGh5KTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwKLQkJCQkJCSAgICAgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsCi0JCQkJCQkgICAgIGxpc3QpIHsKJiM0MzsJc2NvcGVkX2d1YXJkKHdpcGh5LCAmYW1wO3JkZXYtJmd0O3dpcGh5KSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiAJCQlpZiAoIXdkZXYtJmd0O25ldGRldikKIAkJCQljb250aW51ZTsKLQkJCXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7Ci0JCQllcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi0mZ3Q7bmV0ZGV2LCBuZXQsCi0JCQkJCQkJJiMzNDt3bGFuJWQmIzM0Oyk7Ci0JCQlXQVJOX09OKGVycik7Ci0JCQl3ZGV2LSZndDtuZXRkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiYjNDM7CQkJbmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwKJiM0MzsJCQkJCSAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7CiAJCX0KIAotCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7CiAKLQlndWFyZCh3aXBoeSkoJmFtcDtyZGV2LSZndDt3aXBoeSk7CiYjNDM7CQl3aXBoeV9uZXRfc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksIG5ldCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7Ci0JCWlmICghd2Rldi0mZ3Q7bmV0ZGV2KQotCQkJY29udGludWU7Ci0JCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpOwotCX0KJiM0MzsJCS8qIHRoaXMgb25seSBmYWlscyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KJiM0MzsJCWVyciA9IGRldmljZV9yZW5hbWUoJmFtcDtyZGV2LSZndDt3aXBoeS5kZXYsCiYjNDM7CQkJCSAgICBkZXZfbmFtZSgmYW1wO3JkZXYtJmd0O3dpcGh5LmRldikpOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7ICFmb3JjZSkKJiM0MzsJCQl3aXBoeV9uZXRfc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksIG9sZF9uZXQpOwogCi0Jbmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTsKJiM0MzsJCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7CiAKLQl3aXBoeV9uZXRfc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksIG5ldCk7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiYjNDM7CQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsCiYjNDM7CQkJCQkgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpOwomIzQzOwkJfQomIzQzOwl9CiAKLQllcnIgPSBkZXZpY2VfcmVuYW1lKCZhbXA7cmRldi0mZ3Q7d2lwaHkuZGV2LCBkZXZfbmFtZSgmYW1wO3JkZXYtJmd0O3dpcGh5LmRldikpOwotCVdBUk5fT04oZXJyKTsKJiM0MzsJaWYgKCFlcnIgfHwgZm9yY2UpCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0Jbmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTsKJiM0MzsJLyogc2V0IHRvIHRoZSBsYXN0IG9uZSB0byB1bmRvIGFsbCBvZiB0aGVtICovCiYjNDM7CXdkZXYgPSBsaXN0X2VudHJ5KCZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCB0eXBlb2YoKndkZXYpLCBsaXN0KTsKJiM0Mzt1bmRvOgomIzQzOwkvKgomIzQzOwkgKiBNb3ZlIGJhY2sgZXZlcnl0aGluZywgaWYgdGhpcyBmYWlscyBhZ2FpbiAoYWxsb2NhdGlvbiBmYWlsdXJlcykKJiM0MzsJICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsCiYjNDM7CQkJCQkgICAgIGxpc3QpCiYjNDM7CQlXQVJOX09OKGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG9sZF9uZXQpKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCi0JCQljb250aW51ZTsKLQkJbmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7Ci0JfQomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KIAotCXJldHVybiAwOwomIzQzO2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCSAgc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJaWYgKCEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19ORVROU19PSykpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBuZXQsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZnODAyMTFfcmZraWxsX3BvbGwoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKQpAQCAtMTg2OCw3ICYjNDM7MTg5Myw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogCXJ0bmxfbG9jaygpOwogCWZvcl9lYWNoX3JkZXYocmRldikgewogCQlpZiAobmV0X2VxKHdpcGh5X25ldCgmYW1wO3JkZXYtJmd0O3dpcGh5KSwgbmV0KSkKLQkJCVdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsICZhbXA7aW5pdF9uZXQpKTsKJiM0MzsJCQlXQVJOX09OKF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsICZhbXA7aW5pdF9uZXQsIHRydWUpKTsKIAl9CiAJcnRubF91bmxvY2soKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUgaW50byBXaXJlbGVzcyBOZXR3b3JraW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyBpdCBtYWtlcyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2suIEZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgdG8gYGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoKWAgYW5kIHRoZSB3YXkgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdCgpYC4gVGhlIGZhY3QgdGhhdCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YSgpYCBpcyBub3cgaW52b2tlZCAqYmVmb3JlKiBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKClgIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgd2h5IHRoaXMgcmVvcmRlcmluZyBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYmVuZWZpY2lhbC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgdGhpcyByZWxhdGVkIHRvIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGEgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZT8KCk5leHQsIHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBoZXJlIOKAkyBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoKWAsIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRucygpYCwgYGNmZzgwMjExX3N3aXRjaF9uZXRucygpYCwgYW5kIGBjZmc4MDIxMV9wZXJuZXRfZXhpdCgpYCDigJMgYXJlIGFsbCBrZXkgdG8gbmV0IG5hbWVzcGFjZSBzd2l0Y2hpbmcgd2l0aGluIHRoZSB3aXJlbGVzcyBzdGFjay4gQW5kIHRoYXQgbGFzdCBvbmUsIGNhbGxpbmcgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKClgIHdpdGggYCZhbXA7aW5pdF9uZXRgIGFuZCBgdHJ1ZWAgZHVyaW5nIHBlcm5ldCBleGl0IGlzIHRlbGxpbmcuIFRoaXMgaGludHMgYXQgY2hhbmdlcyByZWxhdGVkIHRvIGhhbmRsaW5nIHdpcmVsZXNzIGRldmljZXMgYXMgdGhleSBtb3ZlIGJldHdlZW4gbmV0d29yayBuYW1lc3BhY2VzLCBvciB0aGVpciBjbGVhbnVwLgoKR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgYXJlYSBvZiB0aGUga2VybmVsIGlzIG9mdGVuIGZ1enplZCBieSB0b29scyBsaWtlIHN5emthbGxlci4gVGhhdCBpdCBpbmNsdWRlcyBtb2R1bGVzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhpbmtpbmcgYWJvdXQgdGhlc2UgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXphdGlvbiBhbmQgZW11bGF0aW9uIGlzIGltcG9ydGFudC4gVGhpcyBmZWVscyBsaWtlIGl0ICpjb3VsZCogYmUgcmVsYXRlZCB0byBhbiBpc3N1ZSBJJiMzOTt2ZSBzZWVuIGJlZm9yZSB3aXRoIHN3aXRjaGluZyBiZXR3ZWVuIG5ldCBuYW1lc3BhY2VzLCBvciBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gY3Jvc3MtbmFtZXNwYWNlIGludGVyYWN0aW9uIHdpdGggd2lyZWxlc3MgZGV2aWNlcy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCByZWFjaCBmb3IgbXkgdG9vbHMgdG8gY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhbmQgZXhhbWluZSB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucywgZW5zdXJpbmcgSSYjMzk7bSBhd2FyZSBvZiBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBjb21taXQgbWVzc2FnZXMgYW5kIG90aGVyIHJlbGF0ZWQgY2hhbmdlc2V0cyBmb3IgZnVsbCBjb250ZXh0LCBidXQgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBzdWdnZXN0cyB0aGlzIGNvdWxkIGJlIGFkZHJlc3NpbmcgYSBzdWJ0bGUsIHBvdGVudGlhbGx5IHNlY3VyaXR5LXJlbGV2YW50LCBpc3N1ZSByZWxhdGVkIHRvIHdpcmVsZXNzIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQgaW4gYSB2aXJ0dWFsaXplZCBvciBuZXRucyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zLW9iai15ICYjNDM7PSB0ZXN0cy9cbi0tXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE3LVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTIzPSQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMyOiQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzM6XHRcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zNC1cdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzAyLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNzAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIHx8XG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDQtXHQgICAgISh3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz01NzQ9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy02NjEtXHRcdFx0ICBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmspO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo2NjI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2My1cdHJkZXYtXHUwMDNld2lwaHkud2V4dCA9IFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY4My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6Njg0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL2NvcmUuYy02ODUtXHRyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIHw9IFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0MzM9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ3My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ3NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ3NS1cdGtmcmVlX3NlbnNpdGl2ZSh3ZGV2LVx1MDAzZXdleHQua2V5cyk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNTI4PXZvaWQgY2ZnODAyMTFfbGVhdmVfbG9ja2VkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NTItXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE1NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NTQtXHRcdGtmcmVlKHdkZXYtXHUwMDNld2V4dC5pZSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjM5PXZvaWQgY2ZnODAyMTFfaW5pdF93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjQ3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjQ4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjQ5LVx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfa2V5ID0gLTE7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzMyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE4MDYtXHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTgwNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgwOC1cdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU3ND1jZmc4MDIxMV9nZXRfNmdoel9wb3dlcl90eXBlKGNvbnN0IHU4ICplbGVtcywgc2l6ZV90IGVsZW1zX2xlbixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3Ni1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NTc3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3OC0jZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXHRXQVJOX09OKGNvbmQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD02MjQ9c3RydWN0IGNmZzgwMjExX2NvbG9jYXRlZF9hcCB7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDAtXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0MTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfS1VOSVRfVEVTVClcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQyLSNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChzeW0pIEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc3ltKVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NjQ5PXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNjU0LSNkZWZpbmUgVklTSUJMRV9JRl9DRkc4MDIxMV9LVU5JVCBzdGF0aWNcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjU1OiNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAqL1xubmV0L3dpcmVsZXNzL2NvcmUuaC02NTYtXG4tLVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC02LXZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xubmV0L3dpcmVsZXNzL2lic3MuYzoyNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL2lic3MuYzo1MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXHRtZW1zZXQoXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTQyLVx0d2Rldi1cdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cdTAwM2VjaGFuZGVmO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cdG1lbXNldChcdTAwMjZ3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xubmV0L3dpcmVsZXNzL2lic3MuYzoxODU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cdGlmICghbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxMy1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yODItXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL21sbWUuYy0yODQtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDY3PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTEwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTExLVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzNC1cdFx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0NT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5My1cdGlmICghZXJyKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgxNz1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg1OC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA4NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA4NjAtc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJlZ19ydWxlX3BvbGljeVtOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA5MTA9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTg4LX1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5ODk6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5OTAtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTkxOS1cdH0sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTIwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5OTIxLVx0e1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjM0MTk9dm9pZCBjZmc4MDIxMV9zY2hlZHVsZV9jaGFubmVsc19jaGVjayhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MjYtXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfREZTX0NPTkNVUlJFTlQpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzNDI3Olx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQyOC1cdCAgICAgd2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTUxNi1cbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9yZWcuYy01MTgtLyogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSBhdHRlbXB0cyB0byBjb21tdW5pY2F0ZSB3aXRoIENSREEgICovXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy01ODktfVxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTU5MS1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03MjktXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9yZWcuYy03MzEtI2luY2x1ZGUgXHUwMDNja2V5cy9hc3ltbWV0cmljLXR5cGUuaFx1MDAzZVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03MzU9c3RhdGljIGludCBfX2luaXQgbG9hZF9idWlsdGluX3JlZ2RiX2tleXModm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ3LVxubmV0L3dpcmVsZXNzL3JlZy5jOjc0ODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KHNoaXBwZWRfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTQ6XHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAmIzM5O1xcMCYjMzk7KVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1NS1cdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTc5OD1zdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAwLX1cbm5ldC93aXJlbGVzcy9yZWcuYzo4MDE6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQiAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjAzOD1ib29sIHJlZ19sYXN0X3JlcXVlc3RfY2VsbF9iYXNlKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDItXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjA0MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MTExNz12b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTIyLVx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyNC1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjUtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExNjY6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjctXHRpZiAod2Rldi1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2ICFyZXF1ZXN0LVx1MDAzZWluZm8uYWJvcnRlZCkge1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MzQ0Mz12b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTYtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTgtc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTczNT12b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVx0dTggY291bnRyeV9kYXRhbGVuO1xubmV0L3dpcmVsZXNzL3NtZS5jOjc0NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cbm5ldC93aXJlbGVzcy9zbWUuYzo3NzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzc2LVx0aWYgKHdleHRldiBcdTAwMjZcdTAwMjYgIWNyLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEwNzk9dm9pZCBfX2NmZzgwMjExX3JvYW1lZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgxLXtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMDgyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTEzNTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMTM2LVx0aWYgKCFpbmZvLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNDgtXHRpbnQgaTtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNTAtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzOTQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk2LVx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tLVxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlPTE9Y2ZnODAyMTEtdGVzdHMteSAmIzQzOz0gbW9kdWxlLm8gZnJhZ21lbnRhdGlvbi5vIHNjYW4ubyB1dGlsLm8gY2hhbi5vXG5uZXQvd2lyZWxlc3MvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAmIzQzOz0gY2ZnODAyMTEtdGVzdHMub1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02MzgtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU2LVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nj1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDEtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwMy1cdGlmIChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM9Mjg9c3RhdGljIHZvaWQgd2lyZWxlc3Nfc2VxX3ByaW50Zl9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDAtI2VuZGlmXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM6NDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMVxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jLTQyLVx0XHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIG1hYzgwMjExIEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5LiBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGFueSBjb25maWd1cmFibGUgb3B0aW9ucyBpcyB0aGUgYE1ha2VmaWxlYCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGUgYE1ha2VmaWxlYCB3aWxsIG9idmlvdXNseSB0ZWxsIG1lIGhvdyB0aGUgc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaG93IG1vZHVsZXMgYXJlIGNyZWF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbGx5IHVuZGVyc3RhbmQgYW55IGJ1aWxkIGZsYWdzIHRoYXQgYXJlIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBpbmZsdWVuY2UgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZSBlbmFibGVtZW50LiBUaGUgYEtjb25maWdgIGZpbGUgaXMgY3J1Y2lhbCBiZWNhdXNlIHRoYXTigJlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEkgbmVlZCB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgY29uZmlndXJhYmxlLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGJldHdlZW4gdGhvc2UgZmVhdHVyZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgYnVpbGQgb2YgdGhlIG1hYzgwMjExIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBmcm9tIGEgYnVpbGQgcGVyc3BlY3RpdmUgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIHRhaWxvciB0aGUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA5NzUgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjpjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNy1cdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxubmV0L21hYzgwMjExL0tjb25maWctMTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTppZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2Olx0c2VsZWN0IE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjctXHRkZWZhdWx0IHlcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMyLVx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWc6MzQ6XHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTM1LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX1JDX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MjpcdGRlZmF1bHQgXCYjMzQ7bWluc3RyZWxfaHRcJiMzNDsgaWYgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNTMtXHRkZWZhdWx0IFwmIzM0O1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0hBU19SQz1uXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02Mi1cdGRlcGVuZHMgb24gS1VOSVRcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctNjQtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctNzMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjgxOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWc6ODI6XHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04My1cdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05MS1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctMTAwLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTEyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMTEzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTM0Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzUtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTQ1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTU2Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTctXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTY1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBPQ0IgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzc6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3OC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTg4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTk5Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDAtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNDpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjI1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjM3Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzg6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzOS1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjUwOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTE6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1Mi1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjYyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzI6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MzpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjc0LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjgyLVx0Ym9vbCBcJiMzNDtWZXJib3NlIFRETFMgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6Mjk1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTY6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Ny1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDk6XHRpbnQgXCYjMzQ7U3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVwmIzM0OyBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMTAtXHRkZWZhdWx0IDBcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTUFDODAyMTEpICYjNDM7PSBtYWM4MDIxMS5vXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMy1cbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU9NT1tYWM4MDIxMS15IDo9IFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTM5LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjQwOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICYjNDM7PSBsZWQub1xubmV0L21hYzgwMjExL01ha2VmaWxlOjQxOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQyLVx0ZGVidWdmcy5vIFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ2LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ3Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX01FU0gpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ4LVx0bWVzaC5vIFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlPTU5PXJjODAyMTFfbWluc3RyZWwteSA6PSBcXFxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02MS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo2MjpyYzgwMjExX21pbnN0cmVsLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTYzLVx0cmM4MDIxMV9taW5zdHJlbF9odF9kZWJ1Z2ZzLm9cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02NC1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo2NTptYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCkgJiM0Mzs9ICQocmM4MDIxMV9taW5zdHJlbC15KVxubmV0L21hYzgwMjExL01ha2VmaWxlLTY2LVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz02MTM9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy03MTAtXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5uZXQvbWFjODAyMTEvY2ZnLmM6NzExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTcxMi1cdFx0aWYgKHNkYXRhLVx1MDAzZXUubWVzaC5zZWN1cml0eSAhPSBJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSlcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9MjE5MD1zdGF0aWMgdm9pZCBzdGFfYXBwbHlfbWVzaF9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIxOTMte1xubmV0L21hYzgwMjExL2NmZy5jOjIxOTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5NS1cdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0yNzg3PXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTI4OTMtXG5uZXQvbWFjODAyMTEvY2ZnLmM6Mjg5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy0yODk1LXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9tcGF0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NDI4PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9hZnRlcl9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ0NTEtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL2NmZy5jOjQ0NTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1My1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDU2Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfY3NhX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGlua19kYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy00NjU0LVx0XHRicmVhaztcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NjU1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTYtXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU5OTYtXHQuZHVtcF9zdXJ2ZXkgPSBpZWVlODAyMTFfZHVtcF9zdXJ2ZXksXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5NzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk4LVx0LmFkZF9tcGF0aCA9IGllZWU4MDIxMV9hZGRfbXBhdGgsXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNS0gKi9cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY6I2lmbmRlZiBfX01BQzgwMjExX0RFQlVHX0hcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjc6I2RlZmluZSBfX01BQzgwMjExX0RFQlVHX0hcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvb25jZV9saXRlLmhcdTAwM2Vcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxMjojZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMy0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6MTQ6I2RlZmluZSBNQUM4MDIxMV9PQ0JfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTUtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6MTg6I2RlZmluZSBNQUM4MDIxMV9JQlNTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE5LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDojZGVmaW5lIE1BQzgwMjExX0lCU1NfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjEtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0OiNkZWZpbmUgTUFDODAyMTFfUFNfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjUtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI2OiNkZWZpbmUgTUFDODAyMTFfUFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yOC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjMwOiNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtMzEtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjMyOiNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzMtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0zNC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjM1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDozNjojZGVmaW5lIE1BQzgwMjExX01QTF9ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC0zNy0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6Mzg6I2RlZmluZSBNQUM4MDIxMV9NUExfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzktI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC00MC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQyOiNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNDMtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ0OiNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDUtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC00Ni1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ4OiNkZWZpbmUgTUFDODAyMTFfTUhXTVBfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNDktI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUwOiNkZWZpbmUgTUFDODAyMTFfTUhXTVBfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTEtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC01Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NDojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC01NS0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6NTY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC01OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjU5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYwOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNjEtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYyOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjMtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC02NC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6NjY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY3LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2ODojZGVmaW5lIE1BQzgwMjExX01FU0hfUFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjktI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC03MC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjcxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6NzI6I2RlZmluZSBNQUM4MDIxMV9URExTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTczLSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3NDojZGVmaW5lIE1BQzgwMjExX1RETFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzUtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC03Ni1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjc3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3ODojZGVmaW5lIE1BQzgwMjExX1NUQV9ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC03OS0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6ODA6I2RlZmluZSBNQUM4MDIxMV9TVEFfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtODEtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC04Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjgzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6ODQ6I2RlZmluZSBNQUM4MDIxMV9NTE1FX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTg1LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4NjojZGVmaW5lIE1BQzgwMjExX01MTUVfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtODctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC04OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjg5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvZGVidWcuaC05MC12b2lkIF9fc2RhdGFfaW5mbyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMSwgMik7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE3OC0jZGVmaW5lIGh0X2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfSFRfREVCVUcsXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODAtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTgyLSNkZWZpbmUgaHRfZGJnX3JhdGVsaW1pdGVkKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxODM6XHRfc2RhdGFfZGJnKE1BQzgwMjExX0hUX0RFQlVHIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCksXHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTg2LSNkZWZpbmUgb2NiX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxODc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX09DQl9ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4OC1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTAtI2RlZmluZSBpYnNzX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTE6XHRfc2RhdGFfZGJnKE1BQzgwMjExX0lCU1NfREVCVUcsXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTItXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTk0LSNkZWZpbmUgcHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTk1Olx0X3NkYXRhX2RiZyhNQUM4MDIxMV9QU19ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE5Ni1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTgtI2RlZmluZSBwc19kYmdfaHcoaHcsIGZtdCwgLi4uKVx0XHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTk6XHRfd2lwaHlfZGJnKE1BQzgwMjExX1BTX0RFQlVHLFx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjAwLVx0XHQgICAoaHcpLVx1MDAzZXdpcGh5LCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjAyLSNkZWZpbmUgcHNfZGJnX3JhdGVsaW1pdGVkKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDM6XHRfc2RhdGFfZGJnKE1BQzgwMjExX1BTX0RFQlVHIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCksXHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMDQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjA2LSNkZWZpbmUgbXBsX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01QTF9ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIwOC1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTAtI2RlZmluZSBtcGF0aF9kYmcoc2RhdGEsIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjExOlx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NUEFUSF9ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTItXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjE0LSNkZWZpbmUgbWh3bXBfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIxNTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUhXTVBfREVCVUcsXHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjE2LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIxOC0jZGVmaW5lIG1zeW5jX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjAtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjIzOlx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI2LSNkZWZpbmUgbXBzX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfUFNfREVCVUcsXHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzMC0jZGVmaW5lIHRkbHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzMTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfVERMU19ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzMi1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMzQtI2RlZmluZSBzdGFfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzNTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfU1RBX0RFQlVHLFx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjM2LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzOC0jZGVmaW5lIG1sbWVfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzOTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUxNRV9ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MC1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MS0jZGVmaW5lIG1sbWVfbGlua19pZF9kYmcoc2RhdGEsIGxpbmtfaWQsIGZtdCwgLi4uKVx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyNDI6XHRfbGlua19pZF9kYmcoTUFDODAyMTFfTUxNRV9ERUJVRywgc2RhdGEsIGxpbmtfaWQsXHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDMtXHRcdCAgICAgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0NS0jZGVmaW5lIG1sbWVfZGJnX3JhdGVsaW1pdGVkKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyNDY6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01MTUVfREVCVUcgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSxcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0Ny1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0OTojZW5kaWYgLyogX19NQUM4MDIxMV9ERUJVR19IICovXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuYz02Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBkZWJ1Z2ZzX3Nob3J0X2ZvcHMgc3RhdHNfICMjbmFtZSMjIF9vcHMgPSB7XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTYzMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjMzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjM0LSNkZWZpbmUgREVCVUdGU19TVEFUU19BREQobmFtZSlcdFx0XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jPTY0NT12b2lkIGRlYnVnZnNfaHdfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjc5LVxubmV0L21hYzgwMjExL2RlYnVnZnMuYzo2ODA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL2RlYnVnZnMuYy02ODEtXHRERUJVR0ZTX1NUQVRTX0FERChkb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjI6I2lmbmRlZiBfX01BQzgwMjExX0RFQlVHRlNfSFxubmV0L21hYzgwMjExL2RlYnVnZnMuaDozOiNkZWZpbmUgX19NQUM4MDIxMV9ERUJVR0ZTX0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgtNC1cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTYtXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTgtdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuaD0xMj1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdmc19od19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuaC0xNi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmg6MTc6I2VuZGlmIC8qIF9fTUFDODAyMTFfREVCVUdGU19IICovXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6MjojaWZuZGVmIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtNC1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oOjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaD0yND1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9iZWFjb25fZGVmYXVsdChcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC0yOC1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oOjI5OiNlbmRpZiAvKiBfX01BQzgwMjExX0RFQlVHRlNfS0VZX0ggKi9cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz03MzY9SUVFRTgwMjExX0lGX0xJTktfRklMRShhZGRyLCBjb25mLVx1MDAzZWFkZHIsIE1BQyk7XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzctXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo3Mzg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzktSUVFRTgwMjExX0lGX0ZJTEUoZXN0YWJfcGxpbmtzLCB1Lm1lc2guZXN0YWJfcGxpbmtzLCBBVE9NSUMpO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTg2OD1zdGF0aWMgdm9pZCBhZGRfaWJzc19maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzItXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo4NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzQtXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9OTM3PXN0YXRpYyB2b2lkIGFkZF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NDktXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo5NTA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NTEtXHRcdGFkZF9tZXNoX2ZpbGVzKHNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaC0xMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oOjEzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTQtdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDoyOiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR0ZTX1NUQV9IXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDozOiNkZWZpbmUgX19NQUM4MDIxMV9ERUJVR0ZTX1NUQV9IXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC00LVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTYtXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDo3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtOC12b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oPTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfbGlua19zdGFfZGVidWdmc19kcnZfcmVtb3ZlKHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSkge31cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC0yNi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oOjI3OiNlbmRpZiAvKiBfX01BQzgwMjExX0RFQlVHRlNfU1RBX0ggKi9cbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTctXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjg6I2lmbmRlZiBfX01BQzgwMjExX0RSSVZFUl9PUFNcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg6OTojZGVmaW5lIF9fTUFDODAyMTFfRFJJVkVSX09QU1xubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC0xMC1cbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oPTQ3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTQtXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjQ5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtNDk2LXN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfdmlmX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg9MTc5Nz1kcnZfbmFuX3BlZXJfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTE4MTYtXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjE4MTc6I2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqL1xuLS1cbm5ldC9tYWM4MDIxMS9kcm9wLmgtNy1cbm5ldC9tYWM4MDIxMS9kcm9wLmg6ODojaWZuZGVmIE1BQzgwMjExX0RST1BfSFxubmV0L21hYzgwMjExL2Ryb3AuaDo5OiNkZWZpbmUgTUFDODAyMTFfRFJPUF9IXG5uZXQvbWFjODAyMTEvZHJvcC5oLTEwLSNpbmNsdWRlIFx1MDAzY25ldC9kcm9wcmVhc29uLmhcdTAwM2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTQ0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gdGhlIEludGVyZmFjZSBMaWZlY3ljbGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZXNlIHdpcmVsZXNzIGludGVyZmFjZXMgYXJlIGluaXRpYWxpemVkLCB1bmluaXRpYWxpemVkLCBhbmQgZ2VuZXJhbGx5IG1hbmFnZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBtYWM4MDIxMSBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIHRoZSBjZW50cmFsIGxvZ2ljIGZvciBpbnRlcmZhY2Ugb3BlcmF0aW9ucy4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgdW5pbml0aWFsaXphdGlvbiBwYXRoIGFuZCBob3cgaW50ZXJmYWNlcyBnZXQgdGFrZW4gZG93bi4gSSB3YW50IHRvIHNlZSBleGFjdGx5ICp3aGVyZSogYGllZWU4MDIxMV91bmluaXRgIGFuZCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYXJlIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlaXIgdXNlIHRvIGJldHRlciB0cm91Ymxlc2hvb3Qgb3IgbW9kaWZ5IHRoZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGludGVyZmFjZSByZW1vdmFsIGFuZCB0ZWFyZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTU6XHRcdGllZWU4MDIxMV92aWZfY2xlYXJfbGlua3Moc2RhdGEpO1xuIDkxNjpcdFx0aWVlZTgwMjExX2xpbmtfc3RvcChcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rKTtcbiA5MTc6XHRcbiA5MTg6XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4pIHtcbiA5MTk6XHRcdFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpuYW5fc2NoZWQgPVxuIDkyMDpcdFx0XHRcdFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuIDkyMTpcdFxuIDkyMjpcdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuYW5fc2NoZWQtXHUwMDNlY2hhbm5lbHMpOyBpJiM0MzsmIzQzOylcbiA5MjM6XHRcdFx0XHRXQVJOX09OKG5hbl9zY2hlZC1cdTAwM2VjaGFubmVsc1tpXS5jaGFucmVxLm9wZXIuY2hhbik7XG4gOTI0Olx0XHR9XG4gOTI1Olx0fVxuIDkyNjpcdFxuIDkyNzpcdC8qXG4gOTI4Olx0ICogVGhlIG5ldGRldiBjYW4gYmUgdW5yZWdpc3RlcmVkIHdpdGhvdXQgbWFjODAyMTEgZG9pbmcgaXQsIGUuZy4gYnkgdGhlIG5ldGRldlxuIDkyOTpcdCAqIGNvcmUgd2hlbiBjZmc4MDIxMSBjb3VsZG4mIzM5O3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0JiMzOTtzIGJlaW5nXG4gOTMwOlx0ICogZGVzdHJveWVkLiBEcm9wIGl0IGZyb20gdGhlIGludGVyZmFjZSBsaXN0IGVpdGhlciB3YXkuXG4gOTMxOlx0ICovXG4gOTMyOlx0c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiA5MzM6XHR7XG4gOTM0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuIDkzNTpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjtcbiA5MzY6XHRcbiA5Mzc6XHRcdEFTU0VSVF9SVE5MKCk7XG4gOTM4Olx0XG4gOTM5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbiA5NDA6XHRcdFx0aWYgKGl0ZXIgIT0gc2RhdGEpXG4gOTQxOlx0XHRcdFx0Y29udGludWU7XG4gOTQyOlx0XHRcdGd1YXJkKG11dGV4KShcdTAwMjZsb2NhbC1cdTAwM2VpZmxpc3RfbXR4KTtcbiA5NDM6XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnNkYXRhLVx1MDAzZWxpc3QpO1xuIDk0NDpcdFx0XHRyZXR1cm47XG4gOTQ1Olx0XHR9XG4gOTQ2Olx0fVxuIDk0NzpcdFxuIDk0ODpcdHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA5NDk6XHR7XG4gOTUwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG4gOTUxOlx0XG4gOTUyOlx0XHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcbiA5NTM6XHRcdGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YSk7XG4gOTU0Olx0fVxuIDk1NTpcdFxuIDk1NjpcdHN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDk1NzpcdFx0XHRcdFx0ICAgICBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuIDk1ODpcdHtcbiA5NTk6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbiA5NjA6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4gOTYxOlx0XG4gOTYyOlx0XHRyZXR1cm4gZHJ2X25ldF9zZXR1cF90Yyhsb2NhbCwgc2RhdGEsIGRldiwgdHlwZSwgdHlwZV9kYXRhKTtcbiA5NjM6XHR9XG4gOTY0Olx0XG4gOTY1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcbiA5NjY6XHRcdC5uZG9fb3Blblx0XHQ9IGllZWU4MDIxMV9vcGVuLFxuIDk2NzpcdFx0Lm5kb19zdG9wXHRcdD0gaWVlZTgwMjExX3N0b3AsXG4gOTY4Olx0XHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG4gOTY5Olx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcbiA5NzA6XHRcdC5uZG9fc2V0X3J4X21vZGVcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcbiA5NzE6XHRcdC5uZG9fc2V0X21hY19hZGRyZXNzIFx0PSBpZWVlODAyMTFfY2hhbmdlX21hYyxcbiA5NzI6XHRcdC5uZG9fc2V0dXBfdGNcdFx0PSBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjLFxuIDk3MzpcdH07XG4gOTc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5OTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIGBsb2NhbC0mZ3Q7aW50ZXJmYWNlc2AgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxvY2FsLSZndDtpbnRlcmZhY2VzYCBpcyBtYW5pcHVsYXRlZCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBmb3IgbWFjODAyMTEgbGlrZWx5IHJlc2lkZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoICp3aXRoaW4qIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSYjMzk7bSBsb29raW5nIGZvciBkaXJlY3QgbW9kaWZpY2F0aW9ucyB0byB0aGF0IHBhcnRpY3VsYXIgc3RydWN0IG1lbWJlci4gQSBzaW1wbGUgYGdyZXBgIG9yIGFuIElERSYjMzk7cyBzZWFyY2ggd291bGQgYmUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIGZvY3VzIG9uIGFzc2lnbm1lbnRzIChgPWApLCBwb3RlbnRpYWxseSBhbHNvIGluY3JlbWVudHMvZGVjcmVtZW50cyAoYCYjNDM7PWAsIGAtLWApIGlmIHRoZXkgYXJlIGludm9sdmVkIGluIG1hbmlwdWxhdGluZyB0aGUgaW50ZXJmYWNlIGxpc3QuIEkmIzM5O20gYWxzbyBnb2luZyB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBzdHJ1Y3R1cmUgYWNjZXNzZXMgbGlrZSBgbG9jYWwtJmd0O2ludGVyZmFjZXMtJmd0Oy4uLmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIHRoYXQgYXJlIGltcG9ydGFudCB0byB0cmFjay4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBsaXN0IG9mIGludGVyZmFjZXMgaXMgYmVpbmcgYnVpbHQsIG1haW50YWluZWQsIGFuZCBjbGVhbmVkIHVwLCBhcyB0aGlzIGlzIGNyaXRpY2FsIHRvIHByb3BlciBkcml2ZXIgb3BlcmF0aW9uLiBPbmNlIEkgaGF2ZSB0aGUgbG9jYXRpb25zLCBJIGNhbiBzdGFydCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBpbnRlcmZhY2UgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBhbmQgYW55IHJlLWFycmFuZ2VtZW50IGluIHRoaXMgbG9jYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHN1cnJvdW5kaW5nIHRoZSBhY2Nlc3MgYXMgd2VsbCwgdGhhdCBpcyBhbHNvIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIHNvbWUgZm9ybSBvZiBsaW5rZWQgbGlzdCBtYW5pcHVsYXRpb24sIGdpdmVuIHRoYXQgaXQmIzM5O3MgbGlrZWx5IG1hbmFnaW5nIGEgdmFyaWFibGUgbnVtYmVyIG9mIGludGVyZmFjZXMsIGJ1dCBJJiMzOTtsbCBjb25maXJtIHRoYXQgYXMgSSByZXZpZXcgdGhlIGNvZGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBsaWZlY3ljbGUgb2YgYW4gaW50ZXJmYWNlIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoaXMgY29yZSBtYWM4MDIxMSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlcmZhY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvbWFjODAyMTEvYXAuYz0yOTc9dm9pZCBpZWVlODAyMTFfYXBfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9hcC5jLTMwMS1cbm5ldC9tYWM4MDIxMS9hcC5jOjMwMjpcdC8qIHJ4LmMgY2Fubm90IHF1ZXVlIGFueSBub24tYWN0aW9uIGZyYW1lcyB0byBBUCBpbnRlcmZhY2VzICovXG5uZXQvbWFjODAyMTEvYXAuYy0zMDMtXHRpZiAoV0FSTl9PTighaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9MzcwOD1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMzc3My1cbm5ldC9tYWM4MDIxMS9jZmcuYzozNzc0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2NmZy5jLTM3NzUtXHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzk1LVx0fVxubmV0L21hYzgwMjExL2NmZy5jOjM3OTY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMzc5Ny1cdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQyNDU9c3RhdGljIHZvaWQgaWVlZTgwMjExX2VuZF9jYWMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDI1My1cbm5ldC9tYWM4MDIxMS9jZmcuYzo0MjU0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2NmZy5jLTQyNTUtXHRcdGxpbmtfZGF0YSA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbbGlua19pZF0sIHNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDM3NT12b2lkIGllZWU4MDIxMV9jc2FfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy00Mzk1LVx0XHQvKiBUcmlnZ2VyIGllZWU4MDIxMV9jc2FfZmluaXNoKCkgb24gdGhlIG5vbi10cmFuc21pdHRpbmdcbm5ldC9tYWM4MDIxMS9jZmcuYzo0Mzk2Olx0XHQgKiBpbnRlcmZhY2VzIHdoZW4gY2hhbm5lbCBzd2l0Y2ggaXMgcmVjZWl2ZWQgb25cbm5ldC9tYWM4MDIxMS9jZmcuYy00Mzk3LVx0XHQgKiB0cmFuc21pdHRpbmcgaW50ZXJmYWNlXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ0Njc9c3RhdGljIGludCBfX2llZWU4MDIxMV9jc2FfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ4Ni1cdFx0ICogd2l0aCBtdWx0aS12aWYgY3NhIGRyaXZlciBtYXkgY2FsbCBpZWVlODAyMTFfY3NhX2ZpbmlzaCgpXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ4NzpcdFx0ICogbWFueSB0aW1lcyB3aGlsZSB3YWl0aW5nIGZvciBvdGhlciBpbnRlcmZhY2VzIHRvIHVzZSB0aGVpclxubmV0L21hYzgwMjExL2NmZy5jLTQ0ODgtXHRcdCAqIHJlc2VydmF0aW9uc1xuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTEyPWllZWU4MDIxMV9jaGFuY3R4X3VzZXJfaXRlcl9uZXh0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTM3LVx0LyogbmV4dCAob3IgZmlyc3QpIGludGVyZmFjZSAqL1xubmV0L21hYzgwMjExL2NoYW4uYzoxMzg6XHRpdGVyLVx1MDAzZXNkYXRhID0gbGlzdF9wcmVwYXJlX2VudHJ5KGl0ZXItXHUwMDNlc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpO1xubmV0L21hYzgwMjExL2NoYW4uYzoxMzk6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGl0ZXItXHUwMDNlc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTQwLVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKGl0ZXItXHUwMDNlc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9Mjg0PWllZWU4MDIxMV9jaGFucmVxX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSAqYSxcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5NS1cdC8qXG5uZXQvbWFjODAyMTEvY2hhbi5jOjI5NjpcdCAqIFJlbW92ZSBOUENBIGlmIGl0JiMzOTtzIG5vdCByZXF1aXJlZCwgc28gdGhhdCBpbnRlcmZhY2VzXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5Ny1cdCAqIHNoYXJpbmcgYSBjaGFubmVsIGNvbnRleHQgd2lsbCBub3QgdXNlIE5QQ0Egd2hpbGUgdGhlXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5OC1cdCAqIGNoYW5uZWwgY29udGV4dCBpcyBzaGFyZWQuXG5uZXQvbWFjODAyMTEvY2hhbi5jOjI5OTpcdCAqIElmIGJvdGggc2lkZXMgYXJlIEFQIGludGVyZmFjZXMgcmVxdWlyaW5nIE5QQywgdGhlcmUmIzM5O3Ncbm5ldC9tYWM4MDIxMS9jaGFuLmMtMzAwLVx0ICogYW4gYXNzdW1wdGlvbiB0aGF0IHVzZXJzcGFjZSB3aWxsIHNldCB0aGVtIHVwIHdpdGhcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jPTU4Mj1pZWVlODAyMTFfZ2V0X2NoYW5jdHhfbWF4X3JlcXVpcmVkX2J3KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmMtNjMxLSAqIHJlY2FsYyB0aGUgbWluIHJlcXVpcmVkIGNoYW4gd2lkdGggb2YgdGhlIGNoYW5uZWwgY29udGV4dCwgd2hpY2ggaXNcbm5ldC9tYWM4MDIxMS9jaGFuLmM6NjMyOiAqIHRoZSBtYXggb2YgbWluIHJlcXVpcmVkIHdpZHRocyBvZiBhbGwgdGhlIGludGVyZmFjZXMgYm91bmQgdG8gdGhpc1xubmV0L21hYzgwMjExL2NoYW4uYy02MzMtICogY2hhbm5lbCBjb250ZXh0LlxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9Njc1PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jaGFuX2J3X2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTc0MS0gKiByZWNhbGMgdGhlIG1pbiByZXF1aXJlZCBjaGFuIHdpZHRoIG9mIHRoZSBjaGFubmVsIGNvbnRleHQsIHdoaWNoIGlzXG5uZXQvbWFjODAyMTEvY2hhbi5jOjc0MjogKiB0aGUgbWF4IG9mIG1pbiByZXF1aXJlZCB3aWR0aHMgb2YgYWxsIHRoZSBpbnRlcmZhY2VzIGJvdW5kIHRvIHRoaXNcbm5ldC9tYWM4MDIxMS9jaGFuLmMtNzQzLSAqIGNoYW5uZWwgY29udGV4dC5cbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jPTgxMT1zdGF0aWMgdm9pZCBfaWVlZTgwMjExX2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmMtODMxLVx0XHQgKiBtYWM4MDIxMSBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBzaGFyaW5nIGlkZW50aWNhbFxubmV0L21hYzgwMjExL2NoYW4uYzo4MzI6XHRcdCAqIGNoYW5jdHgmIzM5O3MgZm9yIFMxRyBpbnRlcmZhY2VzLlxubmV0L21hYzgwMjExL2NoYW4uYy04MzMtXHRcdCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTg4NT1zdGF0aWMgaW50IGllZWU4MDIxMV92aWZfdXNlX3Jlc2VydmVkX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTE5NDQtXHRcdFx0d2lwaHlfaW5mbyhsb2NhbC1cdTAwM2Vody53aXBoeSxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTk0NTpcdFx0XHRcdCAgIFwmIzM0O2NoYW5uZWwgY29udGV4dCByZXNlcnZhdGlvbiBjYW5ub3QgYmUgZmluYWxpemVkIGJlY2F1c2Ugc29tZSBpbnRlcmZhY2VzIGFyZW4mIzM5O3Qgc3dpdGNoaW5nXFxuXCYjMzQ7KTtcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTk0Ni1cdFx0XHRlcnIgPSAtRUJVU1k7XG4tLVxubmV0L21hYzgwMjExL2NoYW4uYz0yMzU3PWludCBpZWVlODAyMTFfbGlua191c2VfcmVzZXJ2ZWRfY29udGV4dChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTIzOTctXHQgKiBUaGUgaWVlZTgwMjExX3ZpZl91c2VfcmVzZXJ2ZWRfc3dpdGNoKCkgYWxyZWFkeSBzdG9wcyBhbGwgbmVjZXNzYXJ5XG5uZXQvbWFjODAyMTEvY2hhbi5jOjIzOTg6XHQgKiBpbnRlcmZhY2VzIHVwb24gZmFpbHVyZS5cbm5ldC9tYWM4MDIxMS9jaGFuLmMtMjM5OS1cdCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9Mzc5PXN0YXRpYyBzc2l6ZV90IHJlc2V0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuYy0zOTEtXHRpZiAocmV0KVxubmV0L21hYzgwMjExL2RlYnVnZnMuYzozOTI6XHRcdGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtMzkzLVxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmM9MTY2OD12b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzMtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2NzQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzUtXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTgzPWV4dGVybiBjb25zdCB1OCBpZWVlODAyMTFfYWNfdG9fcW9zX21hc2tbSUVFRTgwMjExX05VTV9BQ1NdO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwLSAqIEN1cnJlbnQgbWFjODAyMTEgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDE2MDAgQUlEU1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6OTE6ICogZm9yIFMxRyBpbnRlcmZhY2VzLiBXaXRoIHJlZ2FyZHMgdG8gYW4gUzFHIFRJTSwgdGhpcyBjb3ZlcnMgMjUgYmxvY2tzXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05Mi0gKiBhcyBlYWNoIGJsb2NrIGlzIDY0IEFJRHMuXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjEyPWVudW0gaWVlZTgwMjExX3BhY2tldF9yeF9mbGFncyB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzLSAqXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjQ6ICogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgYWNyb3NzIGhhbmRsaW5nIG11bHRpcGxlIGludGVyZmFjZXNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIyNS0gKiBmb3IgYSBzaW5nbGUgZnJhbWUuXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9ODk4PWVudW0gaWVlZTgwMjExX3NkYXRhX3N0YXRlX2JpdHMge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwNy0gKiBASUVFRTgwMjExX0NIQU5DVFhfU0hBUkVEOiBjaGFubmVsIGNvbnRleHQgbWF5IGJlIHVzZWQgYnlcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjkwODogKlx0bXVsdGlwbGUgaW50ZXJmYWNlc1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTA5LSAqIEBJRUVFODAyMTFfQ0hBTkNUWF9FWENMVVNJVkU6IGNoYW5uZWwgY29udGV4dCBjYW4gYmUgdXNlZFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTEyNzA9c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdmlmX3RvX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfdmlmICpwKVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEyODQtXHQgICAgIF9fX2xpbmtfaWQ7IF9fX2xpbmtfaWQgPSAwIC8qIGFsd2F5cyBzdG9wICovKVx0XHRcXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTI4NTpcdGxpc3RfZm9yX2VhY2hfZW50cnkoX19fc2RhdGEsIFx1MDAyNihfbG9jYWwpLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpXHRcXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTI4Ni1cdGlmIChfX19saW5rX2lkID09IEFSUkFZX1NJWkUoX19fc2RhdGEtXHUwMDNlbGluaykgXHUwMDI2XHUwMDI2XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMzAzLVx0ICAgICBfX19saW5rX2lkOyBfX19saW5rX2lkID0gMCAvKiBhbHdheXMgc3RvcCAqLylcdFx0XFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjEzMDQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fX3NkYXRhLCBcdTAwMjYoX2xvY2FsKS1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVx0XFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEzMDUtXHRpZiAoX19fbGlua19pZCA9PSBBUlJBWV9TSVpFKF9fX3NkYXRhLVx1MDAzZWxpbmspIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ1Nz1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDk4LVx0aW50IG1vbml0b3JzLCB2aXJ0X21vbml0b3JzLCB0eF9tbnRycztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE0OTk6XHQvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aXRoIGNvcnJlc3BvbmRpbmcgRklGXyBmbGFncyAqL1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTUwMC1cdGludCBmaWZfZmNzZmFpbCwgZmlmX3BsY3BmYWlsLCBmaWZfY29udHJvbCwgZmlmX290aGVyX2JzcywgZmlmX3BzcG9sbCxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTk2LVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTU5NzpcdC8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdpdGggYWxsbXVsdGkgUlggKi9cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE1OTgtXHRhdG9taWNfdCBpZmZfYWxsbXVsdGlzO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MDYtXHQvKiBzZWUgaWZhY2UuYyAqL1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYwNzpcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJmYWNlcztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MDgtXHRzdHJ1Y3QgbGlzdF9oZWFkIG1vbl9saXN0OyAvKiBvbmx5IHRoYXQgYXJlIElGRl9VUCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE3MDItXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNzAzOlx0aW50IHVzZXJfcG93ZXJfbGV2ZWw7IC8qIGluIGRCbSwgZm9yIGFsbCBpbnRlcmZhY2VzICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNzA0LVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIxMDA9aWVlZTgwMjExX2ZpbmRfbmFuX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxMDYtXHQvKiBGaW5kIHRoZSBOQU4gaW50ZXJmYWNlIC0gdGhlcmUgY2FuIG9ubHkgYmUgb25lICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMTA3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjEwOC1cdFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTk5PXZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjAwOnZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIyMDEtdTMyIGllZWU4MDIxMV9pZGxlX29mZihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA1PXN0YXRpYyB1MzIgX19pZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTIwLVxubmV0L21hYzgwMjExL2lmYWNlLmM6MTIxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMjItXHRcdGlmIChpdGVyLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xNjE9c3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X21hYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIsXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTg3LVxubmV0L21hYzgwMjExL2lmYWNlLmM6MTg4Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODktXHRcdGlmIChpdGVyID09IHNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTM0MT1zdGF0aWMgaW50IGllZWU4MDIxMV9jaGVja19jb25jdXJyZW50X2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTM1MC1cdC8qIHdlIGhvbGQgdGhlIFJUTkwgaGVyZSBzbyBjYW4gc2FmZWx5IHdhbGsgdGhlIGxpc3QgKi9cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjM1MTpcdGxpc3RfZm9yX2VhY2hfZW50cnkobnNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zNTItXHRcdGlmIChuc2RhdGEgIT0gc2RhdGEgXHUwMDI2XHUwMDI2IGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKG5zZGF0YSkpIHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zODAtXHRcdFx0ICogVG8gcmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24gd2UmIzM5O2QgaGF2ZSB0byBkaXNhbGxvdyB0aGVtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzozODE6XHRcdFx0ICogZnJvbSBzZXR0aW5nIHRoZSBzYW1lIFNTSUQgb24gZGlmZmVyZW50IElCU1MgaW50ZXJmYWNlc1xubmV0L21hYzgwMjExL2lmYWNlLmMtMzgyLVx0XHRcdCAqIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBoYXJkd2FyZS4gVGhlbiwgaG93ZXZlciwgd2UmIzM5O3JlXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMzk3LVx0XHRcdC8qXG5uZXQvbWFjODAyMTEvaWZhY2UuYzozOTg6XHRcdFx0ICogVGhlIHJlbWFpbmluZyBjaGVja3MgYXJlIG9ubHkgcGVyZm9ybWVkIGZvciBpbnRlcmZhY2VzXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zOTktXHRcdFx0ICogd2l0aCB0aGUgc2FtZSBNQUMgYWRkcmVzcy5cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00Nzk9c3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG93bilcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzYtXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjYzNzpcdFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xubmV0L21hYzgwMjExL2lmYWNlLmM6NjM4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzOS1cdFx0XHRXQVJOX09OKGl0ZXItXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9ODQ1PXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NDgtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo4NDk6XHQvKiBjbG9zZSBkZXBlbmRlbnQgVkxBTiBpbnRlcmZhY2VzIGJlZm9yZSBsb2NraW5nIHdpcGh5ICovXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NTAtXHRpZiAoc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NjEtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo4NjI6XHQvKiBDbG9zZSB0aGUgZGVwZW5kZW50IE1CU1NJRCBpbnRlcmZhY2VzIHdpdGggd2lwaHkgbG9jayBhcyB3ZSBtYXkgYmVcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg2My1cdCAqIHRlcm1pbmF0aW5nIGl0cyBwYXJ0bmVyIGxpbmtzIHRvbyBpbiBjYXNlIG9mIE1MRC5cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05MzI9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05MzgtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5Mzk6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0MC1cdFx0aWYgKGl0ZXIgIT0gc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTE2MD1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVjYWxjX3NkYXRhX29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE2OS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjExNzA6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3MS1cdFx0aWYgKHZzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIHx8XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTE3OT12b2lkIGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTg3LVxubmV0L21hYzgwMjExL2lmYWNlLmM6MTE4ODpcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExODktXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEzODk9aW50IGllZWU4MDIxMV9kb19vcGVuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGJvb2wgY29taW5nX3VwKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE1OTktXHRcdCAqIGRvZXNuJiMzOTt0IHN0YXJ0IHVwIHdpdGggc2FuZSBkZWZhdWx0cy5cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE2MDA6XHRcdCAqIEVuYWJsZSBRb1MgZm9yIGFueXRoaW5nIGJ1dCBzdGF0aW9uIGludGVyZmFjZXMuXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNjAxLVx0XHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMTIzPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NpZ25fcGVybV9hZGRyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNDYtXHRcdC8qIG1hdGNoIHVwIHdpdGggYW4gQVAgaW50ZXJmYWNlICovXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTQ3Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTQ4LVx0XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUClcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTU3LVx0XHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBQMlBfREVWX0FERFJfRk9SX0lOVEYpKSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTU4Olx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNTktXHRcdFx0XHRpZiAoc2RhdGEtXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSlcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTcyLVxubmV0L21hYzgwMjExL2lmYWNlLmM6MjE3MzpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTc0LVx0XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwobG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIsXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIwOC1cdFx0bSA9IGxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZXBlcm1fYWRkcjtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMDk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIyMTAtXHRcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIzMy1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMzQ6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2lmYWNlLmMtMjIzNS1cdFx0XHRcdGlmIChldGhlcl9hZGRyX2VxdWFsKHRtcF9hZGRyLCBzZGF0YS1cdTAwM2V2aWYuYWRkcikpIHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMjUyPWludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTAtXHRcdC8qIE1UVSByYW5nZSBpcyBub3JtYWxseSAyNTYgLSAyMzA0LCB3aGVyZSB0aGUgdXBwZXIgbGltaXQgaXNcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0MTE6XHRcdCAqIHRoZSBtYXhpbXVtIE1TRFUgc2l6ZS4gTW9uaXRvciBpbnRlcmZhY2VzIHNlbmQgYW5kIHJlY2VpdmVcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTItXHRcdCAqIE1QRFUgYW5kIEEtTVNEVSBmcmFtZXMgd2hpY2ggbWF5IGJlIG11Y2ggbGFyZ2VyIHNvIHdlIGRvXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQyOC1cdG11dGV4X2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDI5Olx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcyk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDMwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTI0NjQ9dm9pZCBpZWVlODAyMTFfc2RhdGFfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDcwLVxubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ3MTp2b2lkIGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0NzIte1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0NzctXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDc4Olx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBhbGwgc3RvcHBlZCBzb1xubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ3OS1cdCAqIHRoYXQgdGhlIGhhcmR3YXJlIGlzIHN0b3BwZWQuIE90aGVyd2lzZSwgdGhlIGRyaXZlciBtaWdodCBzdGlsbCBiZVxubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ4MDpcdCAqIGl0ZXJhdGluZyB0aGUgaW50ZXJmYWNlcyBkdXJpbmcgdGhlIHNodXRkb3duLCBlLmcuIGZyb20gYSB3b3JrZXJcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0ODEtXHQgKiBvciBmcm9tIFJYIHByb2Nlc3Npbmcgb3Igc2ltaWxhciwgYW5kIGlmIGl0IGRvZXMgc28gKHVzaW5nIGF0b21pY1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0ODgtXHQgKi9cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0ODk6XHRjZmc4MDIxMV9zaHV0ZG93bl9hbGxfaW50ZXJmYWNlcyhsb2NhbC1cdTAwM2Vody53aXBoeSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDkwLVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0OTYtXHRtdXRleF9sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ5NzpcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgXHUwMDI2dW5yZWdfbGlzdCk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDk4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz0xMjA9c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xNjctXHRcdC8qXG5uZXQvbWFjODAyMTEva2V5LmM6MTY4Olx0XHQgKiBUaGUgZHJpdmVyIGRvZXNuJiMzOTt0IGtub3cgYW55dGhpbmcgYWJvdXQgVkxBTiBpbnRlcmZhY2VzLlxubmV0L21hYzgwMjExL2tleS5jOjE2OTpcdFx0ICogSGVuY2UsIGRvbiYjMzk7dCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxubmV0L21hYzgwMjExL2tleS5jLTE3MC1cdFx0ICovXG4tLVxubmV0L21hYzgwMjExL2tleS5jPTg0Nj1pbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTg3NS1cdFx0ICogdGhlIHNhbWUgY2lwaGVyLiBFbmZvcmNlIHRoZSBhc3N1bXB0aW9uIGZvciBwYWlyd2lzZSBrZXlzLlxubmV0L21hYzgwMjExL2tleS5jOjg3NjpcdFx0ICogTkFOIERhdGEgaW50ZXJmYWNlcyBhcmUgZXhlbXB0OiBXaS1GaSBBd2FyZSB2NC4wIHNlY3Rpb24gNy40XG5uZXQvbWFjODAyMTEva2V5LmMtODc3LVx0XHQgKiByZXF1aXJlcyB1cGdyYWRpbmcgdGhlIE5ELVRLU0Egd2hlbiBhIG5ldyBORFAgbmVnb3RpYXRlcyBhXG4tLVxubmV0L21hYzgwMjExL2tleS5jPTEwMjA9dm9pZCBpZWVlODAyMTFfaXRlcl9rZXlzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDM5LVx0fSBlbHNlIHtcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDQwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxubmV0L21hYzgwMjExL2tleS5jLTEwNDEtXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgdG1wLFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDY1PXZvaWQgaWVlZTgwMjExX2l0ZXJfa2V5c19yY3Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTEwODAtXHR9IGVsc2Uge1xubmV0L21hYzgwMjExL2tleS5jOjEwODE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxubmV0L21hYzgwMjExL2tleS5jLTEwODItXHRcdFx0X2llZWU4MDIxMV9pdGVyX2tleXNfcmN1KGh3LCBzZGF0YSwgaXRlciwgaXRlcl9kYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTk2PXN0YXRpYyB1MzIgaWVlZTgwMjExX2NhbGNfaHdfY29uZl9jaGFuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTczLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL21haW4uYzoxNzQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL21haW4uYy0xNzUtXHRcdGlmICghcmN1X2FjY2Vzc19wb2ludGVyKHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5jaGFuY3R4X2NvbmYpKVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmM9NDc0PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtNDkwLVxubmV0L21hYzgwMjExL21haW4uYzo0OTE6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvbWFpbi5jLTQ5Mi1cdFx0Lypcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTUzMC1cdGlmIChyZXQpXG5uZXQvbWFjODAyMTEvbWFpbi5jOjUzMTpcdFx0Y2ZnODAyMTFfc2h1dGRvd25fYWxsX2ludGVyZmFjZXMobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xubmV0L21hYzgwMjExL21haW4uYy01MzItXG4tLVxubmV0L21hYzgwMjExL21haW4uYz03OTM9c3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtOTc4LVxubmV0L21hYzgwMjExL21haW4uYzo5Nzk6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzKTtcbm5ldC9tYWM4MDIxMS9tYWluLmMtOTgwLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG9jYWwtXHUwMDNlbW9uX2xpc3QpO1xuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmM9MTEzNz1pbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTI3MC1cdFx0XHQgKiBBc3NpZ24gdGhlIGZpcnN0IGVuYWJsZWQgY2hhbm5lbCB0byBkZmx0X2NoYW5kZWZcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTI3MTpcdFx0XHQgKiBmcm9tIHRoZSBsaXN0IG9mIGNoYW5uZWxzLiBGb3IgUzFHIGludGVyZmFjZXNcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTI3Mi1cdFx0XHQgKiBlbnN1cmUgaXQgY2FuIGJlIHVzZWQgYXMgYSBwcmltYXJ5LlxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTUyNy1cdCAqIGFuZCB3ZSBuZWVkIHNvbWUgaGVhZHJvb20gZm9yIHBhc3NpbmcgdGhlIGZyYW1lIHRvIG1vbml0b3Jcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTUyODpcdCAqIGludGVyZmFjZXMsIGJ1dCBuZXZlciBib3RoIGF0IHRoZSBzYW1lIHRpbWUuXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE1MjktXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE2ODItXHRyYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKGxvY2FsKTtcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTY4MzpcdGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhsb2NhbCk7XG5uZXQvbWFjODAyMTEvbWFpbi5jLTE2ODQtXHRydG5sX3VubG9jaygpO1xuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmM9MTY5Nj12b2lkIGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTcxNi1cdCAqL1xubmV0L21hYzgwMjExL21haW4uYzoxNzE3Olx0aWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKGxvY2FsKTtcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTcxOC1cbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oPTIxNj1zdHJ1Y3QgbWVzaF9ybWMge1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmgtMjMzLVxubmV0L21hYzgwMjExL21lc2guaDoyMzQ6LyogUHVibGljIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9tZXNoLmgtMjM1LS8qIFZhcmlvdXMgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM0NT12b2lkIG1lc2hfc3RhX2NsZWFudXAoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xubmV0L21hYzgwMjExL21lc2guaC0zNDYtXG5uZXQvbWFjODAyMTEvbWVzaC5oOjM0NzovKiBQcml2YXRlIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzQ4LS8qIE1lc2ggcGF0aHMgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTE4ODg9c3RhdGljIGJvb2wgaWVlZTgwMjExX2FkZF92aHRfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0xOTM4LVxubmV0L21hYzgwMjExL21sbWUuYzoxOTM5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTE5NDAtXHRcdFx0aWYgKG90aGVyLVx1MDAzZXZpZi5ic3NfY29uZi5tdV9taW1vX293bmVyKSB7XG4tLVxubmV0L21hYzgwMjExL21sbWUuYz0yODc0PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2Ffc3dpdGNoX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDItXHRcdCAqIHdpdGggbXVsdGktdmlmIGNzYSBkcml2ZXIgbWF5IGNhbGwgaWVlZTgwMjExX2NzYV9maW5pc2goKVxubmV0L21hYzgwMjExL21sbWUuYzoyOTQzOlx0XHQgKiBtYW55IHRpbWVzIHdoaWxlIHdhaXRpbmcgZm9yIG90aGVyIGludGVyZmFjZXMgdG8gdXNlIHRoZWlyXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDQtXHRcdCAqIHJlc2VydmF0aW9uc1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9MzgyMj12b2lkIGllZWU4MDIxMV9yZWNhbGNfcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0zODMzLVxubmV0L21hYzgwMjExL21sbWUuYzozODM0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL21sbWUuYy0zODM1LVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05NTg1LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL21sbWUuYzo5NTg2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTU4Ny1cdFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvbmFuLmM9MjI0PWllZWU4MDIxMV9uYW5fdXBkYXRlX2FsbF9uZGlfY2FycmllcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL25hbi5jLTIyOS1cbm5ldC9tYWM4MDIxMS9uYW4uYzoyMzA6XHQvKiBJdGVyYXRlIGFsbCBpbnRlcmZhY2VzIGFuZCB1cGRhdGUgY2FycmllciBmb3IgTkRJIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9uYW4uYzoyMzE6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvbmFuLmMtMjMyLVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODM9dm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3ZpZnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy05My1cdCAqIG5vdGlmeSB0aGUgQVAgYWJvdXQgdXMgbGVhdmluZyB0aGUgY2hhbm5lbCBhbmQgc3RvcCBhbGxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6OTQ6XHQgKiBTVEEgaW50ZXJmYWNlcy5cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtOTUtXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwNS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6MTA2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDctXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9MTMzPXZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTQxLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxNDI6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTE0My1cdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9ERVZJQ0UpXG4tLVxubmV0L21hYzgwMjExL3BtLmM9MjE9aW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbilcbi0tXG5uZXQvbWFjODAyMTEvcG0uYy05MS1cdFx0ICovXG5uZXQvbWFjODAyMTEvcG0uYzo5MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3BtLmMtOTMtXHRcdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4tLVxubmV0L21hYzgwMjExL3BtLmMtMTM0LVx0XHRcdC8qIGNmZzgwMjExIHdpbGwgY2FsbCBiYWNrIGludG8gbWFjODAyMTEgdG8gZGlzY29ubmVjdFxubmV0L21hYzgwMjExL3BtLmM6MTM1Olx0XHRcdCAqIGFsbCBpbnRlcmZhY2VzLCBhbGxvdyB0aGF0IHRvIHByb2NlZWQgcHJvcGVybHlcbm5ldC9tYWM4MDIxMS9wbS5jLTEzNi1cdFx0XHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvcG0uYy0xNDYtXG5uZXQvbWFjODAyMTEvcG0uYzoxNDc6XHQvKiByZW1vdmUgYWxsIGludGVyZmFjZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgaW4gdGhlIGRyaXZlciAqL1xubmV0L21hYzgwMjExL3BtLmM6MTQ4Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3BtLmMtMTQ5LVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvcG0uYy0xNjctXHQvKlxubmV0L21hYzgwMjExL3BtLmM6MTY4Olx0ICogV2UgZGlzY29ubmVjdGVkIG9uIGFsbCBpbnRlcmZhY2VzIGJlZm9yZSBzdXNwZW5kLCBhbGwgY2hhbm5lbFxubmV0L21hYzgwMjExL3BtLmMtMTY5LVx0ICogY29udGV4dHMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTc5Nj1pZWVlODAyMTFfdmFsaWRhdGVfbW9uaXRvcl9yYWRpbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvcnguYy04NDAtLypcbm5ldC9tYWM4MDIxMS9yeC5jOjg0MTogKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhIHJlY2VpdmVkIGZyYW1lIHRvIGFsbCBtb25pdG9yIGludGVyZmFjZXMgYW5kXG5uZXQvbWFjODAyMTEvcnguYy04NDItICogcmV0dXJucyBhIGNsZWFuZWQtdXAgU0tCIHRoYXQgbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBGQ1Mgbm9yIHRoZVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTUxNzE9c3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTUxODMtXHQgKiBzbyBwdW50IGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8gZGVsaXZlciBhIGRhdGFcbm5ldC9tYWM4MDIxMS9yeC5jOjUxODQ6XHQgKiBmcmFtZSB0byBtdWx0aXBsZSBpbnRlcmZhY2VzIGFueXdheS5cbm5ldC9tYWM4MDIxMS9yeC5jLTUxODUtXHQgKlxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTUzNjc9c3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvcnguYy01NTE2LVxubmV0L21hYzgwMjExL3J4LmM6NTUxNzpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvcnguYy01NTE4LVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvcnguYz01NzI4PXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNTczNS1cdC8qXG5uZXQvbWFjODAyMTEvcnguYzo1NzM2Olx0ICoga2V5IHJlZmVyZW5jZXMgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcyBhcmUgcHJvdGVjdGVkIHVzaW5nIFJDVVxubmV0L21hYzgwMjExL3J4LmMtNTczNy1cdCAqIGFuZCB0aGlzIHJlcXVpcmVzIHRoYXQgd2UgYXJlIGluIGEgcmVhZC1zaWRlIFJDVSBzZWN0aW9uIGR1cmluZ1xuLS1cbm5ldC9tYWM4MDIxMS9zY2FuLmM9Mjc3PXZvaWQgaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYy0zNTktXG5uZXQvbWFjODAyMTEvc2Nhbi5jOjM2MDpcdC8qIERvIG5vdCB1cGRhdGUgdGhlIEJTUyB0YWJsZSBpbiBjYXNlIG9mIG9ubHkgbW9uaXRvciBpbnRlcmZhY2VzICovXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTM2MS1cdGlmIChsb2NhbC1cdTAwM2VvcGVuX2NvdW50ID09IGxvY2FsLVx1MDAzZW1vbml0b3JzKVxuLS1cbm5ldC9tYWM4MDIxMS9zY2FuLmM9NDQ4PXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYy01MzAtXHQgKi9cbm5ldC9tYWM4MDIxMS9zY2FuLmM6NTMxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3NjYW4uYy01MzItXHRcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYz01OTg9c3RhdGljIGJvb2wgX19pZWVlODAyMTFfY2FuX2xlYXZlX2NoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9zY2FuLmMtNjEyLVxubmV0L21hYzgwMjExL3NjYW4uYzo2MTM6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhX2l0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNjE0LVx0XHRmb3JfZWFjaF92YWxpZF9saW5rKFx1MDAyNnNkYXRhX2l0ZXItXHUwMDNld2RldiwgbGlua19pZClcbi0tXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTkyMz1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9kZWNpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTk0MC1cdCAqL1xubmV0L21hYzgwMjExL3NjYW4uYzo5NDE6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvc2Nhbi5jLTk0Mi1cdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDktICogU3RhdGlvbiBlbnRyaWVzIGFyZSBhZGRlZCBieSBtYWM4MDIxMSB3aGVuIHlvdSBlc3RhYmxpc2ggYSBsaW5rIHdpdGggYVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NTA6ICogcGVlci4gVGhpcyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGZvciB0aGUgZGlmZmVyZW50IHR5cGUgb2YgaW50ZXJmYWNlc1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTEtICogd2Ugc3VwcG9ydC4gRm9yIGEgcmVndWxhciBzdGF0aW9uIHRoaXMgbWVhbiB3ZSBhZGQgdGhlIEFQIHN0YSB3aGVuIHdlXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTI5Mj1zdGF0aWMgYm9vbCBzdGFfaW5mb19jbGVhbnVwX2V4cGlyZV9idWZmZXJlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMjk3LVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTI5ODpcdC8qIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIHN0YXRpb25zIG9uIEJTUy9NQlNTIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEyOTktXHRpZiAoIXN0YS1cdTAwM2VzZGF0YS1cdTAwM2Vic3MgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9MzI2PXN0cnVjdCBpZWVlODAyMTFfZmFzdF90eCB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMzQ2LSAqIEBrZXk6IGJvb2wgaW5kaWNhdGluZyBlbmNyeXB0aW9uIGlzIGV4cGVjdGVkIChrZXkgaXMgc2V0KVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6MzQ3OiAqIEBpbnRlcm5hbF9mb3J3YXJkOiBmb3J3YXJkIGZyb21zIGludGVybmFsbHkgb24gQVAvVkxBTiB0eXBlIGludGVyZmFjZXNcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTM0OC0gKiBAdXNlc19yc3M6IGNvcHkgb2YgVVNFU19SU1MgaHcgZmxhZ1xuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz01NzM9aWVlZTgwMjExX3NkYXRhX2Zyb21fc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NzgtXHRpZiAoc2tiLVx1MDAzZWRldikge1xubmV0L21hYzgwMjExL3N0YXR1cy5jOjU3OTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01ODAtXHRcdFx0aWYgKCFzZGF0YS1cdTAwM2VkZXYpXG4tLVxubmV0L21hYzgwMjExL3N0YXR1cy5jLTU4OS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYzo1OTA6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3N0YXR1cy5jLTU5MS1cdFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz05NDM9dm9pZCBpZWVlODAyMTFfdHhfbW9uaXRvcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtOTUxLVxubmV0L21hYzgwMjExL3N0YXR1cy5jOjk1MjpcdC8qIHNlbmQgZnJhbWUgdG8gbW9uaXRvciBpbnRlcmZhY2VzIG5vdyAqL1xubmV0L21hYzgwMjExL3N0YXR1cy5jLTk1My1cdHJ0YXBfbGVuID0gaWVlZTgwMjExX3R4X3JhZGlvdGFwX2xlbihpbmZvLCBzdGF0dXMpO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy05NjktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6OTcwOlx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy05NzEtXHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MzMwPXN0YXRpYyB2b2lkIHB1cmdlX29sZF9wc19idWZmZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTMzNi1cbm5ldC9tYWM4MDIxMS90eC5jOjMzNzpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvdHguYy0zMzgtXHRcdHN0cnVjdCBwc19kYXRhICpwcztcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODAzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzZXF1ZW5jZToKCioqRGVsdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBJbnRlcmZhY2UgUmVtb3ZhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgZm9yIHJlbW92aW5nIHN0YXRpb25zIGFuZCBpbnRlcmZhY2VzIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGhvdyBgY2ZnODAyMTFfZGVsX3N0YWAsIGBjZmc4MDIxMV9kZWxfaWZhY2VgLCBhbmQgdWx0aW1hdGVseSBgaWVlZTgwMjExX2lmX3JlbW92ZWAgZ2V0IGludm9rZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGludGVyZmFjZSByZW1vdmFsIGZ1bmN0aW9uIGJlY2F1c2UgaXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2YgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIGEgc3RhdGlvbi4KCkkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGNvZGUgd2l0aGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgd2hlcmUgYGllZWU4MDIxMV9pZl9yZW1vdmVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zIHRyaWdnZXJpbmcgdGhpcyBjcml0aWNhbCBvcGVyYXRpb24sIGFuZCBob3cgdGhlIHN0YXRpb24mIzM5O3MgcmVtb3ZhbCBmaXRzIGludG8gdGhlIHdob2xlIHByb2Nlc3MuIEkgd2lsbCBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gQW5kIHdoYXQgYXJlIHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zL3JlYXNvbnMgZm9yIHRoZXNlIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfaWZfcmVtb3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9MjA2PXN0YXRpYyBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICppZWVlODAyMTFfYWRkX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIyNS1cdFx0aWYgKGVycikge1xubmV0L21hYzgwMjExL2NmZy5jOjIyNjpcdFx0XHRpZWVlODAyMTFfaWZfcmVtb3ZlKHNkYXRhKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMjctXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI1Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNTMte1xubmV0L21hYzgwMjExL2NmZy5jOjI1NDpcdGllZWU4MDIxMV9pZl9yZW1vdmUoSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNTUtXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE5Nz1pbnQgaWVlZTgwMjExX2lmX2NoYW5nZV90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE5OC1cdFx0XHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMTk5OnZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjAwLXZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMjUyPWludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MzctXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDM4OnZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0Mzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTAzMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQgZnJvbSBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCBsaW5lcyAyNDM1LTI1MTAuCgoqKkRpdmluZyBEZWVwIGludG8gaWZhY2UuYzogQSBEZXRhaWxlZCBMb29rKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IHRoZSBzZWN0aW9uIGZyb20gYGlmYWNlLmNgIG9wZW4gaW4gbXkgbWVudGFsIGVkaXRvci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDI0MzUgdGhyb3VnaCAyNTEwLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHRoZSBpbnRlcmZhY2UgbGF5ZXIgb2YgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrLiBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBJJiMzOTtkIHdhZ2VyIHdlJiMzOTtyZSBsaWtlbHkgaW4gYSBmdW5jdGlvbiBvciBhIGNydWNpYWwgYmxvY2sgZGVhbGluZyB3aXRoIGludGVyZmFjZS1zcGVjaWZpYyBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBicmluZ2luZyBhbiBpbnRlcmZhY2UgdXAsIGRvd24sIG9yIGhhbmRsaW5nIHNvbWUga2luZCBvZiBhc3NvY2lhdGlvbiBvciBjb25maWd1cmF0aW9uIGNoYW5nZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb250cm9sIGZsb3csIGlkZW50aWZ5aW5nIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSByZWxhdGlvbnNoaXBzLiBJJiMzOTttIGdvaW5nIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0bzoKCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gQXJlIHRoZXJlIHJvYnVzdCBlcnJvciBjaGVja3MsIGFuZCBob3cgYXJlIGZhaWx1cmVzIGNvbW11bmljYXRlZD8KKiAgICoqQ29uY3VycmVuY3k6KiogQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgYmVpbmcgbWFuYWdlZD8KKiAgICoqUmVzb3VyY2UgTWFuYWdlbWVudDoqKiBBcmUgdGhlcmUgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGluIHRoaXMgYXJlYT8gSWYgc28sIHdoYXQgbWVjaGFuaXNtcyBhcmUgdXNlZCB0byBwcmV2ZW50IGxlYWtzPwoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBzdHJ1Y3R1cmVzIGFyZSBhdCBwbGF5LCBhbmQgd2hhdCBraW5kIG9mIG1vZGlmaWNhdGlvbnMgYXJlIGdvaW5nIG9uPyBJJiMzOTtsbCBwcm9iYWJseSBzZWUgYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgLCBgc3RydWN0IGllZWU4MDIxMV92aWZgLCBldGMuLCB3aGljaCBJJiMzOTtsbCByZWxhdGUgdG8gbXkgbWVudGFsIG1vZGVsLgoqICAgKipBYnN0cmFjdGlvbiBMZWFrczoqKiBBbSBJIHNlZWluZyB0aGUgY29kZSBtYWtlIGRpcmVjdCBjYWxscyB0byBoYXJkd2FyZSBvciBuZXR3b3JrIHN0YWNrIGVsZW1lbnRzIG9yIGlzIGl0IGFkaGVyaW5nIHRvIGEgbW9yZSBhYnN0cmFjdCBBUEk/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3ZWxsLWRvY3VtZW50ZWQgY29tbWVudHMgYW5kIHZhcmlhYmxlIG5hbWVzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoZSBjb2RlIGRvZXMuIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBmcm9tIGEgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiBob3cgdGhpcyBwaWVjZSBvZiBjb2RlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhpcyBzdWJzeXN0ZW0uIEkmIzM5O20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIGl0IGlzIGFuIG9wdGltaXphdGlvbiBvciBhIHdvcmthcm91bmQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MzU6XHRcdHJldHVybiAwO1xuMjQzNjpcdH1cbjI0Mzc6XHRcbjI0Mzg6XHR2b2lkIGllZWU4MDIxMV9pZl9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4yNDM5Olx0e1xuMjQ0MDpcdFx0QVNTRVJUX1JUTkwoKTtcbjI0NDE6XHRcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbjI0NDI6XHRcbjI0NDM6XHRcdG11dGV4X2xvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4yNDQ0Olx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCk7XG4yNDQ1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4yNDQ2Olx0XG4yNDQ3Olx0XHRpZiAoc2RhdGEtXHUwMDNldmlmLnR4cSlcbjI0NDg6XHRcdFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cdTAwM2Vsb2NhbCwgdG9fdHhxX2luZm8oc2RhdGEtXHUwMDNldmlmLnR4cSkpO1xuMjQ0OTpcdFxuMjQ1MDpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eHFfbWdtdClcbjI0NTE6XHRcdFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cdTAwM2Vsb2NhbCxcbjI0NTI6XHRcdFx0XHRcdCAgICB0b190eHFfaW5mbyhzZGF0YS1cdTAwM2V2aWYudHhxX21nbXQpKTtcbjI0NTM6XHRcbjI0NTQ6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMjQ1NTpcdFxuMjQ1NjpcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KFx1MDAyNnNkYXRhLVx1MDAzZXdkZXYpO1xuMjQ1NzpcdFxuMjQ1ODpcdFx0aWYgKCFzZGF0YS1cdTAwM2VkZXYpIHtcbjI0NTk6XHRcdFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcbjI0NjA6XHRcdFx0a2ZyZWUoc2RhdGEpO1xuMjQ2MTpcdFx0fVxuMjQ2MjpcdH1cbjI0NjM6XHRcbjI0NjQ6XHR2b2lkIGllZWU4MDIxMV9zZGF0YV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuMjQ2NTpcdHtcbjI0NjY6XHRcdGlmIChXQVJOX09OX09OQ0UoIXRlc3RfYml0KFNEQVRBX1NUQVRFX1JVTk5JTkcsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKSkpXG4yNDY3Olx0XHRcdHJldHVybjtcbjI0Njg6XHRcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcbjI0Njk6XHR9XG4yNDcwOlx0XG4yNDcxOlx0dm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4yNDcyOlx0e1xuMjQ3MzpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsICp0bXA7XG4yNDc0Olx0XHRMSVNUX0hFQUQodW5yZWdfbGlzdCk7XG4yNDc1Olx0XG4yNDc2Olx0XHRBU1NFUlRfUlROTCgpO1xuMjQ3NzpcdFxuMjQ3ODpcdFx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBhbGwgc3RvcHBlZCBzb1xuMjQ3OTpcdFx0ICogdGhhdCB0aGUgaGFyZHdhcmUgaXMgc3RvcHBlZC4gT3RoZXJ3aXNlLCB0aGUgZHJpdmVyIG1pZ2h0IHN0aWxsIGJlXG4yNDgwOlx0XHQgKiBpdGVyYXRpbmcgdGhlIGludGVyZmFjZXMgZHVyaW5nIHRoZSBzaHV0ZG93biwgZS5nLiBmcm9tIGEgd29ya2VyXG4yNDgxOlx0XHQgKiBvciBmcm9tIFJYIHByb2Nlc3Npbmcgb3Igc2ltaWxhciwgYW5kIGlmIGl0IGRvZXMgc28gKHVzaW5nIGF0b21pY1xuMjQ4MjpcdFx0ICogaXRlcmF0aW9uKSB3aGlsZSB3ZSYjMzk7cmUgbWFuaXB1bGF0aW5nIHRoZSBsaXN0LCB0aGUgaXRlcmF0aW9uIHdpbGxcbjI0ODM6XHRcdCAqIGNyYXNoLlxuMjQ4NDpcdFx0ICpcbjI0ODU6XHRcdCAqIEFmdGVyIHRoaXMsIHRoZSBoYXJkd2FyZSBzaG91bGQgYmUgc3RvcHBlZCBhbmQgdGhlIGRyaXZlciBzaG91bGRcbjI0ODY6XHRcdCAqIGhhdmUgc3RvcHBlZCBhbGwgb2YgaXRzIGFjdGl2aXRpZXMsIHNvIHRoYXQgd2UgY2FuIGRvIFJDVS11bmF3YXJlXG4yNDg3Olx0XHQgKiBtYW5pcHVsYXRpb25zIG9mIHRoZSBpbnRlcmZhY2UgbGlzdCBiZWxvdy5cbjI0ODg6XHRcdCAqL1xuMjQ4OTpcdFx0Y2ZnODAyMTFfc2h1dGRvd25fYWxsX2ludGVyZmFjZXMobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuMjQ5MDpcdFxuMjQ5MTpcdFx0Z3VhcmQod2lwaHkpKGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbjI0OTI6XHRcbjI0OTM6XHRcdFdBUk4obG9jYWwtXHUwMDNlb3Blbl9jb3VudCwgXCYjMzQ7JXM6IG9wZW4gY291bnQgcmVtYWlucyAlZFxcblwmIzM0OyxcbjI0OTQ6XHRcdCAgICAgd2lwaHlfbmFtZShsb2NhbC1cdTAwM2Vody53aXBoeSksIGxvY2FsLVx1MDAzZW9wZW5fY291bnQpO1xuMjQ5NTpcdFxuMjQ5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2VpZmxpc3RfbXR4KTtcbjI0OTc6XHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgXHUwMDI2dW5yZWdfbGlzdCk7XG4yNDk4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4yNDk5Olx0XG4yNTAwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RhdGEsIHRtcCwgXHUwMDI2dW5yZWdfbGlzdCwgbGlzdCkge1xuMjUwMTpcdFx0XHRib29sIG5ldGRldiA9IHNkYXRhLVx1MDAzZWRldjtcbjI1MDI6XHRcbjI1MDM6XHRcdFx0LypcbjI1MDQ6XHRcdFx0ICogUmVtb3ZlIElQIGFkZHJlc3NlcyBleHBsaWNpdGx5LCBzaW5jZSB0aGUgbm90aWZpZXIgd2lsbFxuMjUwNTpcdFx0XHQgKiBza2lwIHRoZSBjYWxsYmFja3MgaWYgd2Rldi1cdTAwM2VyZWdpc3RlcmVkIGlzIGZhbHNlLCBzaW5jZVxuMjUwNjpcdFx0XHQgKiB3ZSBjYW4mIzM5O3QgYWNxdWlyZSB0aGUgd2lwaHlfbG9jaygpIGFnYWluIHRoZXJlIGlmIGFscmVhZHlcbjI1MDc6XHRcdFx0ICogaW5zaWRlIHRoaXMgbG9ja2VkIHNlY3Rpb24uXG4yNTA4Olx0XHRcdCAqL1xuMjUwOTpcdFx0XHRzZGF0YS1cdTAwM2V2aWYuY2ZnLmFycF9hZGRyX2NudCA9IDA7XG4yNTEwOlx0XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuMjUxMTpcdFx0XHQgICAgc2RhdGEtXHUwMDNldS5tZ2QuYXNzb2NpYXRlZClcbjI1MTI6XHRcdFx0XHRpZWVlODAyMTFfdmlmX2NmZ19jaGFuZ2Vfbm90aWZ5KHNkYXRhLFxuMjUxMzpcdFx0XHRcdFx0XHRcdFx0QlNTX0NIQU5HRURfQVJQX0ZJTFRFUik7XG4yNTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBVbmluaXRpYWxpemluZyBhIE5ldGRldiBXaXRob3V0IEV4cGxpY2l0IE1hYzgwMjExIFJlbW92YWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgcG90ZW50aWFsIGZhbGxvdXQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkgaXMgdW5pbml0aWFsaXplZCBvciB1bnJlZ2lzdGVyZWQsIGJ1dCB3aXRob3V0IGBtYWM4MDIxMWAgZXhwbGljaXRseSBjYWxsaW5nIGBpZWVlODAyMTFfaWZfcmVtb3ZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4YW1pbmluZyB0aGUgYGllZWU4MDIxMV91bmluaXRgIGZ1bmN0aW9uLiBCZWZvcmUgdGhlIHJlY2VudCBwYXRjaCwgdGhpcyBmdW5jdGlvbiB3YXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBjYWxsaW5nIGBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGFgLiBIb3dldmVyLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgLiBUaGlzIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgYSBzdWItaW50ZXJmYWNlIGRhdGEgc3RydWN0dXJlIChgc2RhdGFgKSBmcm9tIGEgbGlua2VkIGxpc3QgKGBsb2NhbC0mZ3Q7aW50ZXJmYWNlc2ApLiBUaGUgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgdGhlIGBpZmxpc3RfbXR4YCBtdXRleC4gVGhlIGBsaXN0X2RlbF9yY3VgIGNhbGwgaGVyZSBpcyBpbXBvcnRhbnQgZm9yIHRoZSBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIG1lY2hhbmlzbSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIgZm9yIGNvbmN1cnJlbmN5IGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuCgpOb3csIGFmdGVyIHRoZSBwYXRjaCwgYGllZWU4MDIxMV91bmluaXRgIG5vdyBjYWxscyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYW5kICp0aGVuKiBjYWxscyBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhYC4gU28gdGhlIG9yZGVyIGlzIGNsZWFybHkgcmVsZXZhbnQ6IFVubGlzdCAqdGhlbiogdGVhcmRvd24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY2xvc2VseSBpbnNwZWN0IGxpbmVzIDE1MC0yNTAgYW5kIGxpbmVzIDE4ODAtMTkxMCB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBob3cgdGhvc2UgcGFydHMgdGllIGludG8gdGhpcyBmbG93LCBhbmQgd2hhdCBvdGhlciBhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudCBkdXJpbmcgZGV2aWNlIHVuaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIG90aGVyIHN1YnRsZSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHRoZSBub3JtYWwgcmVtb3ZhbCBwcm9jZWR1cmUgaXNuJiMzOTt0IGZvbGxvd2VkLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgd2hhdCBoYXBwZW5zIGlmIHRoZSBkcml2ZXIgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHVubGlzdGVkIG9yIHRvcm4tZG93biBzdWItaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcbiAxNTE6XHRcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4gMTUyOlx0XG4gMTUzOlx0XHRyZXR1cm4gMDtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0c3RhdGljIGludCBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIDE1NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuIDE1ODpcdHtcbiAxNTk6XHRcdGludCBlcnI7XG4gMTYwOlx0XG4gMTYxOlx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE2MjpcdFx0XHRyZXR1cm4gMDtcbiAxNjM6XHRcbiAxNjQ6XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuIDE2NTpcdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4gMTY2Olx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuIDE2NzpcdFxuIDE2ODpcdFx0cmV0dXJuIGVycjtcbiAxNjk6XHR9XG4gMTcwOlx0XG4gMTcxOlx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMTcyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4gMTczOlx0e1xuIDE3NDpcdFx0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiAxNzU6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7XG4gMTc2Olx0XHRpbnQgZXJyID0gMDtcbiAxNzc6XHRcbiAxNzg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gMTc5Olx0XHRcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XG4gMTgwOlx0XHRcdGlmICghZXJyKVxuIDE4MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDE4MjpcdFx0XHRpZiAoIWZvcmNlKVxuIDE4MzpcdFx0XHRcdGdvdG8gdW5kbztcbiAxODQ6XHRcdFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xuIDE4NTpcdFx0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuIDE4NjpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpXG4gMTg3Olx0XHRcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHdkZXYpO1xuIDE4ODpcdFx0XHRlcnIgPSAwO1xuIDE4OTpcdFx0fVxuIDE5MDpcdFxuIDE5MTpcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSB7XG4gMTkyOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbiAxOTM6XHRcdFx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE5NDpcdFx0XHRcdFx0Y29udGludWU7XG4gMTk1Olx0XHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcbiAxOTY6XHRcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiAxOTc6XHRcdFx0fVxuIDE5ODpcdFxuIDE5OTpcdFx0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuIDIwMDpcdFxuIDIwMTpcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4gMjAyOlx0XG4gMjAzOlx0XHRcdC8qIHRoaXMgb25seSBmYWlscyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbiAyMDQ6XHRcdFx0ZXJyID0gZGV2aWNlX3JlbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldixcbiAyMDU6XHRcdFx0XHRcdCAgICBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuIDIwNjpcdFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhZm9yY2UpXG4gMjA3Olx0XHRcdFx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBvbGRfbmV0KTtcbiAyMDg6XHRcbiAyMDk6XHRcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiAyMTA6XHRcbiAyMTE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuIDIxMjpcdFx0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4gMjEzOlx0XHRcdFx0XHRjb250aW51ZTtcbiAyMTQ6XHRcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuIDIxNTpcdFx0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuIDIxNjpcdFx0XHR9XG4gMjE3Olx0XHR9XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAoIWVyciB8fCBmb3JjZSlcbiAyMjA6XHRcdFx0cmV0dXJuIGVycjtcbiAyMjE6XHRcbiAyMjI6XHRcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xuIDIyMzpcdFx0d2RldiA9IGxpc3RfZW50cnkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIHR5cGVvZigqd2RldiksIGxpc3QpO1xuIDIyNDpcdHVuZG86XG4gMjI1Olx0XHQvKlxuIDIyNjpcdFx0ICogTW92ZSBiYWNrIGV2ZXJ5dGhpbmcsIGlmIHRoaXMgZmFpbHMgYWdhaW4gKGFsbG9jYXRpb24gZmFpbHVyZXMpXG4gMjI3Olx0XHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cbiAyMjg6XHRcdCAqL1xuIDIyOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LFxuIDIzMDpcdFx0XHRcdFx0XHQgICAgIGxpc3QpXG4gMjMxOlx0XHRcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2Rldiwgb2xkX25ldCkpO1xuIDIzMjpcdFxuIDIzMzpcdFx0cmV0dXJuIGVycjtcbiAyMzQ6XHR9XG4gMjM1Olx0XG4gMjM2Olx0aW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMjM3Olx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXG4gMjM4Olx0e1xuIDIzOTpcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19ORVROU19PSykpXG4gMjQwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAyNDE6XHRcbiAyNDI6XHRcdHJldHVybiBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBuZXQsIGZhbHNlKTtcbiAyNDM6XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0c3RhdGljIHZvaWQgY2ZnODAyMTFfcmZraWxsX3BvbGwoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKVxuIDI0NjpcdHtcbiAyNDc6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRhdGE7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRndWFyZCh3aXBoeSkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgY2ZnODAyMTFfcGVybmV0X2V4aXRgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGNmZzgwMjExX3Blcm5ldF9leGl0YC4gVGhpcyBmdW5jdGlvbi4uLiBpdCYjMzk7cyBjcnVjaWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBjbGVhbmluZyB1cCB0aGUgcGVyLW5ldCBkZXZpY2Ugc3RhdGUgd2l0aGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRldmljZSByZW1vdmFsLCBtb2R1bGUgdW5sb2FkLCBhbmQgZ2VuZXJhbGx5LCBncmFjZWZ1bCBzaHV0ZG93biBvZiBuZXR3b3JrIG5hbWVzcGFjZXMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNsZWFuZWQgdXAgaGVyZT8gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgdW5yZWdpc3RyYXRpb24gcHJvY2Vzcywgb3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIHBlcmhhcHMgd2l0aCBvdXRzdGFuZGluZyB3b3JrcXVldWVzIG9yIGRlZmVycmVkIGV2ZW50cyByZWxhdGVkIHRvIHdpcmVsZXNzIG9wZXJhdGlvbnM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgdGVhcmRvd24gdGhhdCBuZWVkIGNsb3NlciBzY3J1dGlueT8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvcmUgY2ZnODAyMTEgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgcmVsYXRlZCB0byByZWdpc3RyYXRpb24sIHVucmVnaXN0cmF0aW9uLCBhbmQgZXZlbnQgaGFuZGxpbmcgd2l0aGluIHRoYXQgbmV0d29yayBuYW1lc3BhY2UgY29udGV4dC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBmcmVlaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCDigJMgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZS1mcmVlcyBsdXJraW5nIGhlcmU/IEkmIzM5O20gaG9waW5nIHRoZSBjb2RlIGlzIGNsZWFuLCBidXQgeW91IG5ldmVyIGtub3cuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIGEgcm9idXN0IGFuZCBzdGFibGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODg1Olx0c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIgPSB7XG4xODg2Olx0XHQubm90aWZpZXJfY2FsbCA9IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsLFxuMTg4NzpcdH07XG4xODg4Olx0XG4xODg5Olx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4xODkwOlx0e1xuMTg5MTpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuMTg5MjpcdFxuMTg5MzpcdFx0cnRubF9sb2NrKCk7XG4xODk0Olx0XHRmb3JfZWFjaF9yZGV2KHJkZXYpIHtcbjE4OTU6XHRcdFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSksIG5ldCkpXG4xODk2Olx0XHRcdFx0V0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCwgdHJ1ZSkpO1xuMTg5NzpcdFx0fVxuMTg5ODpcdFx0cnRubF91bmxvY2soKTtcbjE4OTk6XHR9XG4xOTAwOlx0XG4xOTAxOlx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBjZmc4MDIxMV9wZXJuZXRfb3BzID0ge1xuMTkwMjpcdFx0LmV4aXQgPSBjZmc4MDIxMV9wZXJuZXRfZXhpdCxcbjE5MDM6XHR9O1xuMTkwNDpcdFxuMTkwNTpcdHZvaWQgd2lwaHlfd29ya19xdWV1ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbjE5MDY6XHR7XG4xOTA3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbjE5MDg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xOTA5Olx0XG4xOTEwOlx0XHR0cmFjZV93aXBoeV93b3JrX3F1ZXVlKHdpcGh5LCB3b3JrKTtcbjE5MTE6XHRcbjE5MTI6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHlfd29ya19sb2NrLCBmbGFncyk7XG4xOTEzOlx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ3b3JrLVx1MDAzZWVudHJ5KSlcbjE5MTQ6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ3b3JrLVx1MDAzZWVudHJ5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5X3dvcmtfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgTGludXggV2lyZWxlc3MgTmV0d29yayBOYW1lc3BhY2UgVHJhbnNpdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgbmFtZXNwYWNlIHRyYW5zaXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbXMsIGBjZmc4MDIxMWAgYW5kIGBtYWM4MDIxMWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBzdWJzeXN0ZW1zIGFyZSByZWFjaGFibGUgYW5kIGhvdyBuYW1lc3BhY2Ugc3dpdGNoaW5nIGlzIGhhbmRsZWQuCgpSaWdodCwgSSYjMzk7dmUgZ290IGl0LiBJIGNhbiBjcmVhdGUgYW5kIG1hbmFnZSB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMsIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgdmlydF93aWZpYCwgdXNpbmcgbmV0bGluayAoYG5sODAyMTFgKS4gVGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHRyaWdnZXIgbmFtZXNwYWNlIHN3aXRjaGluZy4gSSByZW1lbWJlciB0aGF0IG5ldGxpbmsgb2ZmZXJzIGEgZmV3IG1ldGhvZHMsIGxpa2UgYE5MODAyMTFfQ01EX1NFVF9XSVBIWWAgaW4gY29uanVuY3Rpb24gd2l0aCBgTkw4MDIxMV9BVFRSX05FVE5TX1BJRGAgb3IgYE5MODAyMTFfQVRUUl9ORVROU19GRGAuIFRoYXQgc2VlbXMgcHJldHR5IHN0YW5kYXJkLiBBbHNvLCBuYW1lc3BhY2UgZXhpdCB1c2luZyBgY2ZnODAyMTFfcGVybmV0X2V4aXRgLgoKSSBhbHNvIHJlY2FsbCB0aGF0IGR1cmluZyBpbnRlcmZhY2UgdGVhcmRvd24gb3IgbmFtZXNwYWNlIGRlc3RydWN0aW9uLCB0aGluZ3MgbGlrZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBhcmUgZXhlY3V0ZWQsIHdoaWNoIGFyZSBjcnVjaWFsIGNsZWFudXAgb3BlcmF0aW9ucy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGxvb2sgYXQgd2hlcmUgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AgaXMgYWN0dWFsbHkgKmNhbGxlZCouIEkgbmVlZCB0byBzZWUgdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTGV0IG1lIGRpZyBpbnRvIHRoZSBjb2RlIHVuZGVyIGBuZXQvd2lyZWxlc3MvYCBhbmQgZWxzZXdoZXJlLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV9zd2l0Y2hfbmV0bnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmM9MTU2PXN0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3MC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTcxOnN0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzItXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMzUtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIzNjppbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjM3LVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjQxLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNDI6XHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0My19XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xODg5PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTg5NS1cdFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSksIG5ldCkpXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE4OTY6XHRcdFx0V0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCwgdHJ1ZSkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xODk3LVx0fVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9MjQzPXN0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpO1xubmV0L3dpcmVsZXNzL2NvcmUuaC0yNDQtXG5uZXQvd2lyZWxlc3MvY29yZS5oOjI0NTppbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmgtMjQ2LVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0MzU3PXN0YXRpYyBpbnQgbmw4MDIxMV93aXBoeV9uZXRucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzOTQtXHRpZiAoIW5ldF9lcSh3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSksIG5ldCkpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0Mzk1Olx0XHRlcnIgPSBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzOTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBtYWM4MDIxMSBJbnRlcmZhY2UgVW5pbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSAqZGVmaW5pdGVseSogcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCmBpZWVlODAyMTFfdW5pbml0YCBpcyBlc3NlbnRpYWxseSB0aGUgYG5kb191bmluaXRgIGNhbGxiYWNrIHdpdGhpbiBgbmV0X2RldmljZV9vcHNgLCBzcGVjaWZpY2FsbHkgZGVmaW5lZCB3aXRoaW4gYGllZWU4MDIxMV9kYXRhaWZfb3BzYC4gVGhpcyBtZWFucyBpdCBnZXRzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCB0cmlnZ2VyZWQgYnkgYWN0aW9ucyBsaWtlIGB1bnJlZ2lzdGVyX25ldGRldmljZWAgb3IgYHJvbGxiYWNrX3JlZ2lzdGVyZWRfbWFueWAuIFdpdGggdGhlIHBhdGNoIGluIHF1ZXN0aW9uLCB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHJlbW92ZXMgdGhlIGBzZGF0YWAgc3RydWN0dXJlIGZyb20gYGxvY2FsLSZndDtpbnRlcmZhY2VzYCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkICp3aXRob3V0KiBhIHByaW9yIGBpZWVlODAyMTFfaWZfcmVtb3ZlYCBjYWxsLiBUaGlzIHNjZW5hcmlvIGFyaXNlcywgZm9yIGluc3RhbmNlLCB3aGVuIGBjZmc4MDIxMWAgZmFpbHMgdG8gbW92ZSB0aGUgZGV2aWNlIG91dCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlIHRoYXQmIzM5O3MgYmVpbmcgZGVzdHJveWVkLCBvciBkdXJpbmcgZm9yY2VkIHVucmVnaXN0ZXJzIChlLmcuLCB3aGVuIHVucmVnaXN0ZXJpbmcgYSB3aXJlbGVzcyBkZXZpY2Ugb3IgbmV0IGRldmljZSkgYW5kIG5hbWVzcGFjZSBpc3N1ZXMuCgpUaGUgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zYCBmdW5jdGlvbiBub3cgaGFzIGEgYGZvcmNlYCBwYXJhbWV0ZXIuIFdoZW4gc2V0IHRvIHRydWUsIGl0IGZvcmNlcyB0aGUgdW5yZWdpc3RyYXRpb24gb2Ygd2lyZWxlc3MgZGV2aWNlcyB0aGF0IGZhaWwgdG8gc3dpdGNoIG5hbWVzcGFjZXMuIFRoaXMgc2VlbXMgZGlyZWN0bHkgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZSBleGl0LCB3aGljaCBpcyBhbm90aGVyIGFyZWEgSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiByZWNlbnRseS4KCkdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGludm9sdmVkIGluIGNvcmUgd2lyZWxlc3MgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCB0b3VjaGluZyBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAgYW5kIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSBoaWdoIHByaW9yaXR5LiBUaGUgY29kZSBwYXRoIGFwcGVhcnMgcmVhY2hhYmxlLCBhbmQgY29tcGxleCBlbm91Z2ggdG8gd2FycmFudCBleHRlbnNpdmUgZnV6emluZy4gYFdvcnRoRnV6emluZyA9IHRydWVgLgoKSSYjMzk7bGwgbm93IGNhcmVmdWxseSB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIHJlbGV2YW50IHN5bWJvbHMgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCB0byBiZSBlbmFibGVkLCBhbmQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHdpdGhpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXHRib29sIFwmIzM0O2VuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXHRib29sIFwmIzM0O3JlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDthbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXHRzdHJpbmcgXCYjMzQ7YWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O2NmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVx0Ym9vbCBcJiMzNDtlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7c3VwcG9ydCBDUkRBXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1Rcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBjZmc4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDYzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmb3IgYENGRzgwMjExYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRpZ2h0bHkgYENGRzgwMjExYCBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLiBUaGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3aXJlbGVzcywgaW5jbHVkaW5nIGxpa2VseSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ0ZHODAyMTFgLCBzaG91bGQgYmUgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIHJlbHkgb24sIG9yIGFyZSBhY3RpdmF0ZWQgYnksIGBDRkc4MDIxMWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaG93IGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgd291bGQgYWZmZWN0IHRoZSBvdmVyYWxsIHdpcmVsZXNzIGZ1bmN0aW9uYWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBtYXAgb3V0IHRoZSAmIzM0O2luZmx1ZW5jZSYjMzQ7IG9mIHRoaXMgY29yZSBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0lSRUxFU1NfRVhUXG4gICAzOlx0XHRib29sXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFdFWFRfQ09SRVxuICAgNjpcdFx0ZGVmX2Jvb2wgeVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBXRVhUX1BST0NcbiAgMTA6XHRcdGRlZl9ib29sIHlcbiAgMTE6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgV0VYVF9QUklWXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIENGRzgwMjExXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gIDIwOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjI6XHRcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxuICAyMzpcdFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJiMzOTt0XG4gIDI0Olx0XHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cbiAgMjg6XHRcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDMxOlx0XG4gIDMyOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxuICAzMzpcdFxuICAzNDpcdFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxuICAzNTpcdFxuICAzNjpcdGlmIENGRzgwMjExXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7bmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MjQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmNpZXMgLSBJbnZlc3RpZ2F0aW5nIHRoZSBOZXR3b3JrIEtlcm5lbCBNb2R1bGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkcml2aW5nIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IGl0cyBkZXBlbmRlbmNpZXMsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHdoaWNoIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIG9wdGlvbnMgYXJlIHJlcXVpcmVkIG9yIGltcGFjdGVkIGJ5IGl0cyBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIGZvciBtZSB0byBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhlc2UgcmVsYXRpb25zaGlwczsgdGhpcyB3aWxsIGVuYWJsZSBtZSB0byB0cmFjayBkb3duIHRoZSByb290IGNhdXNlIG9mIHRoZSBjdXJyZW50IGlzc3VlIGFuZCB0byBwcm92aWRlIGFuIGVmZmVjdGl2ZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNQUM4MDIxMVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ0NNXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXG4gIDE0Olx0XHQgIG5ldHdvcmtpbmcgc3RhY2suXG4gIDE1Olx0XG4gIDE2Olx0Y29tbWVudCBcJiMzNDtDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXG4gIDE4Olx0XG4gIDE5Olx0aWYgTUFDODAyMTEgIT0gblxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODcyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBOYW1lc3BhY2UgU3dpdGNoaW5nIGluIFdpcmVsZXNzIFN1YnN5c3RlbXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBpbXBsZW1lbnRhdGlvbiBmb3Igd2lyZWxlc3MsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zOiBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFgLCBhbG9uZ3NpZGUgdGhlIHN0YW5kYXJkIGBORVRgIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdpbmcuIExldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIGFmZmVjdGVkIGJ5IHRoaXMuCgpJbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCBJIHNlZSBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYW5kIGBpZWVlODAyMTFfdW5pbml0YCBhcmUgYmVpbmcgdG91Y2hlZC4gVGhlbiwgb3ZlciBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIEkmIzM5O3ZlIGdvdCBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNgIGFuZCBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIOKAkyBib3RoIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgZGlzdGluY3Qgb3IgaW5saW5lZCDigJMgYWxvbmcgd2l0aCB0aGUgZ2xvYmFsbHkgZXhwb3J0ZWQgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AsIGFuZCBmaW5hbGx5LCB0aGUgc3RhdGljIHBlcm5ldCBleGl0IGNhbGxiYWNrIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgZGlzdGluY3RuZXNzIG9yIGlubGluaW5nIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEkmIzM5O2xsIGZsYWcgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgLCBgaWVlZTgwMjExX3VuaW5pdGAsIGBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc2AsIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2AsIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgLCBhbmQgYGNmZzgwMjExX3Blcm5ldF9leGl0YCBmb3IgdGhhdCBjaGVjay4KCkFsc28sIGl0JiMzOTtzIGNydWNpYWwgdG8gZmluZCB0aGUgZW50cnkgcG9pbnQsIHRoZSBjYWxsZXIuIEkgc2VlIGBubDgwMjExX3dpcGh5X25ldG5zYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgYXMgYSBkaXJlY3QgbmV0bGluayBoYW5kbGVyIGNhbGxpbmcgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AuIEkgd2lsbCBiZSBjaGVja2luZyBpbnRvIGBubDgwMjExX3dpcGh5X25ldG5zYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV93aXBoeV9uZXRucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDMzND1zdGF0aWMgaW50IG5sODAyMTFfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzNTYtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0MzU3OnN0YXRpYyBpbnQgbmw4MDIxMV93aXBoeV9uZXRucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDM1OC17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDA2Ni1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDA2NzpcdFx0LmRvaXQgPSBubDgwMjExX3dpcGh5X25ldG5zLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDA2OC1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4ODkKCQkJCQkJCW91dHB1dDogMjU1CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXROUyBXaXJlbGVzcyBJbnRlcmZhY2UgU3dpdGNoaW5nKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB2aWV3IGhlcmUuIEkmIzM5O20gc2VlaW5nIGEgY29yZSBzZXQgb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gd2lyZWxlc3MgbmV0d29yayBuYW1lc3BhY2Ugc3dpdGNoaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AKKiAgIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2AKKiAgIGBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc2AKKiAgIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAKKiAgIGBubDgwMjExX3dpcGh5X25ldG5zYAoqICAgYGllZWU4MDIxMV91bmluaXRgCiogICBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAKCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyDigJMgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGNvbmZpZ3VyYXRpb25zLCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ0ZHODAyMTFgIG9yIGBNQUM4MDIxMWAgbW9yZSBnZW5lcmFsbHkuIFRoZW4sIGxldCYjMzk7cyBjb25maXJtIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLgoKWXVwLCB0aGlzIGxvb2tzIHdvcnRod2hpbGUuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwgd2lyZWxlc3MgbmV0bnMgc3dpdGNoaW5nIGxvZ2ljIHdpdGhpbiBgY2ZnODAyMTFgIGFuZCBhbHNvIGRlYWxpbmcgd2l0aCBpbnRlcmZhY2UgdW5saXN0aW5nIGluIGBtYWM4MDIxMWAsIGFsbCBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb24gb3IgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uLiBUaGVzZSBwYXRocyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcyBvciB3aGVuIHRlYXJpbmcgZG93biBuZXR3b3JrIG5hbWVzcGFjZXMsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCYjMzk7cyBhbGwgY2xlYXIsIHRoZSBhbmFseXNpcyBzZWVtcyBzb2xpZC4gT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wZXJuZXRfZXhpdCYjMzQ7LAogICAgJiMzNDtubDgwMjExX3dpcGh5X25ldG5zJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV91bmluaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VubGlzdF9zZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi91bmxpc3RpbmcgbG9naWMgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgaGFuZGxpbmcgb2YgaW50ZXJmYWNlcyBmYWlsaW5nIHRvIHN3aXRjaCBuYW1lc3BhY2VzIG9uIG5ldG5zIGV4aXQgYW5kIGVuc3VyZXMgbWFjODAyMTEgZHJvcHMgbmV0ZGV2cyBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCB1cG9uIHVuaW5pdC4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIHdpdGggdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChlLmcuLCBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3Blcm5ldF9leGl0JiMzNDssCiAgICAmIzM0O25sODAyMTFfd2lwaHlfbmV0bnMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdW5saXN0X3NkYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M3NmEwNGQ0NTM1OTVlMjU3ZGIyMzYyODRlYzllYzgzN2Q4NzU2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDE6MzM6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC05MjQsOSAmIzQzOzkyNCwzMyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2CiYjNDM7ICogY29yZSB3aGVuIGNmZzgwMjExIGNvdWxkbiYjMzk7dCBtb3ZlIGl0IG91dCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlIHRoYXQmIzM5O3MgYmVpbmcKJiM0MzsgKiBkZXN0cm95ZWQuIERyb3AgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgZWl0aGVyIHdheS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5saXN0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0mZ3Q7bG9jYWw7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKml0ZXI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJmFtcDtsb2NhbC0mZ3Q7aW50ZXJmYWNlcywgbGlzdCkgewomIzQzOwkJaWYgKGl0ZXIgIT0gc2RhdGEpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlndWFyZChtdXRleCkoJmFtcDtsb2NhbC0mZ3Q7aWZsaXN0X210eCk7CiYjNDM7CQlsaXN0X2RlbF9yY3UoJmFtcDtzZGF0YS0mZ3Q7bGlzdCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldikpOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiYjNDM7CiYjNDM7CWllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc2RhdGEpOwomIzQzOwlpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjMxZDBmNzA4NjcwMTIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMTUzLDY4ICYjNDM7MTUzLDkzIEBAIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkgIHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgaW50IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwotCWludCBlcnIgPSAwOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKCEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19ORVROU19PSykpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiYjNDM7CXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7CiYjNDM7CWVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LSZndDtuZXRkZXYsIG5ldCwgJiMzNDt3bGFuJWQmIzM0Oyk7CiYjNDM7CXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm9sZF9uZXQgPSB3aXBoeV9uZXQoJmFtcDtyZGV2LSZndDt3aXBoeSk7CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewomIzQzOwkJZXJyID0gY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2RldiwgbmV0KTsKJiM0MzsJCWlmICghZXJyKQogCQkJY29udGludWU7Ci0JCXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7Ci0JCWVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LSZndDtuZXRkZXYsIG5ldCwgJiMzNDt3bGFuJWQmIzM0Oyk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSB0cnVlOwomIzQzOwkJaWYgKCFmb3JjZSkKJiM0MzsJCQlnb3RvIHVuZG87CiYjNDM7CQkvKiByZW1vdmUgaW50ZXJmYWNlcyB0aGF0IGZhaWwgdG8gYWxsb3cgd2lwaHkgc3dpdGNoaW5nICovCiYjNDM7CQlkZXZfY2xvc2Uod2Rldi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCXNjb3BlZF9ndWFyZCh3aXBoeSwgJmFtcDtyZGV2LSZndDt3aXBoeSkKJiM0MzsJCQljZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7CiYjNDM7CQllcnIgPSAwOwogCX0KIAotCWlmIChlcnIpIHsKLQkJLyogZmFpbGVkIC0tIGNsZWFuIHVwIHRvIG9sZCBuZXRucyAqLwotCQluZXQgPSB3aXBoeV9uZXQoJmFtcDtyZGV2LSZndDt3aXBoeSk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsCi0JCQkJCQkgICAgICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LAotCQkJCQkJICAgICBsaXN0KSB7CiYjNDM7CXNjb3BlZF9ndWFyZCh3aXBoeSwgJmFtcDtyZGV2LSZndDt3aXBoeSkgewomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewogCQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiAJCQkJY29udGludWU7Ci0JCQl3ZGV2LSZndDtuZXRkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IGZhbHNlOwotCQkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtJmd0O25ldGRldiwgbmV0LAotCQkJCQkJCSYjMzQ7d2xhbiVkJiMzNDspOwotCQkJV0FSTl9PTihlcnIpOwotCQkJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSB0cnVlOwomIzQzOwkJCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsCiYjNDM7CQkJCQkgICAgIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpOwogCQl9CiAKLQkJcmV0dXJuIGVycjsKLQl9CiYjNDM7CQlubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpOwogCi0JZ3VhcmQod2lwaHkpKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwomIzQzOwkJd2lwaHlfbmV0X3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LCBuZXQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXdkZXYtJmd0O25ldGRldikKLQkJCWNvbnRpbnVlOwotCQlubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTsKLQl9CiYjNDM7CQkvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovCiYjNDM7CQllcnIgPSBkZXZpY2VfcmVuYW1lKCZhbXA7cmRldi0mZ3Q7d2lwaHkuZGV2LAomIzQzOwkJCQkgICAgZGV2X25hbWUoJmFtcDtyZGV2LSZndDt3aXBoeS5kZXYpKTsKJiM0MzsJCWlmIChlcnIgJmFtcDsmYW1wOyAhZm9yY2UpCiYjNDM7CQkJd2lwaHlfbmV0X3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LCBvbGRfbmV0KTsKIAotCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7CiYjNDM7CQlubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpOwogCi0Jd2lwaHlfbmV0X3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LCBuZXQpOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewomIzQzOwkJCWlmICghd2Rldi0mZ3Q7bmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LAomIzQzOwkJCQkJICAgICBOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFKTsKJiM0MzsJCX0KJiM0MzsJfQogCi0JZXJyID0gZGV2aWNlX3JlbmFtZSgmYW1wO3JkZXYtJmd0O3dpcGh5LmRldiwgZGV2X25hbWUoJmFtcDtyZGV2LSZndDt3aXBoeS5kZXYpKTsKLQlXQVJOX09OKGVycik7CiYjNDM7CWlmICghZXJyIHx8IGZvcmNlKQomIzQzOwkJcmV0dXJuIGVycjsKIAotCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7CiYjNDM7CS8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqLwomIzQzOwl3ZGV2ID0gbGlzdF9lbnRyeSgmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7CiYjNDM7dW5kbzoKJiM0MzsJLyoKJiM0MzsJICogTW92ZSBiYWNrIGV2ZXJ5dGhpbmcsIGlmIHRoaXMgZmFpbHMgYWdhaW4gKGFsbG9jYXRpb24gZmFpbHVyZXMpCiYjNDM7CSAqIHRoZW4gdGhpbmdzIGdldCBzdHVjayBpbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LAomIzQzOwkJCQkJICAgICBsaXN0KQomIzQzOwkJV0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7Ci0JCWlmICghd2Rldi0mZ3Q7bmV0ZGV2KQotCQkJY29udGludWU7Ci0JCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpOwotCX0KJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiAKLQlyZXR1cm4gMDsKJiM0MztpbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CWlmICghKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfTkVUTlNfT0spKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSkKQEAgLTE4NjgsNyAmIzQzOzE4OTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGNmZzgwMjExX3Blcm5ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIAlydG5sX2xvY2soKTsKIAlmb3JfZWFjaF9yZGV2KHJkZXYpIHsKIAkJaWYgKG5ldF9lcSh3aXBoeV9uZXQoJmFtcDtyZGV2LSZndDt3aXBoeSksIG5ldCkpCi0JCQlXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCAmYW1wO2luaXRfbmV0KSk7CiYjNDM7CQkJV0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCAmYW1wO2luaXRfbmV0LCB0cnVlKSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGludXggS2VybmVsIFBhdGNoIGZvciBLTVNBTiBOZWVkcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGRpZyBpbnRvIHRoaXMga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gRmlyc3QsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZGVmZW5zaXZlIHNlY3VyaXR5L2NvZGUgcXVhbGl0eSB0YXNrLiBObyBleHBsb2l0IGdlbmVyYXRpb24gb3IgYW55dGhpbmcgbGlrZSB0aGF0LiBXZSYjMzk7cmUgbG9va2luZyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIGJ1Z3MuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgYW5kIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gSW4gYGlmYWNlLmNgLCB0aGUga2V5IGFkZGl0aW9uIGlzIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0IGl0ZXJhdGVzIHRocm91Z2ggYSBsaXN0LCByZW1vdmVzIGFuIGVudHJ5IGlmIGl0IGZpbmRzIGEgbWF0Y2gsIGFsbCB3aGlsZSBwcm90ZWN0ZWQgYnkgYSBtdXRleC4gVGhlbiwgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdGAgYmVmb3JlIGBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGFgLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9ucywgYnV0IGF0IGEgZ2xhbmNlLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UganVzdCBmcm9tIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGNhbGxzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGNoYW5nZXMuIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcmVmYWN0b3Jpbmcgb2YgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AuIEl0JiMzOTtzIHNwbGl0IGludG8gYGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zYCBhbmQgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zYC4gSWYgYGZvcmNlYCBpcyB0cnVlIGFuZCBzd2l0Y2hpbmcgdGhlIG5ldG5zIG9mIGEgd2RldiBmYWlscywgdGhlIHBhdGNoIGNhbGxzIGBkZXZfY2xvc2VgIGFuZCBgY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2YC4gSSBjYW4gc2VlIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIHdpcGh5IGxvY2svZ3VhcmRzIGFuZCBub3RpZmljYXRpb25zIHRvby4gSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgaGFwcGVucyB0byBkYXRhIGlmIGEgYHdkZXZgIG5ldG5zIHN3aXRjaCBmYWlscy4gRG9lcyBpdCBsZWFrPyBJcyBkYXRhIGZyZWVkIHByb3Blcmx5PyBJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdXNlPwoKVGhlIHJlYWwgY3J1eCBvZiB0aGlzIGFuYWx5c2lzIGlzIGRpZ2dpbmcgaW4gdG8gaWRlbnRpZnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLiBJIG5lZWQgdG8gdXRpbGl6ZSBteSBjb2Rlc2VhcmNoIGFuZCBmaWxlIHJlYWRpbmcgdG9vbHMgdG8gdGhvcm91Z2hseSBpbnNwZWN0IHRoZXNlIHNlY3Rpb25zIG9mIHRoZSBjb2RlIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIFRoYXQgd2lsbCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgZ29vZCBkZXRlcm1pbmF0aW9uIG9uIEtNU0FOIGZ1enppbmcgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV91bmluaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lmYWNlLmM9OTMyPXN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTQ3LVxubmV0L21hYzgwMjExL2lmYWNlLmM6OTQ4OnN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0OS17XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9OTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTY3LVx0Lm5kb19zdG9wXHRcdD0gaWVlZTgwMjExX3N0b3AsXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5Njg6XHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NjktXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTAwNS1cdC5uZG9fc3RvcFx0XHQ9IGllZWU4MDIxMV9zdG9wLFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTAwNjpcdC5uZG9fdW5pbml0XHRcdD0gaWVlZTgwMjExX3VuaW5pdCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwMDctXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmXzgwMjNfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNzMtXHQubmRvX3N0b3BcdFx0PSBpZWVlODAyMTFfc3RvcCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNzQ6XHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDc1LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBOb3RpZmljYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgaG93IHdlIGdldCBpbnRlcmZhY2UgYW5kIFdpLUZpIFBIWSB1cGRhdGVzIG91dCB0byB1c2Vyc3BhY2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgYW55IHJlY2VudCBpc3N1ZXMgYXJlIHByb2JhYmx5IGNlbnRlcmVkIGFyb3VuZCBlaXRoZXIgYG5sODAyMTFfbm90aWZ5X2lmYWNlYCBvciBgbmw4MDIxMV9ub3RpZnlfd2lwaHlgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBicm9hZGNhc3RpbmcgY2hhbmdlcyBpbiB0aGUgd2lyZWxlc3MgbmV0d29yayBjb25maWd1cmF0aW9uLiBUaGV5JiMzOTtyZSBteSBwcmltYXJ5IHN1c3BlY3RzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSB0cmlnZ2VyZWQsIHdoYXQgZGF0YSB0aGV5IGNhcnJ5LCBhbmQgd2hhdCBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgbWlnaHQgZXhpc3Qgd2l0aGluIHRoZWlyIGV4ZWN1dGlvbiBwYXRocy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9ub3RpZnlfaWZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0xNzE9c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXHRcdFx0XHRjb250aW51ZTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTk1Olx0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMy1cdFx0XHRcdGNvbnRpbnVlO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTQ6XHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2Rldixcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjE1LVx0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQzMz1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQyLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQzOlx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDQtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjczPXZvaWQgY2ZnODAyMTFfcmVnaXN0ZXJfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjk2LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjk3Olx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTgtfVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTA1MD1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTExOS1cdGlmIChjaGFuZ2UgXHUwMDI2XHUwMDI2ICFlcnIpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUxMjA6XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX1NFVF9JTlRFUkZBQ0UpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MTIxLVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjA2NDY9dm9pZCBubDgwMjExX25vdGlmeV93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY2Ny1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2Njg6dm9pZCBubDgwMjExX25vdGlmeV9pZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjY5LVx0XHRcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oPTMzPXZvaWQgbmw4MDIxMV9ub3RpZnlfd2lwaHkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuaC0zNC1cdFx0XHQgIGVudW0gbmw4MDIxMV9jb21tYW5kcyBjbWQpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuaDozNTp2b2lkIG5sODAyMTFfbm90aWZ5X2lmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmgtMzYtXHRcdFx0ICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHdpcmVsZXNzIGNvcmUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyAxNTAgdG8gMjQwLiBUaGF0IHJlZ2lvbiBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGF0IHNlY3Rpb24gd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eS4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcbiAxNTE6XHRcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4gMTUyOlx0XG4gMTUzOlx0XHRyZXR1cm4gMDtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0c3RhdGljIGludCBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIDE1NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuIDE1ODpcdHtcbiAxNTk6XHRcdGludCBlcnI7XG4gMTYwOlx0XG4gMTYxOlx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE2MjpcdFx0XHRyZXR1cm4gMDtcbiAxNjM6XHRcbiAxNjQ6XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuIDE2NTpcdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4gMTY2Olx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuIDE2NzpcdFxuIDE2ODpcdFx0cmV0dXJuIGVycjtcbiAxNjk6XHR9XG4gMTcwOlx0XG4gMTcxOlx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMTcyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4gMTczOlx0e1xuIDE3NDpcdFx0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiAxNzU6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7XG4gMTc2Olx0XHRpbnQgZXJyID0gMDtcbiAxNzc6XHRcbiAxNzg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gMTc5Olx0XHRcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XG4gMTgwOlx0XHRcdGlmICghZXJyKVxuIDE4MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDE4MjpcdFx0XHRpZiAoIWZvcmNlKVxuIDE4MzpcdFx0XHRcdGdvdG8gdW5kbztcbiAxODQ6XHRcdFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xuIDE4NTpcdFx0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuIDE4NjpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpXG4gMTg3Olx0XHRcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHdkZXYpO1xuIDE4ODpcdFx0XHRlcnIgPSAwO1xuIDE4OTpcdFx0fVxuIDE5MDpcdFxuIDE5MTpcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSB7XG4gMTkyOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbiAxOTM6XHRcdFx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE5NDpcdFx0XHRcdFx0Y29udGludWU7XG4gMTk1Olx0XHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcbiAxOTY6XHRcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiAxOTc6XHRcdFx0fVxuIDE5ODpcdFxuIDE5OTpcdFx0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuIDIwMDpcdFxuIDIwMTpcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4gMjAyOlx0XG4gMjAzOlx0XHRcdC8qIHRoaXMgb25seSBmYWlscyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbiAyMDQ6XHRcdFx0ZXJyID0gZGV2aWNlX3JlbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldixcbiAyMDU6XHRcdFx0XHRcdCAgICBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuIDIwNjpcdFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhZm9yY2UpXG4gMjA3Olx0XHRcdFx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBvbGRfbmV0KTtcbiAyMDg6XHRcbiAyMDk6XHRcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiAyMTA6XHRcbiAyMTE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuIDIxMjpcdFx0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4gMjEzOlx0XHRcdFx0XHRjb250aW51ZTtcbiAyMTQ6XHRcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuIDIxNTpcdFx0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuIDIxNjpcdFx0XHR9XG4gMjE3Olx0XHR9XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAoIWVyciB8fCBmb3JjZSlcbiAyMjA6XHRcdFx0cmV0dXJuIGVycjtcbiAyMjE6XHRcbiAyMjI6XHRcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xuIDIyMzpcdFx0d2RldiA9IGxpc3RfZW50cnkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIHR5cGVvZigqd2RldiksIGxpc3QpO1xuIDIyNDpcdHVuZG86XG4gMjI1Olx0XHQvKlxuIDIyNjpcdFx0ICogTW92ZSBiYWNrIGV2ZXJ5dGhpbmcsIGlmIHRoaXMgZmFpbHMgYWdhaW4gKGFsbG9jYXRpb24gZmFpbHVyZXMpXG4gMjI3Olx0XHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cbiAyMjg6XHRcdCAqL1xuIDIyOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LFxuIDIzMDpcdFx0XHRcdFx0XHQgICAgIGxpc3QpXG4gMjMxOlx0XHRcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2Rldiwgb2xkX25ldCkpO1xuIDIzMjpcdFxuIDIzMzpcdFx0cmV0dXJuIGVycjtcbiAyMzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzkKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaW4gdGhlc2UgY2hhbmdlcywgdGhlIGZvY3VzIGlzIHJlYWxseSBvbiByZWZpbmluZyBpbnRlcmZhY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIGhhbmRsaW5nIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgaW4gYG5ldC9tYWM4MDIxMWAgYW5kIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4KCkZpcnN0LCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCB0aGUgYWRkaXRpb24gb2YgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgdW5pbml0aWFsaXphdGlvbiBwcm9jZXNzIChgaWVlZTgwMjExX3VuaW5pdGAsIGNhbGxlZCBkdXJpbmcgYG5kb191bmluaXRgKSBzZWVtcyB0byBiZSBhYm91dCBlbnN1cmluZyBjbGVhbiBpbnRlcmZhY2UgcmVtb3ZhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyB0aGF0IG1pZ2h0IGZhaWwuIFRoaXMgaXMgYWJvdXQgbGlzdCBtYW5hZ2VtZW50IGZvciB0aGVzZSBpbnRlcmZhY2VzIGFuZCBtYWtpbmcgc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGNsZWFudXAgY29uc2lzdGVudGx5LiBUaGUgY2hhbmdlcyBhcmUgYWJvdXQgb3JkZXIgYW5kIGhvdyB3ZSBkZWFsIHdpdGggdGhlc2Ugc2RhdGEgYW5kIGludGVyZmFjZXMuCgpUaGVuLCB0aGUgc3BsaXR0aW5nIG9mIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIGludG8gaGVscGVyIGZ1bmN0aW9ucyBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgYW5kIHBhc3NpbmcgYGZvcmNlID0gdHJ1ZWAgZHVyaW5nIHBlcm5ldCBleGl0IGNhdWdodCBteSBleWUuIFRoaXMgbG9va3MgbGlrZSByb2J1c3RpZnlpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaC4gSWYgYSB3ZGV2IGNhbiYjMzk7dCBiZSBtb3ZlZCB0byB0aGUgbmV3IG5ldG5zLCB0aGlzIHdpbGwgY2xvc2UgYW5kIHVucmVnaXN0ZXIgaXQgcmF0aGVyIHRoYW4gbGVhdmluZyBpdCBpbiBhIGJyb2tlbiBzdGF0ZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgdXBkYXRpbmcgb2YgbG9ja2luZyBhbmQgbm90aWZpY2F0aW9uIHNjb3BlcyB3aXRoIHRoZSBgc2NvcGVkX2d1YXJkYCBtYWNyby4gVGhpcyBhbHNvIHByb3ZpZGVzIGFkZGl0aW9uYWwgc2FmZXR5IHdpdGhpbiB0aGUgc3lzdGVtLgoKTm93LCBhcyBhbiBleHBlcnQsIG15IHJlYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZXNwZWNpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gSSYjMzk7dmUgY2hlY2tlZCB0aGVzZSBhZ2FpbnN0IHRoZSBrbm93biBtZW1vcnkgc2FmZXR5IGlzc3VlczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSoqOiBObywgdGhlIG5vdGlmaWNhdGlvbnMgYmVpbmcgc2VudCAoIGBubDgwMjExX25vdGlmeV9pZmFjZWAsIGBubDgwMjExX25vdGlmeV93aXBoeWApIGFyZSBzdGFuZGFyZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmUgY29uc3RydWN0ZWQgd2l0aCBpbml0aWFsaXplZCBhdHRyaWJ1dGVzLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyoqOiBOb3BlLCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciByZWNlaXZlIGEgdmFsdWUgd2l0aCB0aGUgYXNzaWdubWVudHMgd2l0aGluIGEgbG9vcC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMqKjogTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4KNC4gICoqQm91bmRzL2xlbmd0aHMqKjogTm90aGluZyYjMzk7cyBjaGFuZ2luZyB0aGVyZS4KClNpbmNlIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGVzZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBvdGVudGlhbCByaXNrcyBhcmUgbW9yZSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIGxpc3QgbWFuYWdlbWVudC4gTE9DS0RFUCBzaG91bGQgY2F0Y2ggYW55IGRlYWRsb2NrcywgYW5kIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIHdpbGwgY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgZnJvbSBpbmNvcnJlY3QgdW5yZWdpc3RyYXRpb24vdW5saXN0aW5nL3RyYXZlcnNhbCBvcmRlcnMuCgpMb29rcyBsaWtlIHdlJiMzOTtyZSBnb29kIHdpdGggdGhlc2UgdG9vbHMuIExldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBuYW1lc3BhY2Ugc3dpdGNoaW5nIGZvciB3aXJlbGVzcyBkZXZpY2VzIChjZmc4MDIxMSkgYW5kIGhhbmRsZXMgaW50ZXJmYWNlIHVubGlzdGluZyBkdXJpbmcgbmV0ZGV2IHVuaW5pdGlhbGl6YXRpb24gKG1hYzgwMjExKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsaXN0IG1hbmFnZW1lbnQsIGludGVyZmFjZSB1bnJlZ2lzdHJhdGlvbiBvbiBuZXRucyBtaWdyYXRpb24gZmFpbHVyZSwgYW5kIGxvY2tpbmcgYWRqdXN0bWVudHMgKG11dGV4IGd1YXJkcykuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBjb3BpZXMgdG8vZnJvbSB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy9hbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSBpbnRlcmZhY2UgbGlmZWN5Y2xlIG9yIGxpc3QgbWFuaXB1bGF0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIHVucmVnaXN0ZXIsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozMzo1NS4wOTM3MzAyNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU1ODgyMTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfbmV0bnNcIixcbiAgICBcIl9fY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc1wiLFxuICAgIFwiY2ZnODAyMTFfcGVybmV0X2V4aXRcIixcbiAgICBcIm5sODAyMTFfd2lwaHlfbmV0bnNcIixcbiAgICBcImllZWU4MDIxMV91bmluaXRcIixcbiAgICBcImllZWU4MDIxMV91bmxpc3Rfc2RhdGFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzM6NTUuMDkzNzM5MTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgzMTgxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3Yzc2YTA0ZDQ1MzU5NWUyNTdkYjIzNjI4NGVjOWVjODM3ZDg3NTYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDE6MzM6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbkBAIC05MjQsOSArOTI0LDMzIEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4gXFx0fVxcbiB9XFxuIFxcbisvKlxcbisgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XFxuKyAqIGNvcmUgd2hlbiBjZmc4MDIxMSBjb3VsZG4ndCBtb3ZlIGl0IG91dCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlIHRoYXQncyBiZWluZ1xcbisgKiBkZXN0cm95ZWQuIERyb3AgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgZWl0aGVyIHdheS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKml0ZXI7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKGl0ZXIgIT0gc2RhdGEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4rXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZzZGF0YS1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldikpO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XFxuK1xcbitcXHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcXG4rXFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXFxuaW5kZXggZDEzMzEwZmVmNjkxYS4uMzFkMGY3MDg2NzAxMiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbkBAIC0xNTMsNjggKzE1Myw5MyBAQCBpbnQgY2ZnODAyMTFfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXFxuK3N0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuLVxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XFxuLVxcdGludCBlcnIgPSAwO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocmRldi1cXHUwMDNld2lwaHkuZmxhZ3MgXFx1MDAyNiBXSVBIWV9GTEFHX05FVE5TX09LKSlcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuK1xcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuK1xcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVxcdTAwM2VuZXRkZXYsIG5ldCwgXFxcIndsYW4lZFxcXCIpO1xcbitcXHR3ZGV2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXQgKm9sZF9uZXQgPSB3aXBoeV9uZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KTtcXG4rXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgKnRtcDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XFxuK1xcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0d2Rldi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcXG4tXFx0XFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXFx1MDAzZW5ldGRldiwgbmV0LCBcXFwid2xhbiVkXFxcIik7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR3ZGV2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxuK1xcdFxcdGlmICghZm9yY2UpXFxuK1xcdFxcdFxcdGdvdG8gdW5kbztcXG4rXFx0XFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xcbitcXHRcXHRkZXZfY2xvc2Uod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpXFxuK1xcdFxcdFxcdGNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldih3ZGV2KTtcXG4rXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHQvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovXFxuLVxcdFxcdG5ldCA9IHdpcGh5X25ldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbi1cXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KSB7XFxuK1xcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSB7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbiBcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuLVxcdFxcdFxcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVxcdTAwM2VuZXRkZXYsIG5ldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIndsYW4lZFxcXCIpO1xcbi1cXHRcXHRcXHRXQVJOX09OKGVycik7XFxuLVxcdFxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xcbiBcXG4tXFx0Z3VhcmQod2lwaHkpKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuK1xcdFxcdHdpcGh5X25ldF9zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBuZXQpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxuLVxcdH1cXG4rXFx0XFx0LyogdGhpcyBvbmx5IGZhaWxzIG9uIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbitcXHRcXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBkZXZfbmFtZShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkuZGV2KSk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIWZvcmNlKVxcbitcXHRcXHRcXHR3aXBoeV9uZXRfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgb2xkX25ldCk7XFxuIFxcbi1cXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xcbitcXHRcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xcbiBcXG4tXFx0d2lwaHlfbmV0X3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIG5ldCk7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4tXFx0ZXJyID0gZGV2aWNlX3JlbmFtZShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkuZGV2LCBkZXZfbmFtZShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkuZGV2KSk7XFxuLVxcdFdBUk5fT04oZXJyKTtcXG4rXFx0aWYgKCFlcnIgfHwgZm9yY2UpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xcbitcXHQvKiBzZXQgdG8gdGhlIGxhc3Qgb25lIHRvIHVuZG8gYWxsIG9mIHRoZW0gKi9cXG4rXFx0d2RldiA9IGxpc3RfZW50cnkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XFxuK3VuZG86XFxuK1xcdC8qXFxuK1xcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxcbitcXHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cXG4rXFx0ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGxpc3QpXFxuK1xcdFxcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2Rldiwgb2xkX25ldCkpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XFxuLVxcdH1cXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRpZiAoIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcXG5AQCAtMTg2OCw3ICsxODkzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRmb3JfZWFjaF9yZGV2KHJkZXYpIHtcXG4gXFx0XFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSwgbmV0KSlcXG4tXFx0XFx0XFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0KSk7XFxuK1xcdFxcdFxcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XFxuIFxcdH1cXG4gXFx0cnRubF91bmxvY2soKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozMzo1NS41MjI4NTg5NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwODA5NjI2MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjExX3N3aXRjaF9uZXRuc1wiLFxuICAgIFwiX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNcIixcbiAgICBcImNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zXCIsXG4gICAgXCJjZmc4MDIxMV9wZXJuZXRfZXhpdFwiLFxuICAgIFwibmw4MDIxMV93aXBoeV9uZXRuc1wiLFxuICAgIFwiaWVlZTgwMjExX3VuaW5pdFwiLFxuICAgIFwiaWVlZTgwMjExX3VubGlzdF9zZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3Yzc2YTA0ZDQ1MzU5NWUyNTdkYjIzNjI4NGVjOWVjODM3ZDg3NTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMTozMzo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05MjQsOSArOTI0LDMzIEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XG4rICogY29yZSB3aGVuIGNmZzgwMjExIGNvdWxkbid0IG1vdmUgaXQgb3V0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UgdGhhdCdzIGJlaW5nXG4rICogZGVzdHJveWVkLiBEcm9wIGl0IGZyb20gdGhlIGludGVyZmFjZSBsaXN0IGVpdGhlciB3YXkuXG4rICovXG4rc3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbitcdFx0aWYgKGl0ZXIgIT0gc2RhdGEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGd1YXJkKG11dGV4KShcdTAwMjZsb2NhbC1cdTAwM2VpZmxpc3RfbXR4KTtcbitcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnNkYXRhLVx1MDAzZWxpc3QpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG4rXG4rXHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcbitcdGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi4zMWQwZjcwODY3MDEyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTE1Myw2OCArMTUzLDkzIEBAIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi1cdFx0XHQgIHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgaW50IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuLVx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdGludCBlcnIgPSAwO1xuK1x0aW50IGVycjtcbiBcbi1cdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbitcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuK1x0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwid2xhbiVkXCIpO1xuK1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxuK3tcbitcdHN0cnVjdCBuZXQgKm9sZF9uZXQgPSB3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4rXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuK1x0XHRlcnIgPSBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBuZXQpO1xuK1x0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4tXHRcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVx1MDAzZW5ldGRldiwgbmV0LCBcIndsYW4lZFwiKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRicmVhaztcbi1cdFx0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbitcdFx0aWYgKCFmb3JjZSlcbitcdFx0XHRnb3RvIHVuZG87XG4rXHRcdC8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi9cbitcdFx0ZGV2X2Nsb3NlKHdkZXYtXHUwMDNlbmV0ZGV2KTtcbitcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuK1x0XHRcdGNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldih3ZGV2KTtcbitcdFx0ZXJyID0gMDtcbiBcdH1cbiBcbi1cdGlmIChlcnIpIHtcbi1cdFx0LyogZmFpbGVkIC0tIGNsZWFuIHVwIHRvIG9sZCBuZXRucyAqL1xuLVx0XHRuZXQgPSB3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsXG4tXHRcdFx0XHRcdFx0ICAgICBsaXN0KSB7XG4rXHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcbi1cdFx0XHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cdTAwM2VuZXRkZXYsIG5ldCxcbi1cdFx0XHRcdFx0XHRcdFwid2xhbiVkXCIpO1xuLVx0XHRcdFdBUk5fT04oZXJyKTtcbi1cdFx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuK1x0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG4rXHRcdFx0XHRcdCAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG4gXHRcdH1cbiBcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbiBcbi1cdGd1YXJkKHdpcGh5KShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbitcdFx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBuZXQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbi1cdH1cbitcdFx0LyogdGhpcyBvbmx5IGZhaWxzIG9uIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xuK1x0XHRlcnIgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2LFxuK1x0XHRcdFx0ICAgIGRldl9uYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2KSk7XG4rXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFmb3JjZSlcbitcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG9sZF9uZXQpO1xuIFxuLVx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbitcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiBcbi1cdHdpcGh5X25ldF9zZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgbmV0KTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuK1x0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuK1x0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuK1x0XHR9XG4rXHR9XG4gXG4tXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2LCBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuLVx0V0FSTl9PTihlcnIpO1xuK1x0aWYgKCFlcnIgfHwgZm9yY2UpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4tXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xuK1x0Lyogc2V0IHRvIHRoZSBsYXN0IG9uZSB0byB1bmRvIGFsbCBvZiB0aGVtICovXG4rXHR3ZGV2ID0gbGlzdF9lbnRyeShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XG4rdW5kbzpcbitcdC8qXG4rXHQgKiBNb3ZlIGJhY2sgZXZlcnl0aGluZywgaWYgdGhpcyBmYWlscyBhZ2FpbiAoYWxsb2NhdGlvbiBmYWlsdXJlcylcbitcdCAqIHRoZW4gdGhpbmdzIGdldCBzdHVjayBpbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsXG4rXHRcdFx0XHRcdCAgICAgbGlzdClcbitcdFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuLVx0fVxuK1x0cmV0dXJuIGVycjtcbit9XG4gXG4tXHRyZXR1cm4gMDtcbitpbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRpZiAoIShyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX05FVE5TX09LKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIG5ldCwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjZmc4MDIxMV9yZmtpbGxfcG9sbChzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpXG5AQCAtMTg2OCw3ICsxODkzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRydG5sX2xvY2soKTtcbiBcdGZvcl9lYWNoX3JkZXYocmRldikge1xuIFx0XHRpZiAobmV0X2VxKHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSwgbmV0KSlcbi1cdFx0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCkpO1xuK1x0XHRcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXHUwMDI2aW5pdF9uZXQsIHRydWUpKTtcbiBcdH1cbiBcdHJ0bmxfdW5sb2NrKCk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzM6NTUuNTIyODYxNjU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQ2OTg2MzU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUgaW50byBXaXJlbGVzcyBOZXR3b3JraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgaXQgbWFrZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrLiBGaXJzdCwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHRvIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhKClgIGFuZCB0aGUgd2F5IGl0J3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdCgpYC4gVGhlIGZhY3QgdGhhdCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YSgpYCBpcyBub3cgaW52b2tlZCAqYmVmb3JlKiBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKClgIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgd2h5IHRoaXMgcmVvcmRlcmluZyBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYmVuZWZpY2lhbC4gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlP1xuXG5OZXh0LCB0aGUgcGF0Y2ggdG91Y2hlcyBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIFRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZSDigJMgYGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKClgLCBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoKWAsIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoKWAsIGFuZCBgY2ZnODAyMTFfcGVybmV0X2V4aXQoKWAg4oCTIGFyZSBhbGwga2V5IHRvIG5ldCBuYW1lc3BhY2Ugc3dpdGNoaW5nIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3RhY2suIEFuZCB0aGF0IGxhc3Qgb25lLCBjYWxsaW5nIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRucygpYCB3aXRoIGBcdTAwMjZpbml0X25ldGAgYW5kIGB0cnVlYCBkdXJpbmcgcGVybmV0IGV4aXQgaXMgdGVsbGluZy4gVGhpcyBoaW50cyBhdCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgd2lyZWxlc3MgZGV2aWNlcyBhcyB0aGV5IG1vdmUgYmV0d2VlbiBuZXR3b3JrIG5hbWVzcGFjZXMsIG9yIHRoZWlyIGNsZWFudXAuXG5cbkdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGlzIGFyZWEgb2YgdGhlIGtlcm5lbCBpcyBvZnRlbiBmdXp6ZWQgYnkgdG9vbHMgbGlrZSBzeXprYWxsZXIuIFRoYXQgaXQgaW5jbHVkZXMgbW9kdWxlcyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgYW5kIG5ldGxpbmsgY29tbWFuZHMuIFRoaW5raW5nIGFib3V0IHRoZXNlIGNoYW5nZXMgaW4gdGhlIGNvbnRleHQgb2YgdmlydHVhbGl6YXRpb24gYW5kIGVtdWxhdGlvbiBpcyBpbXBvcnRhbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCAqY291bGQqIGJlIHJlbGF0ZWQgdG8gYW4gaXNzdWUgSSd2ZSBzZWVuIGJlZm9yZSB3aXRoIHN3aXRjaGluZyBiZXR3ZWVuIG5ldCBuYW1lc3BhY2VzLCBvciBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gY3Jvc3MtbmFtZXNwYWNlIGludGVyYWN0aW9uIHdpdGggd2lyZWxlc3MgZGV2aWNlcy5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgcmVhY2ggZm9yIG15IHRvb2xzIHRvIGNoZWNrIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYW5kIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMsIGVuc3VyaW5nIEknbSBhd2FyZSBvZiBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbGwgbmVlZCB0byBsb29rIGF0IGNvbW1pdCBtZXNzYWdlcyBhbmQgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzZXRzIGZvciBmdWxsIGNvbnRleHQsIGJ1dCB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIHN1Z2dlc3RzIHRoaXMgY291bGQgYmUgYWRkcmVzc2luZyBhIHN1YnRsZSwgcG90ZW50aWFsbHkgc2VjdXJpdHktcmVsZXZhbnQsIGlzc3VlIHJlbGF0ZWQgdG8gd2lyZWxlc3MgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudCBpbiBhIHZpcnR1YWxpemVkIG9yIG5ldG5zIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MDMuOTkyNzI4MDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjgwNDUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMtb2JqLXkgKz0gdGVzdHMvXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTctXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMjAtY2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MjM9JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zMS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzI6JChvYmopL2V4dHJhLWNlcnRzLmM6ICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikgXFxcXFxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZTozMzpcXHRcXHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTM0LVxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNjk0PXN0YXRpYyBib29sIGNmZzgwMjExX2lyX3Blcm1pc3NpdmVfY2hhbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzAyLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTcwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX1JFR19SRUxBWF9OT19JUikgfHxcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDQtXFx0ICAgICEod2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTU3ND1zdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjYxLVxcdFxcdFxcdCAgY2ZnODAyMTFfZGZzX2NoYW5uZWxzX3VwZGF0ZV93b3JrKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjY2MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2My1cXHRyZGV2LVxcdTAwM2V3aXBoeS53ZXh0ID0gXFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjgzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6Njg0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjg1LVxcdHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIHw9IFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQzMz1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NzMtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDc0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ3NS1cXHRrZnJlZV9zZW5zaXRpdmUod2Rldi1cXHUwMDNld2V4dC5rZXlzKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTUyOD12b2lkIGNmZzgwMjExX2xlYXZlX2xvY2tlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NTItXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTU1NC1cXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTYzOT12b2lkIGNmZzgwMjExX2luaXRfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjQ3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTY0ODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2NDktXFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IC0xO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzMyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgwNi1cXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTgwNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE4MDgtXFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NTc0PWNmZzgwMjExX2dldF82Z2h6X3Bvd2VyX3R5cGUoY29uc3QgdTggKmVsZW1zLCBzaXplX3QgZWxlbXNfbGVuLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NzYtXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1Nzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3OC0jZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXFx0V0FSTl9PTihjb25kKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD02MjQ9c3RydWN0IGNmZzgwMjExX2NvbG9jYXRlZF9hcCB7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY0MC1cXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0MTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfS1VOSVRfVEVTVClcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY0Mi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfSUZfQ0ZHODAyMTFfS1VOSVQoc3ltKSBFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHN5bSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NjQ5PXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NTQtI2RlZmluZSBWSVNJQkxFX0lGX0NGRzgwMjExX0tVTklUIHN0YXRpY1xcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjU1OiNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAqL1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjU2LVxcbi0tXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTYtdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTE5PXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVxcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcztcXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjI0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjUyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXFx0bWVtc2V0KFxcdTAwMjZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz04Nz1pbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoxNDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDItXFx0d2Rldi1cXHUwMDNld2V4dC5pYnNzLmNoYW5kZWYgPSBwYXJhbXMtXFx1MDAzZWNoYW5kZWY7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTE1Nj12b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cXHRtZW1zZXQoXFx1MDAyNndkZXYtXFx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYpKTtcXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE4NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cXHRpZiAoIW5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjEzLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjE1LWludCBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI4Mi1cXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjI4MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI4NC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU0Njc9c3RhdGljIGludCBubDgwMjExX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUwOS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1MTA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTExLVxcdFxcdHdkZXYtXFx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTMyLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MzQtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X21nbXRfa2V5ID0ga2V5LmlkeDtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0NT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NjkxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2OTMtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4MTc9c3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg1OC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODU5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg2MC1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA5MTA9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5ODgtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5ODk6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTkwLVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5OTE5LVxcdH0sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTkyMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5MjEtXFx0e1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzQxOT12b2lkIGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzNDI2LVxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9ERlNfQ09OQ1VSUkVOVCkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzNDI3OlxcdCAgICAoSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MjgtXFx0ICAgICB3aXBoeS1cXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE2LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE4LS8qIE1heCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYXR0ZW1wdHMgdG8gY29tbXVuaWNhdGUgd2l0aCBDUkRBICAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTU4OS19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xcbm5ldC93aXJlbGVzcy9yZWcuYy01OTEtXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTcyOS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzMxLSNpbmNsdWRlIFxcdTAwM2NrZXlzL2FzeW1tZXRyaWMtdHlwZS5oXFx1MDAzZVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTczNT1zdGF0aWMgaW50IF9faW5pdCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0Ny1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzQ4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChzaGlwcGVkX3JlZ2RiX2NlcnRzLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL3JlZy5jOjc1NDpcXHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAnXFxcXDAnKVxcbm5ldC93aXJlbGVzcy9yZWcuYy03NTUtXFx0XFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Nzk4PXN0YXRpYyB2b2lkIGZyZWVfcmVnZGJfa2V5cmluZyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMC19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjgwMTojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCICovXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMDM4PWJvb2wgcmVnX2xhc3RfcmVxdWVzdF9jZWxsX2Jhc2Uodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQyLVxcbm5ldC93aXJlbGVzcy9yZWcuYzoyMDQzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMTE3PXZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyMi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMjQtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTY1LVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTE2NjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjctXFx0aWYgKHdkZXYtXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiAhcmVxdWVzdC1cXHUwMDNlaW5mby5hYm9ydGVkKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM0NDM9dm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTYtXFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNTE3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzUxOC1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYz03MzU9dm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVxcdHU4IGNvdW50cnlfZGF0YWxlbjtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6NzQ0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6Nzc1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NzYtXFx0aWYgKHdleHRldiBcXHUwMDI2XFx1MDAyNiAhY3ItXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9MTA3OT12b2lkIF9fY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4MS17XFxubmV0L3dpcmVsZXNzL3NtZS5jOjEwODI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXFxubmV0L3dpcmVsZXNzL3NtZS5jOjExMzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzYtXFx0aWYgKCFpbmZvLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM0OC1cXHRpbnQgaTtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM1MC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5Ni1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvdGVzdHMvTWFrZWZpbGU9MT1jZmc4MDIxMS10ZXN0cy15ICs9IG1vZHVsZS5vIGZyYWdtZW50YXRpb24ubyBzY2FuLm8gdXRpbC5vIGNoYW4ub1xcbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZS0yLVxcbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSArPSBjZmc4MDIxMS10ZXN0cy5vXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjM3PUVYUE9SVF9TWU1CT0wod2lyZWxlc3Nfc2VuZF9ldmVudCk7XFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTYzOC1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NDAtc3RhdGljIHZvaWQgd2lyZWxlc3Nfd2Fybl9jZmc4MDIxMV93ZXh0KHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTYtXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU4LVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02OTY9c3RhdGljIGl3X2hhbmRsZXIgZ2V0X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDEtXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjcwMjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNzAzLVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSkge1xcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jPTI4PXN0YXRpYyB2b2lkIHdpcmVsZXNzX3NlcV9wcmludGZfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDAtI2VuZGlmXFxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jOjQxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDItXFx0XFx0aWYgKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MDQuMTE1NTM2Njg1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0MjE3NTgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5LiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IGNvbmZpZ3VyYWJsZSBvcHRpb25zIGlzIHRoZSBgTWFrZWZpbGVgIGFuZCB0aGUgYEtjb25maWdgIGZpbGUuIFRoZSBgTWFrZWZpbGVgIHdpbGwgb2J2aW91c2x5IHRlbGwgbWUgaG93IHRoZSBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBob3cgbW9kdWxlcyBhcmUgY3JlYXRlZC4gSSdsbCBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSB1bmRlcnN0YW5kIGFueSBidWlsZCBmbGFncyB0aGF0IGFyZSBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIG9yIGZlYXR1cmUgZW5hYmxlbWVudC4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIGNydWNpYWwgYmVjYXVzZSB0aGF04oCZcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gc2VlIHdoYXQgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyYWJsZSwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBiZXR3ZWVuIHRob3NlIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGJ1aWxkIG9mIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlIGFuZCBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIHRhaWxvciB0aGUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MDYuNzU3NzE0ODczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzg1NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA5NzUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2OmNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5OmlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjpcXHRzZWxlY3QgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjctXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2VcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMi1cXHRwcm9tcHQgXFxcIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0hBU19SQ1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjM0OlxcdGRlZmF1bHQgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTM1LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ0LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxubmV0L21hYzgwMjExL0tjb25maWc6NTI6XFx0ZGVmYXVsdCBcXFwibWluc3RyZWxfaHRcXFwiIGlmIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01My1cXHRkZWZhdWx0IFxcXCJcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9IQVNfUkM9blxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYyLVxcdGRlcGVuZHMgb24gS1VOSVRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctNjQtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03My1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6ODE6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjgyOlxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04My1cXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctOTEtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlRyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IFRSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDAtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMy1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTM0OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzNS1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NjpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTctXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBIVCBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTY1OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBPQ0IgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzgtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4ODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXFx0Ym9vbCBcXFwiVmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk5OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwMC1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjExOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMjpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTMtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNDpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzg6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjM5LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTA6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcyOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzQtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cXHRib29sIFxcXCJWZXJib3NlIFRETFMgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODQtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5NTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTY6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk3LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA5OlxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMxMC1cXHRkZWZhdWx0IDBcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTUFDODAyMTEpICs9IG1hYzgwMjExLm9cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMy1cXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTM5LVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo0MDptYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9MRURTKSArPSBsZWQub1xcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo0MTptYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQyLVxcdGRlYnVnZnMubyBcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDYtXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ3Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX01FU0gpICs9IFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDgtXFx0bWVzaC5vIFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01OT1yYzgwMjExX21pbnN0cmVsLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTYxLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo2MjpyYzgwMjExX21pbnN0cmVsLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjMtXFx0cmM4MDIxMV9taW5zdHJlbF9odF9kZWJ1Z2ZzLm9cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjQtXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjY1Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMKSArPSAkKHJjODAyMTFfbWluc3RyZWwteSlcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjYtXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NjEzPXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy03MTAtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbm5ldC9tYWM4MDIxMS9jZmcuYzo3MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTcxMi1cXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXUubWVzaC5zZWN1cml0eSAhPSBJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz0yMTkwPXN0YXRpYyB2b2lkIHN0YV9hcHBseV9tZXNoX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTkzLXtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5NS1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS1cXHUwMDNlc2RhdGE7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9Mjc4Nz1zdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2Vfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTMtXFxubmV0L21hYzgwMjExL2NmZy5jOjI4OTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTUtc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDQyOD1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfYWZ0ZXJfY3NhX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGlua19kYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTQ0NTEtXFx0XFx0YnJlYWs7XFxubmV0L21hYzgwMjExL2NmZy5jOjQ0NTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTQ0NTMtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ1NjM9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NjU0LVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NjU1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NjU2LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU5NzY9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTYtXFx0LmR1bXBfc3VydmV5ID0gaWVlZTgwMjExX2R1bXBfc3VydmV5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTk3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk4LVxcdC5hZGRfbXBhdGggPSBpZWVlODAyMTFfYWRkX21wYXRoLFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNS0gKi9cXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2OiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR19IXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29uY2VfbGl0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTAtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxMjojZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTMtI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNDojZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTUtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTYtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTg6I2RlZmluZSBNQUM4MDIxMV9JQlNTX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOS0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIwOiNkZWZpbmUgTUFDODAyMTFfSUJTU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjEtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjItXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0OiNkZWZpbmUgTUFDODAyMTFfUFNfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI1LSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjY6I2RlZmluZSBNQUM4MDIxMV9QU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjctI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6Mjk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjMwOiNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTMxLSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MzI6I2RlZmluZSBNQUM4MDIxMV9IVF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzMtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzQtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MzU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDozNjojZGVmaW5lIE1BQzgwMjExX01QTF9ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzctI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDozODojZGVmaW5lIE1BQzgwMjExX01QTF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzktI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDAtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NDE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NUEFUSF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQyOiNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQzLSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NDQ6I2RlZmluZSBNQUM4MDIxMV9NUEFUSF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDUtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDYtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NSFdNUF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ4OiNkZWZpbmUgTUFDODAyMTFfTUhXTVBfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQ5LSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTA6I2RlZmluZSBNQUM4MDIxMV9NSFdNUF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTEtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTItXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NDojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTUtI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NjojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTctI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYwOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTYxLSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjI6I2RlZmluZSBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjMtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjQtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC02Ny0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY4OiNkZWZpbmUgTUFDODAyMTFfTUVTSF9QU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjktI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzAtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NzE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NzI6I2RlZmluZSBNQUM4MDIxMV9URExTX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC03My0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjc0OiNkZWZpbmUgTUFDODAyMTFfVERMU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzUtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzYtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6Nzc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3ODojZGVmaW5lIE1BQzgwMjExX1NUQV9ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzktI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4MDojZGVmaW5lIE1BQzgwMjExX1NUQV9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODEtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODItXFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODQ6I2RlZmluZSBNQUM4MDIxMV9NTE1FX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC04NS0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjg2OiNkZWZpbmUgTUFDODAyMTFfTUxNRV9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODctI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvZGVidWcuaC05MC12b2lkIF9fc2RhdGFfaW5mbyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMSwgMik7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaD0xMjU9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE3OC0jZGVmaW5lIGh0X2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX0hUX0RFQlVHLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODAtXFx0XFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4Mi0jZGVmaW5lIGh0X2RiZ19yYXRlbGltaXRlZChzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE4MzpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX0hUX0RFQlVHIFxcdTAwMjZcXHUwMDI2IG5ldF9yYXRlbGltaXQoKSxcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTg0LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODYtI2RlZmluZSBvY2JfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTg3OlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfT0NCX0RFQlVHLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODgtXFx0XFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE5MC0jZGVmaW5lIGlic3NfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTkxOlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfSUJTU19ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTkyLVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTQtI2RlZmluZSBwc19kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTU6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTk2LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTgtI2RlZmluZSBwc19kYmdfaHcoaHcsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTk6XFx0X3dpcGh5X2RiZyhNQUM4MDIxMV9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjAwLVxcdFxcdCAgIChodyktXFx1MDAzZXdpcGh5LCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMDItI2RlZmluZSBwc19kYmdfcmF0ZWxpbWl0ZWQoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDM6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9QU19ERUJVRyBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCksXFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIwNC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjA2LSNkZWZpbmUgbXBsX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIwNzpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX01QTF9ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjA4LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTAtI2RlZmluZSBtcGF0aF9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTE6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NUEFUSF9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjEyLVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTQtI2RlZmluZSBtaHdtcF9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTU6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NSFdNUF9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjE2LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTgtI2RlZmluZSBtc3luY19kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcsXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIyMC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjM6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI0LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjYtI2RlZmluZSBtcHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjI3OlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUVTSF9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMzAtI2RlZmluZSB0ZGxzX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzMTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX1RETFNfREVCVUcsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzMi1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjM0LSNkZWZpbmUgc3RhX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzNTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX1NUQV9ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjM2LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMzgtI2RlZmluZSBtbG1lX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzOTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX01MTUVfREVCVUcsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MS0jZGVmaW5lIG1sbWVfbGlua19pZF9kYmcoc2RhdGEsIGxpbmtfaWQsIGZtdCwgLi4uKVxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyNDI6XFx0X2xpbmtfaWRfZGJnKE1BQzgwMjExX01MTUVfREVCVUcsIHNkYXRhLCBsaW5rX2lkLFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDMtXFx0XFx0ICAgICBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDUtI2RlZmluZSBtbG1lX2RiZ19yYXRlbGltaXRlZChzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0NjpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX01MTUVfREVCVUcgXFx1MDAyNlxcdTAwMjYgbmV0X3JhdGVsaW1pdCgpLFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDctXFx0XFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjQ5OiNlbmRpZiAvKiBfX01BQzgwMjExX0RFQlVHX0ggKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9NjI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVidWdmc19zaG9ydF9mb3BzIHN0YXRzXyAjI25hbWUjIyBfb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjMyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjMzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTYzNC0jZGVmaW5lIERFQlVHRlNfU1RBVFNfQUREKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuYz02NDU9dm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjc5LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjgwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTY4MS1cXHRERUJVR0ZTX1NUQVRTX0FERChkb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjI6I2lmbmRlZiBfX01BQzgwMjExX0RFQlVHRlNfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19IXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaC00LVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaC02LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmg6NzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTgtdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgtMTYtXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaDoxNzojZW5kaWYgLyogX19NQUM4MDIxMV9ERUJVR0ZTX0ggKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaDoyOiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR0ZTX0tFWV9IXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oLTQtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oPTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2JlYWNvbl9kZWZhdWx0KFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtMjgtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6Mjk6I2VuZGlmIC8qIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9NzM2PUlFRUU4MDIxMV9JRl9MSU5LX0ZJTEUoYWRkciwgY29uZi1cXHUwMDNlYWRkciwgTUFDKTtcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzctXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM6NzM4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczOS1JRUVFODAyMTFfSUZfRklMRShlc3RhYl9wbGlua3MsIHUubWVzaC5lc3RhYl9wbGlua3MsIEFUT01JQyk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz04Njg9c3RhdGljIHZvaWQgYWRkX2lic3NfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzItXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM6ODczOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3NC1cXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTkzNz1zdGF0aWMgdm9pZCBhZGRfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NDktXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjk1MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NTEtXFx0XFx0YWRkX21lc2hfZmlsZXMoc2RhdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTItXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2Lmg6MTM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTQtdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDoyOiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR0ZTX1NUQV9IXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19TVEFfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTQtXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC02LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtOC12b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg9MjQ9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9saW5rX3N0YV9kZWJ1Z2ZzX2Rydl9yZW1vdmUoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKSB7fVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtMjYtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg6Mjc6I2VuZGlmIC8qIF9fTUFDODAyMTFfREVCVUdGU19TVEFfSCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC03LVxcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg6ODojaWZuZGVmIF9fTUFDODAyMTFfRFJJVkVSX09QU1xcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg6OTojZGVmaW5lIF9fTUFDODAyMTFfRFJJVkVSX09QU1xcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtMTAtXFxuLS1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oPTQ3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTQ5NC1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjQ5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTQ5Ni1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3ZpZl9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg9MTc5Nz1kcnZfbmFuX3BlZXJfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtMTgxNi1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjE4MTc6I2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqL1xcbi0tXFxubmV0L21hYzgwMjExL2Ryb3AuaC03LVxcbm5ldC9tYWM4MDIxMS9kcm9wLmg6ODojaWZuZGVmIE1BQzgwMjExX0RST1BfSFxcbm5ldC9tYWM4MDIxMS9kcm9wLmg6OTojZGVmaW5lIE1BQzgwMjExX0RST1BfSFxcbm5ldC9tYWM4MDIxMS9kcm9wLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9kcm9wcmVhc29uLmhcXHUwMDNlXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjA2LjgwNzUwMzI3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTg1NjYyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbnRlcmZhY2UgTGlmZWN5Y2xlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZXNlIHdpcmVsZXNzIGludGVyZmFjZXMgYXJlIGluaXRpYWxpemVkLCB1bmluaXRpYWxpemVkLCBhbmQgZ2VuZXJhbGx5IG1hbmFnZWQgaW4gdGhlIGtlcm5lbCdzIG1hYzgwMjExIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgY2VudHJhbCBsb2dpYyBmb3IgaW50ZXJmYWNlIG9wZXJhdGlvbnMuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgdW5pbml0aWFsaXphdGlvbiBwYXRoIGFuZCBob3cgaW50ZXJmYWNlcyBnZXQgdGFrZW4gZG93bi4gSSB3YW50IHRvIHNlZSBleGFjdGx5ICp3aGVyZSogYGllZWU4MDIxMV91bmluaXRgIGFuZCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYXJlIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlaXIgdXNlIHRvIGJldHRlciB0cm91Ymxlc2hvb3Qgb3IgbW9kaWZ5IHRoZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaGVscCBtZSByZWFzb24gYWJvdXQgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgaW50ZXJmYWNlIHJlbW92YWwgYW5kIHRlYXJkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU0NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjA5LjE2NjA3MjA2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTU6XFx0XFx0aWVlZTgwMjExX3ZpZl9jbGVhcl9saW5rcyhzZGF0YSk7XFxuIDkxNjpcXHRcXHRpZWVlODAyMTFfbGlua19zdG9wKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluayk7XFxuIDkxNzpcXHRcXG4gOTE4OlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKSB7XFxuIDkxOTpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKm5hbl9zY2hlZCA9XFxuIDkyMDpcXHRcXHRcXHRcXHRcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xcbiA5MjE6XFx0XFxuIDkyMjpcXHRcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobmFuX3NjaGVkLVxcdTAwM2VjaGFubmVscyk7IGkrKylcXG4gOTIzOlxcdFxcdFxcdFxcdFdBUk5fT04obmFuX3NjaGVkLVxcdTAwM2VjaGFubmVsc1tpXS5jaGFucmVxLm9wZXIuY2hhbik7XFxuIDkyNDpcXHRcXHR9XFxuIDkyNTpcXHR9XFxuIDkyNjpcXHRcXG4gOTI3OlxcdC8qXFxuIDkyODpcXHQgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XFxuIDkyOTpcXHQgKiBjb3JlIHdoZW4gY2ZnODAyMTEgY291bGRuJ3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0J3MgYmVpbmdcXG4gOTMwOlxcdCAqIGRlc3Ryb3llZC4gRHJvcCBpdCBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCBlaXRoZXIgd2F5LlxcbiA5MzE6XFx0ICovXFxuIDkzMjpcXHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5saXN0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuIDkzNTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICppdGVyO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiA5Mzg6XFx0XFxuIDkzOTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbiA5NDA6XFx0XFx0XFx0aWYgKGl0ZXIgIT0gc2RhdGEpXFxuIDk0MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTQyOlxcdFxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2bG9jYWwtXFx1MDAzZWlmbGlzdF9tdHgpO1xcbiA5NDM6XFx0XFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZzZGF0YS1cXHUwMDNlbGlzdCk7XFxuIDk0NDpcXHRcXHRcXHRyZXR1cm47XFxuIDk0NTpcXHRcXHR9XFxuIDk0NjpcXHR9XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gOTQ5OlxcdHtcXG4gOTUwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0aWVlZTgwMjExX3VubGlzdF9zZGF0YShzZGF0YSk7XFxuIDk1MzpcXHRcXHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0XFxuIDk1NjpcXHRzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gOTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcXG4gOTU4OlxcdHtcXG4gOTU5OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gOTYwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbiA5NjE6XFx0XFxuIDk2MjpcXHRcXHRyZXR1cm4gZHJ2X25ldF9zZXR1cF90Yyhsb2NhbCwgc2RhdGEsIGRldiwgdHlwZSwgdHlwZV9kYXRhKTtcXG4gOTYzOlxcdH1cXG4gOTY0OlxcdFxcbiA5NjU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcXG4gOTY2OlxcdFxcdC5uZG9fb3BlblxcdFxcdD0gaWVlZTgwMjExX29wZW4sXFxuIDk2NzpcXHRcXHQubmRvX3N0b3BcXHRcXHQ9IGllZWU4MDIxMV9zdG9wLFxcbiA5Njg6XFx0XFx0Lm5kb191bmluaXRcXHRcXHQ9IGllZWU4MDIxMV91bmluaXQsXFxuIDk2OTpcXHRcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0LFxcbiA5NzA6XFx0XFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcXG4gOTcxOlxcdFxcdC5uZG9fc2V0X21hY19hZGRyZXNzIFxcdD0gaWVlZTgwMjExX2NoYW5nZV9tYWMsXFxuIDk3MjpcXHRcXHQubmRvX3NldHVwX3RjXFx0XFx0PSBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjLFxcbiA5NzM6XFx0fTtcXG4gOTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDowOS4xNjYyNTgyODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ3NjIyNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIGBsb2NhbC1cdTAwM2VpbnRlcmZhY2VzYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBsb2NhbC1cdTAwM2VpbnRlcmZhY2VzYCBpcyBtYW5pcHVsYXRlZCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBmb3IgbWFjODAyMTEgbGlrZWx5IHJlc2lkZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoICp3aXRoaW4qIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSdtIGxvb2tpbmcgZm9yIGRpcmVjdCBtb2RpZmljYXRpb25zIHRvIHRoYXQgcGFydGljdWxhciBzdHJ1Y3QgbWVtYmVyLiBBIHNpbXBsZSBgZ3JlcGAgb3IgYW4gSURFJ3Mgc2VhcmNoIHdvdWxkIGJlIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIGZvY3VzIG9uIGFzc2lnbm1lbnRzIChgPWApLCBwb3RlbnRpYWxseSBhbHNvIGluY3JlbWVudHMvZGVjcmVtZW50cyAoYCs9YCwgYC0tYCkgaWYgdGhleSBhcmUgaW52b2x2ZWQgaW4gbWFuaXB1bGF0aW5nIHRoZSBpbnRlcmZhY2UgbGlzdC4gSSdtIGFsc28gZ29pbmcgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgc3RydWN0dXJlIGFjY2Vzc2VzIGxpa2UgYGxvY2FsLVx1MDAzZWludGVyZmFjZXMtXHUwMDNlLi4uYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRyYWNrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGxpc3Qgb2YgaW50ZXJmYWNlcyBpcyBiZWluZyBidWlsdCwgbWFpbnRhaW5lZCwgYW5kIGNsZWFuZWQgdXAsIGFzIHRoaXMgaXMgY3JpdGljYWwgdG8gcHJvcGVyIGRyaXZlciBvcGVyYXRpb24uIE9uY2UgSSBoYXZlIHRoZSBsb2NhdGlvbnMsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGludGVyZmFjZSBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGFuZCBhbnkgcmUtYXJyYW5nZW1lbnQgaW4gdGhpcyBsb2NhdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBzdXJyb3VuZGluZyB0aGUgYWNjZXNzIGFzIHdlbGwsIHRoYXQgaXMgYWxzbyBjcml0aWNhbCB0byB1bmRlcnN0YW5kLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIHNvbWUgZm9ybSBvZiBsaW5rZWQgbGlzdCBtYW5pcHVsYXRpb24sIGdpdmVuIHRoYXQgaXQncyBsaWtlbHkgbWFuYWdpbmcgYSB2YXJpYWJsZSBudW1iZXIgb2YgaW50ZXJmYWNlcywgYnV0IEknbGwgY29uZmlybSB0aGF0IGFzIEkgcmV2aWV3IHRoZSBjb2RlLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgbGlmZWN5Y2xlIG9mIGFuIGludGVyZmFjZSBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGlzIGNvcmUgbWFjODAyMTEgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5OTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjEyLjMxMzg4MzA1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MTMxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZXJmYWNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbWFjODAyMTEvYXAuYz0yOTc9dm9pZCBpZWVlODAyMTFfYXBfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2FwLmMtMzAxLVxcbm5ldC9tYWM4MDIxMS9hcC5jOjMwMjpcXHQvKiByeC5jIGNhbm5vdCBxdWV1ZSBhbnkgbm9uLWFjdGlvbiBmcmFtZXMgdG8gQVAgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9hcC5jLTMwMy1cXHRpZiAoV0FSTl9PTighaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LVxcdTAwM2VmcmFtZV9jb250cm9sKSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9MzcwOD1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzczLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzozNzc0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzc1LVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTM3OTUtXFx0fVxcbm5ldC9tYWM4MDIxMS9jZmcuYzozNzk2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzk3LVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQyNDU9c3RhdGljIHZvaWQgaWVlZTgwMjExX2VuZF9jYWMoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00MjUzLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo0MjU0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy00MjU1LVxcdFxcdGxpbmtfZGF0YSA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2VsaW5rW2xpbmtfaWRdLCBzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDM3NT12b2lkIGllZWU4MDIxMV9jc2FfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTQzOTUtXFx0XFx0LyogVHJpZ2dlciBpZWVlODAyMTFfY3NhX2ZpbmlzaCgpIG9uIHRoZSBub24tdHJhbnNtaXR0aW5nXFxubmV0L21hYzgwMjExL2NmZy5jOjQzOTY6XFx0XFx0ICogaW50ZXJmYWNlcyB3aGVuIGNoYW5uZWwgc3dpdGNoIGlzIHJlY2VpdmVkIG9uXFxubmV0L21hYzgwMjExL2NmZy5jLTQzOTctXFx0XFx0ICogdHJhbnNtaXR0aW5nIGludGVyZmFjZVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ0Njc9c3RhdGljIGludCBfX2llZWU4MDIxMV9jc2FfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDg2LVxcdFxcdCAqIHdpdGggbXVsdGktdmlmIGNzYSBkcml2ZXIgbWF5IGNhbGwgaWVlZTgwMjExX2NzYV9maW5pc2goKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NDg3OlxcdFxcdCAqIG1hbnkgdGltZXMgd2hpbGUgd2FpdGluZyBmb3Igb3RoZXIgaW50ZXJmYWNlcyB0byB1c2UgdGhlaXJcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ4OC1cXHRcXHQgKiByZXNlcnZhdGlvbnNcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTEyPWllZWU4MDIxMV9jaGFuY3R4X3VzZXJfaXRlcl9uZXh0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy0xMzctXFx0LyogbmV4dCAob3IgZmlyc3QpIGludGVyZmFjZSAqL1xcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTM4OlxcdGl0ZXItXFx1MDAzZXNkYXRhID0gbGlzdF9wcmVwYXJlX2VudHJ5KGl0ZXItXFx1MDAzZXNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpO1xcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTM5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoaXRlci1cXHUwMDNlc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTQwLVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoaXRlci1cXHUwMDNlc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYz0yODQ9aWVlZTgwMjExX2NoYW5yZXFfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmVxICphLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy0yOTUtXFx0LypcXG5uZXQvbWFjODAyMTEvY2hhbi5jOjI5NjpcXHQgKiBSZW1vdmUgTlBDQSBpZiBpdCdzIG5vdCByZXF1aXJlZCwgc28gdGhhdCBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL2NoYW4uYy0yOTctXFx0ICogc2hhcmluZyBhIGNoYW5uZWwgY29udGV4dCB3aWxsIG5vdCB1c2UgTlBDQSB3aGlsZSB0aGVcXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5OC1cXHQgKiBjaGFubmVsIGNvbnRleHQgaXMgc2hhcmVkLlxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6Mjk5OlxcdCAqIElmIGJvdGggc2lkZXMgYXJlIEFQIGludGVyZmFjZXMgcmVxdWlyaW5nIE5QQywgdGhlcmUnc1xcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMzAwLVxcdCAqIGFuIGFzc3VtcHRpb24gdGhhdCB1c2Vyc3BhY2Ugd2lsbCBzZXQgdGhlbSB1cCB3aXRoXFxuLS1cXG5uZXQvbWFjODAyMTEvY2hhbi5jPTU4Mj1pZWVlODAyMTFfZ2V0X2NoYW5jdHhfbWF4X3JlcXVpcmVkX2J3KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy02MzEtICogcmVjYWxjIHRoZSBtaW4gcmVxdWlyZWQgY2hhbiB3aWR0aCBvZiB0aGUgY2hhbm5lbCBjb250ZXh0LCB3aGljaCBpc1xcbm5ldC9tYWM4MDIxMS9jaGFuLmM6NjMyOiAqIHRoZSBtYXggb2YgbWluIHJlcXVpcmVkIHdpZHRocyBvZiBhbGwgdGhlIGludGVyZmFjZXMgYm91bmQgdG8gdGhpc1xcbm5ldC9tYWM4MDIxMS9jaGFuLmMtNjMzLSAqIGNoYW5uZWwgY29udGV4dC5cXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM9Njc1PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jaGFuX2J3X2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtNzQxLSAqIHJlY2FsYyB0aGUgbWluIHJlcXVpcmVkIGNoYW4gd2lkdGggb2YgdGhlIGNoYW5uZWwgY29udGV4dCwgd2hpY2ggaXNcXG5uZXQvbWFjODAyMTEvY2hhbi5jOjc0MjogKiB0aGUgbWF4IG9mIG1pbiByZXF1aXJlZCB3aWR0aHMgb2YgYWxsIHRoZSBpbnRlcmZhY2VzIGJvdW5kIHRvIHRoaXNcXG5uZXQvbWFjODAyMTEvY2hhbi5jLTc0My0gKiBjaGFubmVsIGNvbnRleHQuXFxuLS1cXG5uZXQvbWFjODAyMTEvY2hhbi5jPTgxMT1zdGF0aWMgdm9pZCBfaWVlZTgwMjExX2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy04MzEtXFx0XFx0ICogbWFjODAyMTEgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgc2hhcmluZyBpZGVudGljYWxcXG5uZXQvbWFjODAyMTEvY2hhbi5jOjgzMjpcXHRcXHQgKiBjaGFuY3R4J3MgZm9yIFMxRyBpbnRlcmZhY2VzLlxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtODMzLVxcdFxcdCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYz0xODg1PXN0YXRpYyBpbnQgaWVlZTgwMjExX3ZpZl91c2VfcmVzZXJ2ZWRfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy0xOTQ0LVxcdFxcdFxcdHdpcGh5X2luZm8obG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTk0NTpcXHRcXHRcXHRcXHQgICBcXFwiY2hhbm5lbCBjb250ZXh0IHJlc2VydmF0aW9uIGNhbm5vdCBiZSBmaW5hbGl6ZWQgYmVjYXVzZSBzb21lIGludGVyZmFjZXMgYXJlbid0IHN3aXRjaGluZ1xcXFxuXFxcIik7XFxubmV0L21hYzgwMjExL2NoYW4uYy0xOTQ2LVxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM9MjM1Nz1pbnQgaWVlZTgwMjExX2xpbmtfdXNlX3Jlc2VydmVkX2NvbnRleHQoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXFxuLS1cXG5uZXQvbWFjODAyMTEvY2hhbi5jLTIzOTctXFx0ICogVGhlIGllZWU4MDIxMV92aWZfdXNlX3Jlc2VydmVkX3N3aXRjaCgpIGFscmVhZHkgc3RvcHMgYWxsIG5lY2Vzc2FyeVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MjM5ODpcXHQgKiBpbnRlcmZhY2VzIHVwb24gZmFpbHVyZS5cXG5uZXQvbWFjODAyMTEvY2hhbi5jLTIzOTktXFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jPTM3OT1zdGF0aWMgc3NpemVfdCByZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuYy0zOTEtXFx0aWYgKHJldClcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jOjM5MjpcXHRcXHRjZmc4MDIxMV9zaHV0ZG93bl9hbGxfaW50ZXJmYWNlcyhsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtMzkzLVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYz0xNjY4PXZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjczLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTY3NDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzUtXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD04Mz1leHRlcm4gY29uc3QgdTggaWVlZTgwMjExX2FjX3RvX3Fvc19tYXNrW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwLSAqIEN1cnJlbnQgbWFjODAyMTEgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDE2MDAgQUlEU1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjkxOiAqIGZvciBTMUcgaW50ZXJmYWNlcy4gV2l0aCByZWdhcmRzIHRvIGFuIFMxRyBUSU0sIHRoaXMgY292ZXJzIDI1IGJsb2Nrc1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkyLSAqIGFzIGVhY2ggYmxvY2sgaXMgNjQgQUlEcy5cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIxMj1lbnVtIGllZWU4MDIxMV9wYWNrZXRfcnhfZmxhZ3Mge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzLSAqXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjI0OiAqIFRoZXNlIGZsYWdzIGFyZSB1c2VkIGFjcm9zcyBoYW5kbGluZyBtdWx0aXBsZSBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjI1LSAqIGZvciBhIHNpbmdsZSBmcmFtZS5cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTg5OD1lbnVtIGllZWU4MDIxMV9zZGF0YV9zdGF0ZV9iaXRzIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwNy0gKiBASUVFRTgwMjExX0NIQU5DVFhfU0hBUkVEOiBjaGFubmVsIGNvbnRleHQgbWF5IGJlIHVzZWQgYnlcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5MDg6ICpcXHRtdWx0aXBsZSBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTA5LSAqIEBJRUVFODAyMTFfQ0hBTkNUWF9FWENMVVNJVkU6IGNoYW5uZWwgY29udGV4dCBjYW4gYmUgdXNlZFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTI3MD1zdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICp2aWZfdG9fc2RhdGEoc3RydWN0IGllZWU4MDIxMV92aWYgKnApXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMjg0LVxcdCAgICAgX19fbGlua19pZDsgX19fbGlua19pZCA9IDAgLyogYWx3YXlzIHN0b3AgKi8pXFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjEyODU6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShfX19zZGF0YSwgXFx1MDAyNihfbG9jYWwpLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxcdFxcXFxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMjg2LVxcdGlmIChfX19saW5rX2lkID09IEFSUkFZX1NJWkUoX19fc2RhdGEtXFx1MDAzZWxpbmspIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTMwMy1cXHQgICAgIF9fX2xpbmtfaWQ7IF9fX2xpbmtfaWQgPSAwIC8qIGFsd2F5cyBzdG9wICovKVxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxMzA0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoX19fc2RhdGEsIFxcdTAwMjYoX2xvY2FsKS1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdClcXHRcXFxcXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTMwNS1cXHRpZiAoX19fbGlua19pZCA9PSBBUlJBWV9TSVpFKF9fX3NkYXRhLVxcdTAwM2VsaW5rKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDk4LVxcdGludCBtb25pdG9ycywgdmlydF9tb25pdG9ycywgdHhfbW50cnM7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTQ5OTpcXHQvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aXRoIGNvcnJlc3BvbmRpbmcgRklGXyBmbGFncyAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE1MDAtXFx0aW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzLCBmaWZfcHNwb2xsLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTU5Ni1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNTk3OlxcdC8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdpdGggYWxsbXVsdGkgUlggKi9cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTk4LVxcdGF0b21pY190IGlmZl9hbGxtdWx0aXM7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjA2LVxcdC8qIHNlZSBpZmFjZS5jICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYwNzpcXHRzdHJ1Y3QgbGlzdF9oZWFkIGludGVyZmFjZXM7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTYwOC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIG1vbl9saXN0OyAvKiBvbmx5IHRoYXQgYXJlIElGRl9VUCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTcwMi1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNzAzOlxcdGludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0sIGZvciBhbGwgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE3MDQtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTAwPWllZWU4MDIxMV9maW5kX25hbl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxMDYtXFx0LyogRmluZCB0aGUgTkFOIGludGVyZmFjZSAtIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxMDc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjEwOC1cXHRcXHRpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTk5PXZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIwMDp2b2lkIGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIwMS11MzIgaWVlZTgwMjExX2lkbGVfb2ZmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNT1zdGF0aWMgdTMyIF9faWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTIwLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEyMTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEyMi1cXHRcXHRpZiAoaXRlci1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xNjE9c3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X21hYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODctXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTg4OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTg5LVxcdFxcdGlmIChpdGVyID09IHNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MzQxPXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoZWNrX2NvbmN1cnJlbnRfaWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zNTAtXFx0Lyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjM1MTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5zZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMzUyLVxcdFxcdGlmIChuc2RhdGEgIT0gc2RhdGEgXFx1MDAyNlxcdTAwMjYgaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcobnNkYXRhKSkge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMzgwLVxcdFxcdFxcdCAqIFRvIHJlbW92ZSB0aGlzIHJlc3RyaWN0aW9uIHdlJ2QgaGF2ZSB0byBkaXNhbGxvdyB0aGVtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MzgxOlxcdFxcdFxcdCAqIGZyb20gc2V0dGluZyB0aGUgc2FtZSBTU0lEIG9uIGRpZmZlcmVudCBJQlNTIGludGVyZmFjZXNcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zODItXFx0XFx0XFx0ICogYmVsb25naW5nIHRvIHRoZSBzYW1lIGhhcmR3YXJlLiBUaGVuLCBob3dldmVyLCB3ZSdyZVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMzk3LVxcdFxcdFxcdC8qXFxubmV0L21hYzgwMjExL2lmYWNlLmM6Mzk4OlxcdFxcdFxcdCAqIFRoZSByZW1haW5pbmcgY2hlY2tzIGFyZSBvbmx5IHBlcmZvcm1lZCBmb3IgaW50ZXJmYWNlc1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTM5OS1cXHRcXHRcXHQgKiB3aXRoIHRoZSBzYW1lIE1BQyBhZGRyZXNzLlxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9NDc5PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2Rvd24pXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzYtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxubmV0L21hYzgwMjExL2lmYWNlLmM6NjM3OlxcdFxcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo2Mzg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzktXFx0XFx0XFx0V0FSTl9PTihpdGVyLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9ODQ1PXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg0OC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo4NDk6XFx0LyogY2xvc2UgZGVwZW5kZW50IFZMQU4gaW50ZXJmYWNlcyBiZWZvcmUgbG9ja2luZyB3aXBoeSAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg1MC1cXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NjEtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6ODYyOlxcdC8qIENsb3NlIHRoZSBkZXBlbmRlbnQgTUJTU0lEIGludGVyZmFjZXMgd2l0aCB3aXBoeSBsb2NrIGFzIHdlIG1heSBiZVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg2My1cXHQgKiB0ZXJtaW5hdGluZyBpdHMgcGFydG5lciBsaW5rcyB0b28gaW4gY2FzZSBvZiBNTEQuXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05MzI9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTkzOC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5Mzk6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NDAtXFx0XFx0aWYgKGl0ZXIgIT0gc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMTYwPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZWNhbGNfc2RhdGFfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExNjktXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTE3MDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3MS1cXHRcXHRpZiAodnNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIHx8XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMTc5PXZvaWQgaWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE4Ny1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMTg4OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExODktXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMzg5PWludCBpZWVlODAyMTFfZG9fb3BlbihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBib29sIGNvbWluZ191cClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE1OTktXFx0XFx0ICogZG9lc24ndCBzdGFydCB1cCB3aXRoIHNhbmUgZGVmYXVsdHMuXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTYwMDpcXHRcXHQgKiBFbmFibGUgUW9TIGZvciBhbnl0aGluZyBidXQgc3RhdGlvbiBpbnRlcmZhY2VzLlxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE2MDEtXFx0XFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMTIzPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NpZ25fcGVybV9hZGRyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE0Ni1cXHRcXHQvKiBtYXRjaCB1cCB3aXRoIGFuIEFQIGludGVyZmFjZSAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIxNDc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE0OC1cXHRcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE1Ny1cXHRcXHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIFAyUF9ERVZfQUREUl9GT1JfSU5URikpIHtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTU4OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNTktXFx0XFx0XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfREVWSUNFKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE3Mi1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTczOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNzQtXFx0XFx0XFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwobG9jYWwtXFx1MDAzZWh3LndpcGh5LVxcdTAwM2VhZGRyZXNzZXNbaV0uYWRkcixcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIyMDgtXFx0XFx0bSA9IGxvY2FsLVxcdTAwM2Vody53aXBoeS1cXHUwMDNlcGVybV9hZGRyO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMDk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIxMC1cXHRcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMjMzLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMzQ6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIzNS1cXHRcXHRcXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbCh0bXBfYWRkciwgc2RhdGEtXFx1MDAzZXZpZi5hZGRyKSkge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MjI1Mj1pbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTAtXFx0XFx0LyogTVRVIHJhbmdlIGlzIG5vcm1hbGx5IDI1NiAtIDIzMDQsIHdoZXJlIHRoZSB1cHBlciBsaW1pdCBpc1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0MTE6XFx0XFx0ICogdGhlIG1heGltdW0gTVNEVSBzaXplLiBNb25pdG9yIGludGVyZmFjZXMgc2VuZCBhbmQgcmVjZWl2ZVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTItXFx0XFx0ICogTVBEVSBhbmQgQS1NU0RVIGZyYW1lcyB3aGljaCBtYXkgYmUgbXVjaCBsYXJnZXIgc28gd2UgZG9cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MjgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZWlmbGlzdF9tdHgpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0Mjk6XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNnNkYXRhLVxcdTAwM2VsaXN0LCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MzAtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yNDY0PXZvaWQgaWVlZTgwMjExX3NkYXRhX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDcwLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0NzE6dm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ3Mi17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDc3LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0Nzg6XFx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzdG9wcGVkIHNvXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ3OS1cXHQgKiB0aGF0IHRoZSBoYXJkd2FyZSBpcyBzdG9wcGVkLiBPdGhlcndpc2UsIHRoZSBkcml2ZXIgbWlnaHQgc3RpbGwgYmVcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDgwOlxcdCAqIGl0ZXJhdGluZyB0aGUgaW50ZXJmYWNlcyBkdXJpbmcgdGhlIHNodXRkb3duLCBlLmcuIGZyb20gYSB3b3JrZXJcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDgxLVxcdCAqIG9yIGZyb20gUlggcHJvY2Vzc2luZyBvciBzaW1pbGFyLCBhbmQgaWYgaXQgZG9lcyBzbyAodXNpbmcgYXRvbWljXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDg4LVxcdCAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0ODk6XFx0Y2ZnODAyMTFfc2h1dGRvd25fYWxsX2ludGVyZmFjZXMobG9jYWwtXFx1MDAzZWh3LndpcGh5KTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDkwLVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ5Ni1cXHRtdXRleF9sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ5NzpcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgXFx1MDAyNnVucmVnX2xpc3QpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0OTgtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTIwPXN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNjctXFx0XFx0LypcXG5uZXQvbWFjODAyMTEva2V5LmM6MTY4OlxcdFxcdCAqIFRoZSBkcml2ZXIgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy5cXG5uZXQvbWFjODAyMTEva2V5LmM6MTY5OlxcdFxcdCAqIEhlbmNlLCBkb24ndCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNzAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9ODQ2PWludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy04NzUtXFx0XFx0ICogdGhlIHNhbWUgY2lwaGVyLiBFbmZvcmNlIHRoZSBhc3N1bXB0aW9uIGZvciBwYWlyd2lzZSBrZXlzLlxcbm5ldC9tYWM4MDIxMS9rZXkuYzo4NzY6XFx0XFx0ICogTkFOIERhdGEgaW50ZXJmYWNlcyBhcmUgZXhlbXB0OiBXaS1GaSBBd2FyZSB2NC4wIHNlY3Rpb24gNy40XFxubmV0L21hYzgwMjExL2tleS5jLTg3Ny1cXHRcXHQgKiByZXF1aXJlcyB1cGdyYWRpbmcgdGhlIE5ELVRLU0Egd2hlbiBhIG5ldyBORFAgbmVnb3RpYXRlcyBhXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTAyMD12b2lkIGllZWU4MDIxMV9pdGVyX2tleXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTAzOS1cXHR9IGVsc2Uge1xcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDQwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdClcXG5uZXQvbWFjODAyMTEva2V5LmMtMTA0MS1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTA2NT12b2lkIGllZWU4MDIxMV9pdGVyX2tleXNfcmN1KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL2tleS5jLTEwODAtXFx0fSBlbHNlIHtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTA4MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDgyLVxcdFxcdFxcdF9pZWVlODAyMTFfaXRlcl9rZXlzX3JjdShodywgc2RhdGEsIGl0ZXIsIGl0ZXJfZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTk2PXN0YXRpYyB1MzIgaWVlZTgwMjExX2NhbGNfaHdfY29uZl9jaGFuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYy0xNzMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTc0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE3NS1cXHRcXHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mLmNoYW5jdHhfY29uZikpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTQ3ND1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVzdGFydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmMtNDkwLVxcbm5ldC9tYWM4MDIxMS9tYWluLmM6NDkxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9tYWluLmMtNDkyLVxcdFxcdC8qXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTUzMC1cXHRpZiAocmV0KVxcbm5ldC9tYWM4MDIxMS9tYWluLmM6NTMxOlxcdFxcdGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKGxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxubmV0L21hYzgwMjExL21haW4uYy01MzItXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTc5Mz1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTk3OC1cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjk3OTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMpO1xcbm5ldC9tYWM4MDIxMS9tYWluLmMtOTgwLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsb2NhbC1cXHUwMDNlbW9uX2xpc3QpO1xcbi0tXFxubmV0L21hYzgwMjExL21haW4uYz0xMTM3PWludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEyNzAtXFx0XFx0XFx0ICogQXNzaWduIHRoZSBmaXJzdCBlbmFibGVkIGNoYW5uZWwgdG8gZGZsdF9jaGFuZGVmXFxubmV0L21hYzgwMjExL21haW4uYzoxMjcxOlxcdFxcdFxcdCAqIGZyb20gdGhlIGxpc3Qgb2YgY2hhbm5lbHMuIEZvciBTMUcgaW50ZXJmYWNlc1xcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTI3Mi1cXHRcXHRcXHQgKiBlbnN1cmUgaXQgY2FuIGJlIHVzZWQgYXMgYSBwcmltYXJ5Llxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYy0xNTI3LVxcdCAqIGFuZCB3ZSBuZWVkIHNvbWUgaGVhZHJvb20gZm9yIHBhc3NpbmcgdGhlIGZyYW1lIHRvIG1vbml0b3JcXG5uZXQvbWFjODAyMTEvbWFpbi5jOjE1Mjg6XFx0ICogaW50ZXJmYWNlcywgYnV0IG5ldmVyIGJvdGggYXQgdGhlIHNhbWUgdGltZS5cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE1MjktXFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE2ODItXFx0cmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7XFxubmV0L21hYzgwMjExL21haW4uYzoxNjgzOlxcdGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhsb2NhbCk7XFxubmV0L21hYzgwMjExL21haW4uYy0xNjg0LVxcdHJ0bmxfdW5sb2NrKCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTE2OTY9dm9pZCBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTcxNi1cXHQgKi9cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjE3MTc6XFx0aWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKGxvY2FsKTtcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE3MTgtXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTIxNj1zdHJ1Y3QgbWVzaF9ybWMge1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guaC0yMzMtXFxubmV0L21hYzgwMjExL21lc2guaDoyMzQ6LyogUHVibGljIGludGVyZmFjZXMgKi9cXG5uZXQvbWFjODAyMTEvbWVzaC5oLTIzNS0vKiBWYXJpb3VzICovXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM0NT12b2lkIG1lc2hfc3RhX2NsZWFudXAoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzQ2LVxcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzQ3Oi8qIFByaXZhdGUgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzQ4LS8qIE1lc2ggcGF0aHMgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTg4OD1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYWRkX3ZodF9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTkzOC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjE5Mzk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL21sbWUuYy0xOTQwLVxcdFxcdFxcdGlmIChvdGhlci1cXHUwMDNldmlmLmJzc19jb25mLm11X21pbW9fb3duZXIpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9Mjg3ND1zdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX3N3aXRjaF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDItXFx0XFx0ICogd2l0aCBtdWx0aS12aWYgY3NhIGRyaXZlciBtYXkgY2FsbCBpZWVlODAyMTFfY3NhX2ZpbmlzaCgpXFxubmV0L21hYzgwMjExL21sbWUuYzoyOTQzOlxcdFxcdCAqIG1hbnkgdGltZXMgd2hpbGUgd2FpdGluZyBmb3Igb3RoZXIgaW50ZXJmYWNlcyB0byB1c2UgdGhlaXJcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDQtXFx0XFx0ICogcmVzZXJ2YXRpb25zXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTM4MjI9dm9pZCBpZWVlODAyMTFfcmVjYWxjX3BzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0zODMzLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MzgzNDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTM4MzUtXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk1ODUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTU4NjpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL21sbWUuYy05NTg3LVxcdFxcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvbmFuLmM9MjI0PWllZWU4MDIxMV9uYW5fdXBkYXRlX2FsbF9uZGlfY2FycmllcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvbmFuLmMtMjI5LVxcbm5ldC9tYWM4MDIxMS9uYW4uYzoyMzA6XFx0LyogSXRlcmF0ZSBhbGwgaW50ZXJmYWNlcyBhbmQgdXBkYXRlIGNhcnJpZXIgZm9yIE5ESSBpbnRlcmZhY2VzICovXFxubmV0L21hYzgwMjExL25hbi5jOjIzMTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvbmFuLmMtMjMyLVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIHx8XFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTgzPXZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF92aWZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy05My1cXHQgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzo5NDpcXHQgKiBTVEEgaW50ZXJmYWNlcy5cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTk1LVxcdCAqL1xcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDUtXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxMDY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDctXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTEzMz12b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTQxLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6MTQyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTQzLVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9wbS5jPTIxPWludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pXFxuLS1cXG5uZXQvbWFjODAyMTEvcG0uYy05MS1cXHRcXHQgKi9cXG5uZXQvbWFjODAyMTEvcG0uYzo5MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvcG0uYy05My1cXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9wbS5jLTEzNC1cXHRcXHRcXHQvKiBjZmc4MDIxMSB3aWxsIGNhbGwgYmFjayBpbnRvIG1hYzgwMjExIHRvIGRpc2Nvbm5lY3RcXG5uZXQvbWFjODAyMTEvcG0uYzoxMzU6XFx0XFx0XFx0ICogYWxsIGludGVyZmFjZXMsIGFsbG93IHRoYXQgdG8gcHJvY2VlZCBwcm9wZXJseVxcbm5ldC9tYWM4MDIxMS9wbS5jLTEzNi1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9wbS5jLTE0Ni1cXG5uZXQvbWFjODAyMTEvcG0uYzoxNDc6XFx0LyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGluIHRoZSBkcml2ZXIgKi9cXG5uZXQvbWFjODAyMTEvcG0uYzoxNDg6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL3BtLmMtMTQ5LVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL3BtLmMtMTY3LVxcdC8qXFxubmV0L21hYzgwMjExL3BtLmM6MTY4OlxcdCAqIFdlIGRpc2Nvbm5lY3RlZCBvbiBhbGwgaW50ZXJmYWNlcyBiZWZvcmUgc3VzcGVuZCwgYWxsIGNoYW5uZWxcXG5uZXQvbWFjODAyMTEvcG0uYy0xNjktXFx0ICogY29udGV4dHMgc2hvdWxkIGJlIHJlbGVhc2VkLlxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9Nzk2PWllZWU4MDIxMV92YWxpZGF0ZV9tb25pdG9yX3JhZGlvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtODQwLS8qXFxubmV0L21hYzgwMjExL3J4LmM6ODQxOiAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgcmVjZWl2ZWQgZnJhbWUgdG8gYWxsIG1vbml0b3IgaW50ZXJmYWNlcyBhbmRcXG5uZXQvbWFjODAyMTEvcnguYy04NDItICogcmV0dXJucyBhIGNsZWFuZWQtdXAgU0tCIHRoYXQgbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBGQ1Mgbm9yIHRoZVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTE3MT1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy01MTgzLVxcdCAqIHNvIHB1bnQgaW4gdGhhdCBjYXNlLiBXZSBzaG91bGQgbmV2ZXIgaGF2ZSB0byBkZWxpdmVyIGEgZGF0YVxcbm5ldC9tYWM4MDIxMS9yeC5jOjUxODQ6XFx0ICogZnJhbWUgdG8gbXVsdGlwbGUgaW50ZXJmYWNlcyBhbnl3YXkuXFxubmV0L21hYzgwMjExL3J4LmMtNTE4NS1cXHQgKlxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTM2Nz1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTUxNi1cXG5uZXQvbWFjODAyMTEvcnguYzo1NTE3OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvcnguYy01NTE4LVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTcyOD12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTczNS1cXHQvKlxcbm5ldC9tYWM4MDIxMS9yeC5jOjU3MzY6XFx0ICoga2V5IHJlZmVyZW5jZXMgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcyBhcmUgcHJvdGVjdGVkIHVzaW5nIFJDVVxcbm5ldC9tYWM4MDIxMS9yeC5jLTU3MzctXFx0ICogYW5kIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBhcmUgaW4gYSByZWFkLXNpZGUgUkNVIHNlY3Rpb24gZHVyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTI3Nz12b2lkIGllZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjExL3NjYW4uYy0zNTktXFxubmV0L21hYzgwMjExL3NjYW4uYzozNjA6XFx0LyogRG8gbm90IHVwZGF0ZSB0aGUgQlNTIHRhYmxlIGluIGNhc2Ugb2Ygb25seSBtb25pdG9yIGludGVyZmFjZXMgKi9cXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTM2MS1cXHRpZiAobG9jYWwtXFx1MDAzZW9wZW5fY291bnQgPT0gbG9jYWwtXFx1MDAzZW1vbml0b3JzKVxcbi0tXFxubmV0L21hYzgwMjExL3NjYW4uYz00NDg9c3RhdGljIHZvaWQgX19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZClcXG4tLVxcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNTMwLVxcdCAqL1xcbm5ldC9tYWM4MDIxMS9zY2FuLmM6NTMxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNTMyLVxcdFxcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTU5OD1zdGF0aWMgYm9vbCBfX2llZWU4MDIxMV9jYW5fbGVhdmVfY2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTYxMi1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jOjYxMzpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhX2l0ZXIsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNjE0LVxcdFxcdGZvcl9lYWNoX3ZhbGlkX2xpbmsoXFx1MDAyNnNkYXRhX2l0ZXItXFx1MDAzZXdkZXYsIGxpbmtfaWQpXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTkyMz1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9kZWNpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zY2FuLmMtOTQwLVxcdCAqL1xcbm5ldC9tYWM4MDIxMS9zY2FuLmM6OTQxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zY2FuLmMtOTQyLVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDktICogU3RhdGlvbiBlbnRyaWVzIGFyZSBhZGRlZCBieSBtYWM4MDIxMSB3aGVuIHlvdSBlc3RhYmxpc2ggYSBsaW5rIHdpdGggYVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjUwOiAqIHBlZXIuIFRoaXMgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBmb3IgdGhlIGRpZmZlcmVudCB0eXBlIG9mIGludGVyZmFjZXNcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MS0gKiB3ZSBzdXBwb3J0LiBGb3IgYSByZWd1bGFyIHN0YXRpb24gdGhpcyBtZWFuIHdlIGFkZCB0aGUgQVAgc3RhIHdoZW4gd2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTEyOTI9c3RhdGljIGJvb2wgc3RhX2luZm9fY2xlYW51cF9leHBpcmVfYnVmZmVyZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMjk3LVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjEyOTg6XFx0LyogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3Igc3RhdGlvbnMgb24gQlNTL01CU1MgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEyOTktXFx0aWYgKCFzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vic3MgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTMyNj1zdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfdHgge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMzQ2LSAqIEBrZXk6IGJvb2wgaW5kaWNhdGluZyBlbmNyeXB0aW9uIGlzIGV4cGVjdGVkIChrZXkgaXMgc2V0KVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjM0NzogKiBAaW50ZXJuYWxfZm9yd2FyZDogZm9yd2FyZCBmcm9tcyBpbnRlcm5hbGx5IG9uIEFQL1ZMQU4gdHlwZSBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMzQ4LSAqIEB1c2VzX3JzczogY29weSBvZiBVU0VTX1JTUyBodyBmbGFnXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9NTczPWllZWU4MDIxMV9zZGF0YV9mcm9tX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NzgtXFx0aWYgKHNrYi1cXHUwMDNlZGV2KSB7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjU3OTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTU4MC1cXHRcXHRcXHRpZiAoIXNkYXRhLVxcdTAwM2VkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNTg5LVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYzo1OTA6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01OTEtXFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz05NDM9dm9pZCBpZWVlODAyMTFfdHhfbW9uaXRvcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy05NTEtXFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjk1MjpcXHQvKiBzZW5kIGZyYW1lIHRvIG1vbml0b3IgaW50ZXJmYWNlcyBub3cgKi9cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtOTUzLVxcdHJ0YXBfbGVuID0gaWVlZTgwMjExX3R4X3JhZGlvdGFwX2xlbihpbmZvLCBzdGF0dXMpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTk2OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjk3MDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTk3MS1cXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTMzMD1zdGF0aWMgdm9pZCBwdXJnZV9vbGRfcHNfYnVmZmVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMzNi1cXG5uZXQvbWFjODAyMTEvdHguYzozMzc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS90eC5jLTMzOC1cXHRcXHRzdHJ1Y3QgcHNfZGF0YSAqcHM7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjEyLjM2NDgwNDI3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDc4OTc5MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNlcXVlbmNlOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgTUFDODAyMTEgSW50ZXJmYWNlIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgZm9yIHJlbW92aW5nIHN0YXRpb25zIGFuZCBpbnRlcmZhY2VzIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IGBjZmc4MDIxMV9kZWxfc3RhYCwgYGNmZzgwMjExX2RlbF9pZmFjZWAsIGFuZCB1bHRpbWF0ZWx5IGBpZWVlODAyMTFfaWZfcmVtb3ZlYCBnZXQgaW52b2tlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW50ZXJmYWNlIHJlbW92YWwgZnVuY3Rpb24gYmVjYXVzZSBpdCBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGUgdGVhcmRvd24gcHJvY2VzcyBmb3IgYSBzdGF0aW9uLlxuXG5JJ2xsIHN0YXJ0IHdpdGggdGhlIGNvZGUgd2l0aGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgd2hlcmUgYGllZWU4MDIxMV9pZl9yZW1vdmVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zIHRyaWdnZXJpbmcgdGhpcyBjcml0aWNhbCBvcGVyYXRpb24sIGFuZCBob3cgdGhlIHN0YXRpb24ncyByZW1vdmFsIGZpdHMgaW50byB0aGUgd2hvbGUgcHJvY2Vzcy4gSSB3aWxsIHNlZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBBbmQgd2hhdCBhcmUgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MvcmVhc29ucyBmb3IgdGhlc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDM5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MTYuODQzNzg2NTA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY3NzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfaWZfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTIwNj1zdGF0aWMgc3RydWN0IHdpcmVsZXNzX2RldiAqaWVlZTgwMjExX2FkZF9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIyNS1cXHRcXHRpZiAoZXJyKSB7XFxubmV0L21hYzgwMjExL2NmZy5jOjIyNjpcXHRcXHRcXHRpZWVlODAyMTFfaWZfcmVtb3ZlKHNkYXRhKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjI3LVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTI1Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjUzLXtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjU0OlxcdGllZWU4MDIxMV9pZl9yZW1vdmUoSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjU1LVxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE5Nz1pbnQgaWVlZTgwMjExX2lmX2NoYW5nZV90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxOTgtXFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxOTk6dm9pZCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjAwLXZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTIyNTI9aW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDM3LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0Mzg6dm9pZCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDoxNi44OTE0NjcwNTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQzNzAxNjUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQgZnJvbSBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCBsaW5lcyAyNDM1LTI1MTAuXG5cbioqRGl2aW5nIERlZXAgaW50byBpZmFjZS5jOiBBIERldGFpbGVkIExvb2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgdGhlIHNlY3Rpb24gZnJvbSBgaWZhY2UuY2Agb3BlbiBpbiBteSBtZW50YWwgZWRpdG9yLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBsaW5lcyAyNDM1IHRocm91Z2ggMjUxMC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHRoZSBpbnRlcmZhY2UgbGF5ZXIgb2YgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrLiBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBJJ2Qgd2FnZXIgd2UncmUgbGlrZWx5IGluIGEgZnVuY3Rpb24gb3IgYSBjcnVjaWFsIGJsb2NrIGRlYWxpbmcgd2l0aCBpbnRlcmZhY2Utc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBidXQgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGJyaW5naW5nIGFuIGludGVyZmFjZSB1cCwgZG93biwgb3IgaGFuZGxpbmcgc29tZSBraW5kIG9mIGFzc29jaWF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgcmVsYXRpb25zaGlwcy4gSSdtIGdvaW5nIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0bzpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBBcmUgdGhlcmUgcm9idXN0IGVycm9yIGNoZWNrcywgYW5kIGhvdyBhcmUgZmFpbHVyZXMgY29tbXVuaWNhdGVkP1xuKiAgICoqQ29uY3VycmVuY3k6KiogQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgYmVpbmcgbWFuYWdlZD9cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogQXJlIHRoZXJlIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucyBpbiB0aGlzIGFyZWE/IElmIHNvLCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgdG8gcHJldmVudCBsZWFrcz9cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IHN0cnVjdHVyZXMgYXJlIGF0IHBsYXksIGFuZCB3aGF0IGtpbmQgb2YgbW9kaWZpY2F0aW9ucyBhcmUgZ29pbmcgb24/IEknbGwgcHJvYmFibHkgc2VlIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCwgYHN0cnVjdCBpZWVlODAyMTFfdmlmYCwgZXRjLiwgd2hpY2ggSSdsbCByZWxhdGUgdG8gbXkgbWVudGFsIG1vZGVsLlxuKiAgICoqQWJzdHJhY3Rpb24gTGVha3M6KiogQW0gSSBzZWVpbmcgdGhlIGNvZGUgbWFrZSBkaXJlY3QgY2FsbHMgdG8gaGFyZHdhcmUgb3IgbmV0d29yayBzdGFjayBlbGVtZW50cyBvciBpcyBpdCBhZGhlcmluZyB0byBhIG1vcmUgYWJzdHJhY3QgQVBJP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHdlbGwtZG9jdW1lbnRlZCBjb21tZW50cyBhbmQgdmFyaWFibGUgbmFtZXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIGNvZGUgZG9lcy4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIHNlY3Rpb24gZnJvbSBhIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHN0YWJpbGl0eSBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gaG93IHRoaXMgcGllY2Ugb2YgY29kZSBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoaXMgc3Vic3lzdGVtLiBJJ20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIGl0IGlzIGFuIG9wdGltaXphdGlvbiBvciBhIHdvcmthcm91bmQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDMwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MjEuMzI4NDg3MTQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDM1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDM1OlxcdFxcdHJldHVybiAwO1xcbjI0MzY6XFx0fVxcbjI0Mzc6XFx0XFxuMjQzODpcXHR2b2lkIGllZWU4MDIxMV9pZl9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuMjQzOTpcXHR7XFxuMjQ0MDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjI0NDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxuMjQ0MjpcXHRcXG4yNDQzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxuMjQ0NDpcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnNkYXRhLVxcdTAwM2VsaXN0KTtcXG4yNDQ1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4yNDQ2OlxcdFxcbjI0NDc6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHhxKVxcbjI0NDg6XFx0XFx0XFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cXHUwMDNlbG9jYWwsIHRvX3R4cV9pbmZvKHNkYXRhLVxcdTAwM2V2aWYudHhxKSk7XFxuMjQ0OTpcXHRcXG4yNDUwOlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR4cV9tZ210KVxcbjI0NTE6XFx0XFx0XFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cXHUwMDNlbG9jYWwsXFxuMjQ1MjpcXHRcXHRcXHRcXHRcXHQgICAgdG9fdHhxX2luZm8oc2RhdGEtXFx1MDAzZXZpZi50eHFfbWdtdCkpO1xcbjI0NTM6XFx0XFxuMjQ1NDpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4yNDU1OlxcdFxcbjI0NTY6XFx0XFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KFxcdTAwMjZzZGF0YS1cXHUwMDNld2Rldik7XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdFxcdGlmICghc2RhdGEtXFx1MDAzZWRldikge1xcbjI0NTk6XFx0XFx0XFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcXG4yNDYwOlxcdFxcdFxcdGtmcmVlKHNkYXRhKTtcXG4yNDYxOlxcdFxcdH1cXG4yNDYyOlxcdH1cXG4yNDYzOlxcdFxcbjI0NjQ6XFx0dm9pZCBpZWVlODAyMTFfc2RhdGFfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4yNDY1OlxcdHtcXG4yNDY2OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIXRlc3RfYml0KFNEQVRBX1NUQVRFX1JVTk5JTkcsIFxcdTAwMjZzZGF0YS1cXHUwMDNlc3RhdGUpKSlcXG4yNDY3OlxcdFxcdFxcdHJldHVybjtcXG4yNDY4OlxcdFxcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcXG4yNDY5OlxcdH1cXG4yNDcwOlxcdFxcbjI0NzE6XFx0dm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuMjQ3MjpcXHR7XFxuMjQ3MzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgKnRtcDtcXG4yNDc0OlxcdFxcdExJU1RfSEVBRCh1bnJlZ19saXN0KTtcXG4yNDc1OlxcdFxcbjI0NzY6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzdG9wcGVkIHNvXFxuMjQ3OTpcXHRcXHQgKiB0aGF0IHRoZSBoYXJkd2FyZSBpcyBzdG9wcGVkLiBPdGhlcndpc2UsIHRoZSBkcml2ZXIgbWlnaHQgc3RpbGwgYmVcXG4yNDgwOlxcdFxcdCAqIGl0ZXJhdGluZyB0aGUgaW50ZXJmYWNlcyBkdXJpbmcgdGhlIHNodXRkb3duLCBlLmcuIGZyb20gYSB3b3JrZXJcXG4yNDgxOlxcdFxcdCAqIG9yIGZyb20gUlggcHJvY2Vzc2luZyBvciBzaW1pbGFyLCBhbmQgaWYgaXQgZG9lcyBzbyAodXNpbmcgYXRvbWljXFxuMjQ4MjpcXHRcXHQgKiBpdGVyYXRpb24pIHdoaWxlIHdlJ3JlIG1hbmlwdWxhdGluZyB0aGUgbGlzdCwgdGhlIGl0ZXJhdGlvbiB3aWxsXFxuMjQ4MzpcXHRcXHQgKiBjcmFzaC5cXG4yNDg0OlxcdFxcdCAqXFxuMjQ4NTpcXHRcXHQgKiBBZnRlciB0aGlzLCB0aGUgaGFyZHdhcmUgc2hvdWxkIGJlIHN0b3BwZWQgYW5kIHRoZSBkcml2ZXIgc2hvdWxkXFxuMjQ4NjpcXHRcXHQgKiBoYXZlIHN0b3BwZWQgYWxsIG9mIGl0cyBhY3Rpdml0aWVzLCBzbyB0aGF0IHdlIGNhbiBkbyBSQ1UtdW5hd2FyZVxcbjI0ODc6XFx0XFx0ICogbWFuaXB1bGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIGxpc3QgYmVsb3cuXFxuMjQ4ODpcXHRcXHQgKi9cXG4yNDg5OlxcdFxcdGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKGxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxuMjQ5MDpcXHRcXG4yNDkxOlxcdFxcdGd1YXJkKHdpcGh5KShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRXQVJOKGxvY2FsLVxcdTAwM2VvcGVuX2NvdW50LCBcXFwiJXM6IG9wZW4gY291bnQgcmVtYWlucyAlZFxcXFxuXFxcIixcXG4yNDk0OlxcdFxcdCAgICAgd2lwaHlfbmFtZShsb2NhbC1cXHUwMDNlaHcud2lwaHkpLCBsb2NhbC1cXHUwMDNlb3Blbl9jb3VudCk7XFxuMjQ5NTpcXHRcXG4yNDk2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4yNDk3OlxcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBcXHUwMDI2dW5yZWdfbGlzdCk7XFxuMjQ5ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4yNDk5OlxcdFxcbjI1MDA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsIFxcdTAwMjZ1bnJlZ19saXN0LCBsaXN0KSB7XFxuMjUwMTpcXHRcXHRcXHRib29sIG5ldGRldiA9IHNkYXRhLVxcdTAwM2VkZXY7XFxuMjUwMjpcXHRcXG4yNTAzOlxcdFxcdFxcdC8qXFxuMjUwNDpcXHRcXHRcXHQgKiBSZW1vdmUgSVAgYWRkcmVzc2VzIGV4cGxpY2l0bHksIHNpbmNlIHRoZSBub3RpZmllciB3aWxsXFxuMjUwNTpcXHRcXHRcXHQgKiBza2lwIHRoZSBjYWxsYmFja3MgaWYgd2Rldi1cXHUwMDNlcmVnaXN0ZXJlZCBpcyBmYWxzZSwgc2luY2VcXG4yNTA2OlxcdFxcdFxcdCAqIHdlIGNhbid0IGFjcXVpcmUgdGhlIHdpcGh5X2xvY2soKSBhZ2FpbiB0aGVyZSBpZiBhbHJlYWR5XFxuMjUwNzpcXHRcXHRcXHQgKiBpbnNpZGUgdGhpcyBsb2NrZWQgc2VjdGlvbi5cXG4yNTA4OlxcdFxcdFxcdCAqL1xcbjI1MDk6XFx0XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuYXJwX2FkZHJfY250ID0gMDtcXG4yNTEwOlxcdFxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbjI1MTE6XFx0XFx0XFx0ICAgIHNkYXRhLVxcdTAwM2V1Lm1nZC5hc3NvY2lhdGVkKVxcbjI1MTI6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3ZpZl9jZmdfY2hhbmdlX25vdGlmeShzZGF0YSxcXG4yNTEzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdEJTU19DSEFOR0VEX0FSUF9GSUxURVIpO1xcbjI1MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjIxLjMyODY0OTMzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzc5MzQxNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBVbmluaXRpYWxpemluZyBhIE5ldGRldiBXaXRob3V0IEV4cGxpY2l0IE1hYzgwMjExIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHBvdGVudGlhbCBmYWxsb3V0IHdoZW4gYSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIGlzIHVuaW5pdGlhbGl6ZWQgb3IgdW5yZWdpc3RlcmVkLCBidXQgd2l0aG91dCBgbWFjODAyMTFgIGV4cGxpY2l0bHkgY2FsbGluZyBgaWVlZTgwMjExX2lmX3JlbW92ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhhbWluaW5nIHRoZSBgaWVlZTgwMjExX3VuaW5pdGAgZnVuY3Rpb24uIEJlZm9yZSB0aGUgcmVjZW50IHBhdGNoLCB0aGlzIGZ1bmN0aW9uIHdhcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNhbGxpbmcgYGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YWAuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAuIFRoaXMgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBhIHN1Yi1pbnRlcmZhY2UgZGF0YSBzdHJ1Y3R1cmUgKGBzZGF0YWApIGZyb20gYSBsaW5rZWQgbGlzdCAoYGxvY2FsLVx1MDAzZWludGVyZmFjZXNgKS4gVGhlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IHRoZSBgaWZsaXN0X210eGAgbXV0ZXguIFRoZSBgbGlzdF9kZWxfcmN1YCBjYWxsIGhlcmUgaXMgaW1wb3J0YW50IGZvciB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20sIHdoaWNoIGlzIGludGVyZXN0aW5nIHRvIGNvbnNpZGVyIGZvciBjb25jdXJyZW5jeSBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5Ob3csIGFmdGVyIHRoZSBwYXRjaCwgYGllZWU4MDIxMV91bmluaXRgIG5vdyBjYWxscyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYW5kICp0aGVuKiBjYWxscyBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhYC4gU28gdGhlIG9yZGVyIGlzIGNsZWFybHkgcmVsZXZhbnQ6IFVubGlzdCAqdGhlbiogdGVhcmRvd24uXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNsb3NlbHkgaW5zcGVjdCBsaW5lcyAxNTAtMjUwIGFuZCBsaW5lcyAxODgwLTE5MTAgd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgaG93IHRob3NlIHBhcnRzIHRpZSBpbnRvIHRoaXMgZmxvdywgYW5kIHdoYXQgb3RoZXIgYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQgZHVyaW5nIGRldmljZSB1bmluaXRpYWxpemF0aW9uLiBJJ2xsIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIG90aGVyIHN1YnRsZSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHRoZSBub3JtYWwgcmVtb3ZhbCBwcm9jZWR1cmUgaXNuJ3QgZm9sbG93ZWQuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIHdoYXQgaGFwcGVucyBpZiB0aGUgZHJpdmVyIG9yIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSB1bmxpc3RlZCBvciB0b3JuLWRvd24gc3ViLWludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDoyNS43MDc5OTMwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4gMTU4OlxcdHtcXG4gMTU5OlxcdFxcdGludCBlcnI7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbiAxNjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuIDE2NTpcXHRcXHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cXHUwMDNlbmV0ZGV2LCBuZXQsIFxcXCJ3bGFuJWRcXFwiKTtcXG4gMTY2OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTY5OlxcdH1cXG4gMTcwOlxcdFxcbiAxNzE6XFx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXFxuIDE3MzpcXHR7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpvbGRfbmV0ID0gd2lwaHlfbmV0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDE3NTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xcbiAxNzY6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4gMTc5OlxcdFxcdFxcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIWVycilcXG4gMTgxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxODI6XFx0XFx0XFx0aWYgKCFmb3JjZSlcXG4gMTgzOlxcdFxcdFxcdFxcdGdvdG8gdW5kbztcXG4gMTg0OlxcdFxcdFxcdC8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi9cXG4gMTg1OlxcdFxcdFxcdGRldl9jbG9zZSh3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiAxODY6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpXFxuIDE4NzpcXHRcXHRcXHRcXHRjZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7XFxuIDE4ODpcXHRcXHRcXHRlcnIgPSAwO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRzY29wZWRfZ3VhcmQod2lwaHksIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSkge1xcbiAxOTI6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuIDE5MzpcXHRcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4gMTk0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdFxcdHdpcGh5X25ldF9zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBuZXQpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRcXHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXFxuIDIwNDpcXHRcXHRcXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYsXFxuIDIwNTpcXHRcXHRcXHRcXHRcXHQgICAgZGV2X25hbWUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LmRldikpO1xcbiAyMDY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhZm9yY2UpXFxuIDIwNzpcXHRcXHRcXHRcXHR3aXBoeV9uZXRfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgb2xkX25ldCk7XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbiAyMTI6XFx0XFx0XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjE0OlxcdFxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXFxuIDIxNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbiAyMTY6XFx0XFx0XFx0fVxcbiAyMTc6XFx0XFx0fVxcbiAyMTg6XFx0XFxuIDIxOTpcXHRcXHRpZiAoIWVyciB8fCBmb3JjZSlcXG4gMjIwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xcbiAyMjM6XFx0XFx0d2RldiA9IGxpc3RfZW50cnkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XFxuIDIyNDpcXHR1bmRvOlxcbiAyMjU6XFx0XFx0LypcXG4gMjI2OlxcdFxcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxcbiAyMjc6XFx0XFx0ICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuIDIyODpcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KVxcbiAyMzE6XFx0XFx0XFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHJldHVybiBlcnI7XFxuIDIzNDpcXHR9XFxuIDIzNTpcXHRcXG4gMjM2OlxcdGludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAyMzc6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXFxuIDIzODpcXHR7XFxuIDIzOTpcXHRcXHRpZiAoIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxcbiAyNDA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XFxuIDI0MzpcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRhdGE7XFxuIDI0ODpcXHRcXG4gMjQ5OlxcdFxcdGd1YXJkKHdpcGh5KShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDoyNS43MDgxMzEzOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU1ODM1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAuIFRoaXMgZnVuY3Rpb24uLi4gaXQncyBjcnVjaWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBjbGVhbmluZyB1cCB0aGUgcGVyLW5ldCBkZXZpY2Ugc3RhdGUgd2l0aGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZGV2aWNlIHJlbW92YWwsIG1vZHVsZSB1bmxvYWQsIGFuZCBnZW5lcmFsbHksIGdyYWNlZnVsIHNodXRkb3duIG9mIG5ldHdvcmsgbmFtZXNwYWNlcy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY2xlYW5lZCB1cCBoZXJlPyBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBvciBhcmUgdGhlcmUgbW9yZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIG91dHN0YW5kaW5nIHdvcmtxdWV1ZXMgb3IgZGVmZXJyZWQgZXZlbnRzIHJlbGF0ZWQgdG8gd2lyZWxlc3Mgb3BlcmF0aW9ucz8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSB0ZWFyZG93biB0aGF0IG5lZWQgY2xvc2VyIHNjcnV0aW55PyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBjZmc4MDIxMSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBldmVudCBoYW5kbGluZyB3aXRoaW4gdGhhdCBuZXR3b3JrIG5hbWVzcGFjZSBjb250ZXh0LiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2UgZnJlZWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBkb3VibGUtZnJlZXMgbHVya2luZyBoZXJlPyBJJ20gaG9waW5nIHRoZSBjb2RlIGlzIGNsZWFuLCBidXQgeW91IG5ldmVyIGtub3cuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIGEgcm9idXN0IGFuZCBzdGFibGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjI3Ljk2Mzk2ODczNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODg1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODg1OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyID0ge1xcbjE4ODY6XFx0XFx0Lm5vdGlmaWVyX2NhbGwgPSBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbCxcXG4xODg3OlxcdH07XFxuMTg4ODpcXHRcXG4xODg5OlxcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbjE4OTA6XFx0e1xcbjE4OTE6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbjE4OTI6XFx0XFxuMTg5MzpcXHRcXHRydG5sX2xvY2soKTtcXG4xODk0OlxcdFxcdGZvcl9lYWNoX3JkZXYocmRldikge1xcbjE4OTU6XFx0XFx0XFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSwgbmV0KSlcXG4xODk2OlxcdFxcdFxcdFxcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XFxuMTg5NzpcXHRcXHR9XFxuMTg5ODpcXHRcXHRydG5sX3VubG9jaygpO1xcbjE4OTk6XFx0fVxcbjE5MDA6XFx0XFxuMTkwMTpcXHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGNmZzgwMjExX3Blcm5ldF9vcHMgPSB7XFxuMTkwMjpcXHRcXHQuZXhpdCA9IGNmZzgwMjExX3Blcm5ldF9leGl0LFxcbjE5MDM6XFx0fTtcXG4xOTA0OlxcdFxcbjE5MDU6XFx0dm9pZCB3aXBoeV93b3JrX3F1ZXVlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbjE5MDY6XFx0e1xcbjE5MDc6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7XFxuMTkwODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHR0cmFjZV93aXBoeV93b3JrX3F1ZXVlKHdpcGh5LCB3b3JrKTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5X3dvcmtfbG9jaywgZmxhZ3MpO1xcbjE5MTM6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNndvcmstXFx1MDAzZWVudHJ5KSlcXG4xOTE0OlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNndvcmstXFx1MDAzZWVudHJ5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHlfd29ya19saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MjcuOTY0MTA3MTM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNzcxMjMwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBMaW51eCBXaXJlbGVzcyBOZXR3b3JrIE5hbWVzcGFjZSBUcmFuc2l0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgbmFtZXNwYWNlIHRyYW5zaXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbXMsIGBjZmc4MDIxMWAgYW5kIGBtYWM4MDIxMWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBzdWJzeXN0ZW1zIGFyZSByZWFjaGFibGUgYW5kIGhvdyBuYW1lc3BhY2Ugc3dpdGNoaW5nIGlzIGhhbmRsZWQuXG5cblJpZ2h0LCBJJ3ZlIGdvdCBpdC4gSSBjYW4gY3JlYXRlIGFuZCBtYW5hZ2UgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzLCBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZpcnRfd2lmaWAsIHVzaW5nIG5ldGxpbmsgKGBubDgwMjExYCkuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB0cmlnZ2VyIG5hbWVzcGFjZSBzd2l0Y2hpbmcuIEkgcmVtZW1iZXIgdGhhdCBuZXRsaW5rIG9mZmVycyBhIGZldyBtZXRob2RzLCBsaWtlIGBOTDgwMjExX0NNRF9TRVRfV0lQSFlgIGluIGNvbmp1bmN0aW9uIHdpdGggYE5MODAyMTFfQVRUUl9ORVROU19QSURgIG9yIGBOTDgwMjExX0FUVFJfTkVUTlNfRkRgLiBUaGF0IHNlZW1zIHByZXR0eSBzdGFuZGFyZC4gQWxzbywgbmFtZXNwYWNlIGV4aXQgdXNpbmcgYGNmZzgwMjExX3Blcm5ldF9leGl0YC5cblxuSSBhbHNvIHJlY2FsbCB0aGF0IGR1cmluZyBpbnRlcmZhY2UgdGVhcmRvd24gb3IgbmFtZXNwYWNlIGRlc3RydWN0aW9uLCB0aGluZ3MgbGlrZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBhcmUgZXhlY3V0ZWQsIHdoaWNoIGFyZSBjcnVjaWFsIGNsZWFudXAgb3BlcmF0aW9ucy5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IHdoZXJlIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBJIG5lZWQgdG8gc2VlIHRoZSBwcmFjdGljYWwgaW1wbGVtZW50YXRpb24uIExldCBtZSBkaWcgaW50byB0aGUgY29kZSB1bmRlciBgbmV0L3dpcmVsZXNzL2AgYW5kIGVsc2V3aGVyZS4gVGhhdCdsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM2OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjMzLjM0MTIzMzM5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI1MTc3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuYz0xNTY9c3RhdGljIGludCBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzAtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzE6c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzItXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMzUtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMzY6aW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMzctXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0MS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI0MjpcXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDMtfVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xODg5PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xODk1LVxcdFxcdGlmIChuZXRfZXEod2lwaHlfbmV0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSksIG5ldCkpXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxODk2OlxcdFxcdFxcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xODk3LVxcdH1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9MjQzPXN0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtMjQ0LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6MjQ1OmludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmgtMjQ2LVxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQzNTc9c3RhdGljIGludCBubDgwMjExX3dpcGh5X25ldG5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0Mzk0LVxcdGlmICghbmV0X2VxKHdpcGh5X25ldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpLCBuZXQpKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQzOTU6XFx0XFx0ZXJyID0gY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIG5ldCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDM5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MzMuNDEzNzU3Njg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMzEyMDg3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG1hYzgwMjExIEludGVyZmFjZSBVbmluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSAqZGVmaW5pdGVseSogcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuYGllZWU4MDIxMV91bmluaXRgIGlzIGVzc2VudGlhbGx5IHRoZSBgbmRvX3VuaW5pdGAgY2FsbGJhY2sgd2l0aGluIGBuZXRfZGV2aWNlX29wc2AsIHNwZWNpZmljYWxseSBkZWZpbmVkIHdpdGhpbiBgaWVlZTgwMjExX2RhdGFpZl9vcHNgLiBUaGlzIG1lYW5zIGl0IGdldHMgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQsIHRyaWdnZXJlZCBieSBhY3Rpb25zIGxpa2UgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlYCBvciBgcm9sbGJhY2tfcmVnaXN0ZXJlZF9tYW55YC4gV2l0aCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24sIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBjcnVjaWFsIGJlY2F1c2UgaXQgcmVtb3ZlcyB0aGUgYHNkYXRhYCBzdHJ1Y3R1cmUgZnJvbSBgbG9jYWwtXHUwMDNlaW50ZXJmYWNlc2Agd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCAqd2l0aG91dCogYSBwcmlvciBgaWVlZTgwMjExX2lmX3JlbW92ZWAgY2FsbC4gVGhpcyBzY2VuYXJpbyBhcmlzZXMsIGZvciBpbnN0YW5jZSwgd2hlbiBgY2ZnODAyMTFgIGZhaWxzIHRvIG1vdmUgdGhlIGRldmljZSBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0J3MgYmVpbmcgZGVzdHJveWVkLCBvciBkdXJpbmcgZm9yY2VkIHVucmVnaXN0ZXJzIChlLmcuLCB3aGVuIHVucmVnaXN0ZXJpbmcgYSB3aXJlbGVzcyBkZXZpY2Ugb3IgbmV0IGRldmljZSkgYW5kIG5hbWVzcGFjZSBpc3N1ZXMuXG5cblRoZSBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIGZ1bmN0aW9uIG5vdyBoYXMgYSBgZm9yY2VgIHBhcmFtZXRlci4gV2hlbiBzZXQgdG8gdHJ1ZSwgaXQgZm9yY2VzIHRoZSB1bnJlZ2lzdHJhdGlvbiBvZiB3aXJlbGVzcyBkZXZpY2VzIHRoYXQgZmFpbCB0byBzd2l0Y2ggbmFtZXNwYWNlcy4gVGhpcyBzZWVtcyBkaXJlY3RseSByZWxhdGVkIHRvIG5ldHdvcmsgbmFtZXNwYWNlIGV4aXQsIHdoaWNoIGlzIGFub3RoZXIgYXJlYSBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gcmVjZW50bHkuXG5cbkdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGludm9sdmVkIGluIGNvcmUgd2lyZWxlc3MgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCB0b3VjaGluZyBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAgYW5kIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSBoaWdoIHByaW9yaXR5LiBUaGUgY29kZSBwYXRoIGFwcGVhcnMgcmVhY2hhYmxlLCBhbmQgY29tcGxleCBlbm91Z2ggdG8gd2FycmFudCBleHRlbnNpdmUgZnV6emluZy4gYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JJ2xsIG5vdyBjYXJlZnVsbHkgdmVyaWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHByb3Blcmx5IHNldCB1cC4gSSdsbCBuZWVkIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCB0byBiZSBlbmFibGVkLCBhbmQgSSdsbCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgd2l0aGluIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2MjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDAuNzQ0OTY5NjQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkyNzQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjQxLjAxNDI1MjI5M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE1Mjk1Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipDaGVja2luZyBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZvciBgQ0ZHODAyMTFgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aWdodGx5IGBDRkc4MDIxMWAgaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbS4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3aXJlbGVzcywgaW5jbHVkaW5nIGxpa2VseSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ0ZHODAyMTFgLCBzaG91bGQgYmUgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIHJlbHkgb24sIG9yIGFyZSBhY3RpdmF0ZWQgYnksIGBDRkc4MDIxMWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaG93IGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgd291bGQgYWZmZWN0IHRoZSBvdmVyYWxsIHdpcmVsZXNzIGZ1bmN0aW9uYWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIG1hcCBvdXQgdGhlIFwiaW5mbHVlbmNlXCIgb2YgdGhpcyBjb3JlIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo0My40Mjk1NTA0MTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXSVJFTEVTU19FWFRcXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFdFWFRfQ09SRVxcbiAgIDY6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgV0VYVF9QUk9DXFxuICAxMDpcXHRcXHRkZWZfYm9vbCB5XFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gV0VYVF9DT1JFXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBXRVhUX1BSSVZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIENGRzgwMjExXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gIDIwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMjI6XFx0XFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXFxuICAyMzpcXHRcXHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4ndFxcbiAgMjQ6XFx0XFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXFxuICAyODpcXHRcXHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0aWYgQ0ZHODAyMTFcXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIm5sODAyMTEgdGVzdG1vZGUgY29tbWFuZFxcXCJcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDMuNDI5NjMyMDExWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDk0NjIxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jaWVzIC0gSW52ZXN0aWdhdGluZyB0aGUgTmV0d29yayBLZXJuZWwgTW9kdWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRyaXZpbmcgY2VydGFpbiBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IGl0cyBkZXBlbmRlbmNpZXMsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHdoaWNoIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIG9wdGlvbnMgYXJlIHJlcXVpcmVkIG9yIGltcGFjdGVkIGJ5IGl0cyBjb25maWd1cmF0aW9uLiBJdCdzIGNydWNpYWwgZm9yIG1lIHRvIGhhdmUgYSBzb2xpZCBncmFzcCBvbiB0aGVzZSByZWxhdGlvbnNoaXBzOyB0aGlzIHdpbGwgZW5hYmxlIG1lIHRvIHRyYWNrIGRvd24gdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaXNzdWUgYW5kIHRvIHByb3ZpZGUgYW4gZWZmZWN0aXZlIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODI0OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDUuNTM5MDk2NDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo0NS41MzkxODQwNDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM0OTE1OTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBOYW1lc3BhY2UgU3dpdGNoaW5nIGluIFdpcmVsZXNzIFN1YnN5c3RlbXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgaW1wbGVtZW50YXRpb24gZm9yIHdpcmVsZXNzLCBmb2N1c2luZyBvbiB0aGUgY29yZSBjb25maWd1cmF0aW9uczogYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYCwgYWxvbmdzaWRlIHRoZSBzdGFuZGFyZCBgTkVUYCBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdpbmcuIExldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgYWZmZWN0ZWQgYnkgdGhpcy5cblxuSW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgSSBzZWUgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGFuZCBgaWVlZTgwMjExX3VuaW5pdGAgYXJlIGJlaW5nIHRvdWNoZWQuIFRoZW4sIG92ZXIgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBJJ3ZlIGdvdCBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNgIGFuZCBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIOKAkyBib3RoIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIGRpc3RpbmN0IG9yIGlubGluZWQg4oCTIGFsb25nIHdpdGggdGhlIGdsb2JhbGx5IGV4cG9ydGVkIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgLCBhbmQgZmluYWxseSwgdGhlIHN0YXRpYyBwZXJuZXQgZXhpdCBjYWxsYmFjayBgY2ZnODAyMTFfcGVybmV0X2V4aXRgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgZGlzdGluY3RuZXNzIG9yIGlubGluaW5nIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEknbGwgZmxhZyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAsIGBpZWVlODAyMTFfdW5pbml0YCwgYGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zYCwgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zYCwgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AsIGFuZCBgY2ZnODAyMTFfcGVybmV0X2V4aXRgIGZvciB0aGF0IGNoZWNrLlxuXG5BbHNvLCBpdCdzIGNydWNpYWwgdG8gZmluZCB0aGUgZW50cnkgcG9pbnQsIHRoZSBjYWxsZXIuIEkgc2VlIGBubDgwMjExX3dpcGh5X25ldG5zYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgYXMgYSBkaXJlY3QgbmV0bGluayBoYW5kbGVyIGNhbGxpbmcgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AuIEkgd2lsbCBiZSBjaGVja2luZyBpbnRvIGBubDgwMjExX3dpcGh5X25ldG5zYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo0OS44ODgzNDc3NTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTg4ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfd2lwaHlfbmV0bnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0MzM0PXN0YXRpYyBpbnQgbmw4MDIxMV9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0MzU2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQzNTc6c3RhdGljIGludCBubDgwMjExX3dpcGh5X25ldG5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDM1OC17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNjYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAwNjc6XFx0XFx0LmRvaXQgPSBubDgwMjExX3dpcGh5X25ldG5zLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNjgtXFx0XFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDkuOTQ3NTM4NTE0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMDE0MjUzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldE5TIFdpcmVsZXNzIEludGVyZmFjZSBTd2l0Y2hpbmcqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHZpZXcgaGVyZS4gSSdtIHNlZWluZyBhIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHdpcmVsZXNzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZy4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgY2ZnODAyMTFfc3dpdGNoX25ldG5zYFxuKiAgIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2BcbiogICBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNgXG4qICAgYGNmZzgwMjExX3Blcm5ldF9leGl0YFxuKiAgIGBubDgwMjExX3dpcGh5X25ldG5zYFxuKiAgIGBpZWVlODAyMTFfdW5pbml0YFxuKiAgIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYFxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIOKAkyBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgb3IgY29uZmlndXJhdGlvbnMsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIGBDRkc4MDIxMWAgb3IgYE1BQzgwMjExYCBtb3JlIGdlbmVyYWxseS4gVGhlbiwgbGV0J3MgY29uZmlybSB0aGUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS5cblxuWXVwLCB0aGlzIGxvb2tzIHdvcnRod2hpbGUuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwgd2lyZWxlc3MgbmV0bnMgc3dpdGNoaW5nIGxvZ2ljIHdpdGhpbiBgY2ZnODAyMTFgIGFuZCBhbHNvIGRlYWxpbmcgd2l0aCBpbnRlcmZhY2UgdW5saXN0aW5nIGluIGBtYWM4MDIxMWAsIGFsbCBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb24gb3IgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uLiBUaGVzZSBwYXRocyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcyBvciB3aGVuIHRlYXJpbmcgZG93biBuZXR3b3JrIG5hbWVzcGFjZXMsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCdzIGFsbCBjbGVhciwgdGhlIGFuYWx5c2lzIHNlZW1zIHNvbGlkLiBPa2F5LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4ODksIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjU2LjI0ODk2NzQ2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTEzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfbmV0bnNcIixcbiAgICBcIl9fY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc1wiLFxuICAgIFwiY2ZnODAyMTFfcGVybmV0X2V4aXRcIixcbiAgICBcIm5sODAyMTFfd2lwaHlfbmV0bnNcIixcbiAgICBcImllZWU4MDIxMV91bmluaXRcIixcbiAgICBcImllZWU4MDIxMV91bmxpc3Rfc2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi91bmxpc3RpbmcgbG9naWMgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgaGFuZGxpbmcgb2YgaW50ZXJmYWNlcyBmYWlsaW5nIHRvIHN3aXRjaCBuYW1lc3BhY2VzIG9uIG5ldG5zIGV4aXQgYW5kIGVuc3VyZXMgbWFjODAyMTEgZHJvcHMgbmV0ZGV2cyBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCB1cG9uIHVuaW5pdC4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIHdpdGggdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChlLmcuLCBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gICAgXCJfX2NmZzgwMjExX3N3aXRjaF9uZXRuc1wiLFxuICAgIFwiY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNcIixcbiAgICBcImNmZzgwMjExX3Blcm5ldF9leGl0XCIsXG4gICAgXCJubDgwMjExX3dpcGh5X25ldG5zXCIsXG4gICAgXCJpZWVlODAyMTFfdW5pbml0XCIsXG4gICAgXCJpZWVlODAyMTFfdW5saXN0X3NkYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBuYW1lc3BhY2Ugc3dpdGNoaW5nIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24vdW5saXN0aW5nIGxvZ2ljIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIGhhbmRsaW5nIG9mIGludGVyZmFjZXMgZmFpbGluZyB0byBzd2l0Y2ggbmFtZXNwYWNlcyBvbiBuZXRucyBleGl0IGFuZCBlbnN1cmVzIG1hYzgwMjExIGRyb3BzIG5ldGRldnMgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgdXBvbiB1bmluaXQuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93biB3aXRoIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiwgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo1Ni4zMzI0ODkxNTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzIwMDUyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NTYuMzMzMDY1OTAzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYzMTk0Njk5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjNzZhMDRkNDUzNTk1ZTI1N2RiMjM2Mjg0ZWM5ZWM4MzdkODc1NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjMzOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuaW5kZXggZmRhYzcyOWNhNTgwZC4uNDkxYmJiNjk1ZDE3YiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuQEAgLTkyNCw5ICs5MjQsMzMgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFRoZSBuZXRkZXYgY2FuIGJlIHVucmVnaXN0ZXJlZCB3aXRob3V0IG1hYzgwMjExIGRvaW5nIGl0LCBlLmcuIGJ5IHRoZSBuZXRkZXZcbisgKiBjb3JlIHdoZW4gY2ZnODAyMTEgY291bGRuJ3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0J3MgYmVpbmdcbisgKiBkZXN0cm95ZWQuIERyb3AgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgZWl0aGVyIHdheS5cbisgKi9cbitzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5saXN0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICppdGVyO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuK1x0XHRpZiAoaXRlciAhPSBzZGF0YSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xuK1x0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCk7XG4rXHRcdHJldHVybjtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpKTtcbitcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbitcbitcdGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc2RhdGEpO1xuK1x0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjMxZDBmNzA4NjcwMTIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMTUzLDY4ICsxNTMsOTMgQEAgaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcbiB7XG4tXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2O1xuLVx0aW50IGVyciA9IDA7XG4rXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19ORVROU19PSykpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4rXHRcdHJldHVybiAwO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuK1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4rXHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cdTAwM2VuZXRkZXYsIG5ldCwgXCJ3bGFuJWRcIik7XG4rXHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4re1xuK1x0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbitcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4rXHRcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XG4rXHRcdGlmICghZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcbi1cdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwid2xhbiVkXCIpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuK1x0XHRpZiAoIWZvcmNlKVxuK1x0XHRcdGdvdG8gdW5kbztcbitcdFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xuK1x0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpXG4rXHRcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHdkZXYpO1xuK1x0XHRlcnIgPSAwO1xuIFx0fVxuIFxuLVx0aWYgKGVycikge1xuLVx0XHQvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovXG4tXHRcdG5ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCxcbi1cdFx0XHRcdFx0XHQgICAgIGxpc3QpIHtcbitcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeSkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuLVx0XHRcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVx1MDAzZW5ldGRldiwgbmV0LFxuLVx0XHRcdFx0XHRcdFx0XCJ3bGFuJWRcIik7XG4tXHRcdFx0V0FSTl9PTihlcnIpO1xuLVx0XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG4rXHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcbitcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiBcdFx0fVxuIFxuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuIFxuLVx0Z3VhcmQod2lwaHkpKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuK1x0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpO1xuLVx0fVxuK1x0XHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXG4rXHRcdGVyciA9IGRldmljZV9yZW5hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYsXG4rXHRcdFx0XHQgICAgZGV2X25hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYpKTtcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIWZvcmNlKVxuK1x0XHRcdHdpcGh5X25ldF9zZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgb2xkX25ldCk7XG4gXG4tXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuK1x0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xuIFxuLVx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBuZXQpO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4rXHRcdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG4rXHRcdFx0XHRcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4rXHRcdH1cbitcdH1cbiBcbi1cdGVyciA9IGRldmljZV9yZW5hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYsIGRldl9uYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2KSk7XG4tXHRXQVJOX09OKGVycik7XG4rXHRpZiAoIWVyciB8fCBmb3JjZSlcbitcdFx0cmV0dXJuIGVycjtcbiBcbi1cdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4rXHQvKiBzZXQgdG8gdGhlIGxhc3Qgb25lIHRvIHVuZG8gYWxsIG9mIHRoZW0gKi9cbitcdHdkZXYgPSBsaXN0X2VudHJ5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCB0eXBlb2YoKndkZXYpLCBsaXN0KTtcbit1bmRvOlxuK1x0LypcbitcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxuK1x0ICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXG4rXHQgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCxcbitcdFx0XHRcdFx0ICAgICBsaXN0KVxuK1x0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG9sZF9uZXQpKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4tXHR9XG4rXHRyZXR1cm4gZXJyO1xuK31cbiBcbi1cdHJldHVybiAwO1xuK2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcbkBAIC0xODY4LDcgKzE4OTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGNmZzgwMjExX3Blcm5ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJ0bmxfbG9jaygpO1xuIFx0Zm9yX2VhY2hfcmRldihyZGV2KSB7XG4gXHRcdGlmIChuZXRfZXEod2lwaHlfbmV0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpLCBuZXQpKVxuLVx0XHRcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIFx1MDAyNmluaXRfbmV0KSk7XG4rXHRcdFx0V0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCwgdHJ1ZSkpO1xuIFx0fVxuIFx0cnRubF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo1Ni4zMzMwNjcyMzNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNjcxMTcxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIE5lZWRzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGFza2VkIHRvIGRpZyBpbnRvIHRoaXMga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gRmlyc3QsIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHNjb3BlIG9mIHRoZSByZXF1ZXN0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBkZWZlbnNpdmUgc2VjdXJpdHkvY29kZSBxdWFsaXR5IHRhc2suIE5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFdlJ3JlIGxvb2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFc3NlbnRpYWxseSwgd2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIGJ1Z3MuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L21hYzgwMjExL2lmYWNlLmNgIGFuZCBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIEluIGBpZmFjZS5jYCwgdGhlIGtleSBhZGRpdGlvbiBpcyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCwgcmVtb3ZlcyBhbiBlbnRyeSBpZiBpdCBmaW5kcyBhIG1hdGNoLCBhbGwgd2hpbGUgcHJvdGVjdGVkIGJ5IGEgbXV0ZXguIFRoZW4sIGl0J3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdGAgYmVmb3JlIGBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGFgLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9ucywgYnV0IGF0IGEgZ2xhbmNlLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBqdXN0IGZyb20gbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gY2FsbHMuXG5cblRoZW4gdGhlcmUncyB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGNoYW5nZXMuIFdlJ3JlIGxvb2tpbmcgYXQgYSByZWZhY3RvcmluZyBvZiBgY2ZnODAyMTFfc3dpdGNoX25ldG5zYC4gSXQncyBzcGxpdCBpbnRvIGBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc2AgYW5kIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2AuIElmIGBmb3JjZWAgaXMgdHJ1ZSBhbmQgc3dpdGNoaW5nIHRoZSBuZXRucyBvZiBhIHdkZXYgZmFpbHMsIHRoZSBwYXRjaCBjYWxscyBgZGV2X2Nsb3NlYCBhbmQgYGNmZzgwMjExX3VucmVnaXN0ZXJfd2RldmAuIEkgY2FuIHNlZSB0aGVyZSBhcmUgY2hhbmdlcyB0byB3aXBoeSBsb2NrL2d1YXJkcyBhbmQgbm90aWZpY2F0aW9ucyB0b28uIEkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgdG8gZGF0YSBpZiBhIGB3ZGV2YCBuZXRucyBzd2l0Y2ggZmFpbHMuIERvZXMgaXQgbGVhaz8gSXMgZGF0YSBmcmVlZCBwcm9wZXJseT8gSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHVzZT9cblxuVGhlIHJlYWwgY3J1eCBvZiB0aGlzIGFuYWx5c2lzIGlzIGRpZ2dpbmcgaW4gdG8gaWRlbnRpZnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLiBJIG5lZWQgdG8gdXRpbGl6ZSBteSBjb2Rlc2VhcmNoIGFuZCBmaWxlIHJlYWRpbmcgdG9vbHMgdG8gdGhvcm91Z2hseSBpbnNwZWN0IHRoZXNlIHNlY3Rpb25zIG9mIHRoZSBjb2RlIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIFRoYXQgd2lsbCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgZ29vZCBkZXRlcm1pbmF0aW9uIG9uIEtNU0FOIGZ1enppbmcgbmVlZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNToxMC40MDAxODgyMzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTgzODQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfdW5pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuYz05MzI9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0Ny1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5NDg6c3RhdGljIHZvaWQgaWVlZTgwMjExX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0OS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk2Ny1cXHQubmRvX3N0b3BcXHRcXHQ9IGllZWU4MDIxMV9zdG9wLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk2ODpcXHQubmRvX3VuaW5pdFxcdFxcdD0gaWVlZTgwMjExX3VuaW5pdCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NjktXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwMDUtXFx0Lm5kb19zdG9wXFx0XFx0PSBpZWVlODAyMTFfc3RvcCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMDA2OlxcdC5uZG9fdW5pbml0XFx0XFx0PSBpZWVlODAyMTFfdW5pbml0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwMDctXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfODAyM19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDczLVxcdC5uZG9fc3RvcFxcdFxcdD0gaWVlZTgwMjExX3N0b3AsXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA3NDpcXHQubmRvX3VuaW5pdFxcdFxcdD0gaWVlZTgwMjExX3VuaW5pdCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDc1LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzU6MTAuNTIwMDMzNjMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzY3NjM5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBOb3RpZmljYXRpb25zKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgaG93IHdlIGdldCBpbnRlcmZhY2UgYW5kIFdpLUZpIFBIWSB1cGRhdGVzIG91dCB0byB1c2Vyc3BhY2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgYW55IHJlY2VudCBpc3N1ZXMgYXJlIHByb2JhYmx5IGNlbnRlcmVkIGFyb3VuZCBlaXRoZXIgYG5sODAyMTFfbm90aWZ5X2lmYWNlYCBvciBgbmw4MDIxMV9ub3RpZnlfd2lwaHlgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBicm9hZGNhc3RpbmcgY2hhbmdlcyBpbiB0aGUgd2lyZWxlc3MgbmV0d29yayBjb25maWd1cmF0aW9uLiBUaGV5J3JlIG15IHByaW1hcnkgc3VzcGVjdHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkncmUgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgdGhleSBjYXJyeSwgYW5kIHdoYXQgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIG1pZ2h0IGV4aXN0IHdpdGhpbiB0aGVpciBleGVjdXRpb24gcGF0aHMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM1OjEyLjM1NjgwMDA4M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMjM2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9ub3RpZnlfaWZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9MTcxPXN0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxOTU6XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTQ6XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxNS1cXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNDMzPXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ0Mi1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0NDM6XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQ0LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjczPXZvaWQgY2ZnODAyMTFfcmVnaXN0ZXJfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTYtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjk3OlxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTY5OC19XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTUwNTA9c3RhdGljIGludCBubDgwMjExX3NldF9pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTExOS1cXHRpZiAoY2hhbmdlIFxcdTAwMjZcXHUwMDI2ICFlcnIpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MTIwOlxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX1NFVF9JTlRFUkZBQ0UpO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEyMS1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjA2NDY9dm9pZCBubDgwMjExX25vdGlmeV93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjY3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2Njg6dm9pZCBubDgwMjExX25vdGlmeV9pZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY2OS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuaD0zMz12b2lkIG5sODAyMTFfbm90aWZ5X3dpcGh5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oLTM0LVxcdFxcdFxcdCAgZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuaDozNTp2b2lkIG5sODAyMTFfbm90aWZ5X2lmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oLTM2LVxcdFxcdFxcdCAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzU6MTIuNDA3MDI3NDQxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MjYxMzMzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgQ29yZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHdpcmVsZXNzIGNvcmUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBpbnRvIGBuZXQvd2lyZWxlc3MvY29yZS5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDE1MCB0byAyNDAuIFRoYXQgcmVnaW9uIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgaXNzdWUgSSdtIGludmVzdGlnYXRpbmcuIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgcHJvdmlkZSBzb21lIGNsYXJpdHkuIFRpbWUgdG8gZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNToxNC4xMzMxNjI1NjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4gMTU4OlxcdHtcXG4gMTU5OlxcdFxcdGludCBlcnI7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbiAxNjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuIDE2NTpcXHRcXHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cXHUwMDNlbmV0ZGV2LCBuZXQsIFxcXCJ3bGFuJWRcXFwiKTtcXG4gMTY2OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTY5OlxcdH1cXG4gMTcwOlxcdFxcbiAxNzE6XFx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXFxuIDE3MzpcXHR7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpvbGRfbmV0ID0gd2lwaHlfbmV0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDE3NTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xcbiAxNzY6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4gMTc5OlxcdFxcdFxcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIWVycilcXG4gMTgxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxODI6XFx0XFx0XFx0aWYgKCFmb3JjZSlcXG4gMTgzOlxcdFxcdFxcdFxcdGdvdG8gdW5kbztcXG4gMTg0OlxcdFxcdFxcdC8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi9cXG4gMTg1OlxcdFxcdFxcdGRldl9jbG9zZSh3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiAxODY6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpXFxuIDE4NzpcXHRcXHRcXHRcXHRjZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7XFxuIDE4ODpcXHRcXHRcXHRlcnIgPSAwO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRzY29wZWRfZ3VhcmQod2lwaHksIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSkge1xcbiAxOTI6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuIDE5MzpcXHRcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4gMTk0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdFxcdHdpcGh5X25ldF9zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBuZXQpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRcXHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXFxuIDIwNDpcXHRcXHRcXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYsXFxuIDIwNTpcXHRcXHRcXHRcXHRcXHQgICAgZGV2X25hbWUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LmRldikpO1xcbiAyMDY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhZm9yY2UpXFxuIDIwNzpcXHRcXHRcXHRcXHR3aXBoeV9uZXRfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgb2xkX25ldCk7XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbiAyMTI6XFx0XFx0XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjE0OlxcdFxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXFxuIDIxNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbiAyMTY6XFx0XFx0XFx0fVxcbiAyMTc6XFx0XFx0fVxcbiAyMTg6XFx0XFxuIDIxOTpcXHRcXHRpZiAoIWVyciB8fCBmb3JjZSlcXG4gMjIwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xcbiAyMjM6XFx0XFx0d2RldiA9IGxpc3RfZW50cnkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XFxuIDIyNDpcXHR1bmRvOlxcbiAyMjU6XFx0XFx0LypcXG4gMjI2OlxcdFxcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxcbiAyMjc6XFx0XFx0ICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuIDIyODpcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KVxcbiAyMzE6XFx0XFx0XFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHJldHVybiBlcnI7XFxuIDIzNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM1OjE0LjEzMzI5OTYzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTE5MjEyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGluIHRoZXNlIGNoYW5nZXMsIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gcmVmaW5pbmcgaW50ZXJmYWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrIG5hbWVzcGFjZSBoYW5kbGluZyB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGluIGBuZXQvbWFjODAyMTFgIGFuZCBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuXG5cbkZpcnN0LCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCB0aGUgYWRkaXRpb24gb2YgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgdW5pbml0aWFsaXphdGlvbiBwcm9jZXNzIChgaWVlZTgwMjExX3VuaW5pdGAsIGNhbGxlZCBkdXJpbmcgYG5kb191bmluaXRgKSBzZWVtcyB0byBiZSBhYm91dCBlbnN1cmluZyBjbGVhbiBpbnRlcmZhY2UgcmVtb3ZhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyB0aGF0IG1pZ2h0IGZhaWwuIFRoaXMgaXMgYWJvdXQgbGlzdCBtYW5hZ2VtZW50IGZvciB0aGVzZSBpbnRlcmZhY2VzIGFuZCBtYWtpbmcgc3VyZSB3ZSdyZSBoYW5kbGluZyB0aGUgY2xlYW51cCBjb25zaXN0ZW50bHkuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCBvcmRlciBhbmQgaG93IHdlIGRlYWwgd2l0aCB0aGVzZSBzZGF0YSBhbmQgaW50ZXJmYWNlcy5cblxuVGhlbiwgdGhlIHNwbGl0dGluZyBvZiBgY2ZnODAyMTFfc3dpdGNoX25ldG5zYCBpbnRvIGhlbHBlciBmdW5jdGlvbnMgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgIGFuZCBwYXNzaW5nIGBmb3JjZSA9IHRydWVgIGR1cmluZyBwZXJuZXQgZXhpdCBjYXVnaHQgbXkgZXllLiBUaGlzIGxvb2tzIGxpa2Ugcm9idXN0aWZ5aW5nIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2guIElmIGEgd2RldiBjYW4ndCBiZSBtb3ZlZCB0byB0aGUgbmV3IG5ldG5zLCB0aGlzIHdpbGwgY2xvc2UgYW5kIHVucmVnaXN0ZXIgaXQgcmF0aGVyIHRoYW4gbGVhdmluZyBpdCBpbiBhIGJyb2tlbiBzdGF0ZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlJ3Mgc29tZSB1cGRhdGluZyBvZiBsb2NraW5nIGFuZCBub3RpZmljYXRpb24gc2NvcGVzIHdpdGggdGhlIGBzY29wZWRfZ3VhcmRgIG1hY3JvLiBUaGlzIGFsc28gcHJvdmlkZXMgYWRkaXRpb25hbCBzYWZldHkgd2l0aGluIHRoZSBzeXN0ZW0uXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBteSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IEkndmUgY2hlY2tlZCB0aGVzZSBhZ2FpbnN0IHRoZSBrbm93biBtZW1vcnkgc2FmZXR5IGlzc3VlczpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vLCB0aGUgbm90aWZpY2F0aW9ucyBiZWluZyBzZW50ICggYG5sODAyMTFfbm90aWZ5X2lmYWNlYCwgYG5sODAyMTFfbm90aWZ5X3dpcGh5YCkgYXJlIHN0YW5kYXJkIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCB3aXRoIGluaXRpYWxpemVkIGF0dHJpYnV0ZXMuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyoqOiBOb3BlLCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciByZWNlaXZlIGEgdmFsdWUgd2l0aCB0aGUgYXNzaWdubWVudHMgd2l0aGluIGEgbG9vcC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzKio6IE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaW52b2x2ZWQuXG40LiAgKipCb3VuZHMvbGVuZ3RocyoqOiBOb3RoaW5nJ3MgY2hhbmdpbmcgdGhlcmUuXG5cblNpbmNlIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZXNlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBwb3RlbnRpYWwgcmlza3MgYXJlIG1vcmUgcmVsYXRlZCB0byBsb2NraW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQuIExPQ0tERVAgc2hvdWxkIGNhdGNoIGFueSBkZWFkbG9ja3MsIGFuZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyB3aWxsIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gaW5jb3JyZWN0IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZy90cmF2ZXJzYWwgb3JkZXJzLlxuXG5Mb29rcyBsaWtlIHdlJ3JlIGdvb2Qgd2l0aCB0aGVzZSB0b29scy4gTGV0J3MgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzOSwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNToyMi42NTI1MTQ1OTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowpt7xf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 01:32:06 +0000 UTC FinishedAt: 2026-09-06 01:35:24 +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": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211" ], "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": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211" ], "series_id": "bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_switch_netns", "__cfg80211_switch_netns", "cfg80211_switch_wdev_netns", "cfg80211_pernet_exit", "nl80211_wiphy_netns", "ieee80211_uninit", "ieee80211_unlist_sdata" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3Blcm5ldF9leGl0JiMzNDssCiAgICAmIzM0O25sODAyMTFfd2lwaHlfbmV0bnMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdW5saXN0X3NkYXRhJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBmb3Igd2lyZWxlc3MgZGV2aWNlcyAoY2ZnODAyMTEpIGFuZCBoYW5kbGVzIGludGVyZmFjZSB1bmxpc3RpbmcgZHVyaW5nIG5ldGRldiB1bmluaXRpYWxpemF0aW9uIChtYWM4MDIxMSkuIFRoZSBjaGFuZ2VzIGludm9sdmUgbGlzdCBtYW5hZ2VtZW50LCBpbnRlcmZhY2UgdW5yZWdpc3RyYXRpb24gb24gbmV0bnMgbWlncmF0aW9uIGZhaWx1cmUsIGFuZCBsb2NraW5nIGFkanVzdG1lbnRzIChtdXRleCBndWFyZHMpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBidWZmZXIgY29waWVzIHRvL2Zyb20gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMvYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gaW50ZXJmYWNlIGxpZmVjeWNsZSBvciBsaXN0IG1hbmlwdWxhdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSB1bnJlZ2lzdGVyLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjNzZhMDRkNDUzNTk1ZTI1N2RiMjM2Mjg0ZWM5ZWM4MzdkODc1NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjMzOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05MjQsOSAmIzQzOzkyNCwzMyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHR9XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XG4mIzQzOyAqIGNvcmUgd2hlbiBjZmc4MDIxMSBjb3VsZG4mIzM5O3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0JiMzOTtzIGJlaW5nXG4mIzQzOyAqIGRlc3Ryb3llZC4gRHJvcCBpdCBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCBlaXRoZXIgd2F5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAoaXRlciAhPSBzZGF0YSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRndWFyZChtdXRleCkoXHUwMDI2bG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4mIzQzO1x0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcbiYjNDM7XHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuaW5kZXggZDEzMzEwZmVmNjkxYS4uMzFkMGY3MDg2NzAxMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbkBAIC0xNTMsNjggJiM0MzsxNTMsOTMgQEAgaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuJiM0MztzdGF0aWMgaW50IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuIHtcbi1cdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XG4tXHRpbnQgZXJyID0gMDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19ORVROU19PSykpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4mIzQzO1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4mIzQzO1x0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4mIzQzO1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiYjNDM7XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0ZXJyID0gY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2RldiwgbmV0KTtcbiYjNDM7XHRcdGlmICghZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcbi1cdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG4mIzQzO1x0XHRpZiAoIWZvcmNlKVxuJiM0MztcdFx0XHRnb3RvIHVuZG87XG4mIzQzO1x0XHQvKiByZW1vdmUgaW50ZXJmYWNlcyB0aGF0IGZhaWwgdG8gYWxsb3cgd2lwaHkgc3dpdGNoaW5nICovXG4mIzQzO1x0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuJiM0MztcdFx0XHRjZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7XG4mIzQzO1x0XHRlcnIgPSAwO1xuIFx0fVxuIFxuLVx0aWYgKGVycikge1xuLVx0XHQvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovXG4tXHRcdG5ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCxcbi1cdFx0XHRcdFx0XHQgICAgIGxpc3QpIHtcbiYjNDM7XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpIHtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4tXHRcdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsXG4tXHRcdFx0XHRcdFx0XHRcJiMzNDt3bGFuJWRcJiMzNDspO1xuLVx0XHRcdFdBUk5fT04oZXJyKTtcbi1cdFx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuJiM0MztcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiBcdFx0fVxuIFxuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuJiM0MztcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbiBcbi1cdGd1YXJkKHdpcGh5KShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiYjNDM7XHRcdHdpcGh5X25ldF9zZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgbmV0KTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG4tXHR9XG4mIzQzO1x0XHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXG4mIzQzO1x0XHRlcnIgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2LFxuJiM0MztcdFx0XHRcdCAgICBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIWZvcmNlKVxuJiM0MztcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG9sZF9uZXQpO1xuIFxuLVx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbiYjNDM7XHRcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4gXG4tXHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbi1cdGVyciA9IGRldmljZV9yZW5hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYsIGRldl9uYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2KSk7XG4tXHRXQVJOX09OKGVycik7XG4mIzQzO1x0aWYgKCFlcnIgfHwgZm9yY2UpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuIFxuLVx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiYjNDM7XHQvKiBzZXQgdG8gdGhlIGxhc3Qgb25lIHRvIHVuZG8gYWxsIG9mIHRoZW0gKi9cbiYjNDM7XHR3ZGV2ID0gbGlzdF9lbnRyeShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XG4mIzQzO3VuZG86XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZlIGJhY2sgZXZlcnl0aGluZywgaWYgdGhpcyBmYWlscyBhZ2FpbiAoYWxsb2NhdGlvbiBmYWlsdXJlcylcbiYjNDM7XHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGxpc3QpXG4mIzQzO1x0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG9sZF9uZXQpKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4tXHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuJiM0MztcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcbkBAIC0xODY4LDcgJiM0MzsxODkzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRydG5sX2xvY2soKTtcbiBcdGZvcl9lYWNoX3JkZXYocmRldikge1xuIFx0XHRpZiAobmV0X2VxKHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSwgbmV0KSlcbi1cdFx0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCkpO1xuJiM0MztcdFx0XHRXQVJOX09OKF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XG4gXHR9XG4gXHRydG5sX3VubG9jaygpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wZXJuZXRfZXhpdCYjMzQ7LAogICAgJiMzNDtubDgwMjExX3dpcGh5X25ldG5zJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV91bmluaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VubGlzdF9zZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi91bmxpc3RpbmcgbG9naWMgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgaGFuZGxpbmcgb2YgaW50ZXJmYWNlcyBmYWlsaW5nIHRvIHN3aXRjaCBuYW1lc3BhY2VzIG9uIG5ldG5zIGV4aXQgYW5kIGVuc3VyZXMgbWFjODAyMTEgZHJvcHMgbmV0ZGV2cyBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCB1cG9uIHVuaW5pdC4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIHdpdGggdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChlLmcuLCBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3Yzc2YTA0ZDQ1MzU5NWUyNTdkYjIzNjI4NGVjOWVjODM3ZDg3NTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMTozMzo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggZmRhYzcyOWNhNTgwZC4uNDkxYmJiNjk1ZDE3YiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTkyNCw5ICYjNDM7OTI0LDMzIEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBuZXRkZXYgY2FuIGJlIHVucmVnaXN0ZXJlZCB3aXRob3V0IG1hYzgwMjExIGRvaW5nIGl0LCBlLmcuIGJ5IHRoZSBuZXRkZXYKJiM0MzsgKiBjb3JlIHdoZW4gY2ZnODAyMTEgY291bGRuJiMzOTt0IG1vdmUgaXQgb3V0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UgdGhhdCYjMzk7cyBiZWluZwomIzQzOyAqIGRlc3Ryb3llZC4gRHJvcCBpdCBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCBlaXRoZXIgd2F5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmYW1wO2xvY2FsLSZndDtpbnRlcmZhY2VzLCBsaXN0KSB7CiYjNDM7CQlpZiAoaXRlciAhPSBzZGF0YSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWd1YXJkKG11dGV4KSgmYW1wO2xvY2FsLSZndDtpZmxpc3RfbXR4KTsKJiM0MzsJCWxpc3RfZGVsX3JjdSgmYW1wO3NkYXRhLSZndDtsaXN0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKJiM0MzsKJiM0MzsJaWVlZTgwMjExX3VubGlzdF9zZGF0YShzZGF0YSk7CiYjNDM7CWllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggZDEzMzEwZmVmNjkxYS4uMzFkMGY3MDg2NzAxMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xNTMsNjggJiM0MzsxNTMsOTMgQEAgaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJldHVybiAwOwogfQogCi1pbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCSAgc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldCAqbmV0KQogewotCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7Ci0JaW50IGVyciA9IDA7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoIShyZGV2LSZndDt3aXBoeS5mbGFncyAmYW1wOyBXSVBIWV9GTEFHX05FVE5TX09LKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAoIXdkZXYtJmd0O25ldGRldikKJiM0MzsJCXJldHVybiAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXdkZXYtJmd0O25ldGRldikKJiM0MzsJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSBmYWxzZTsKJiM0MzsJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtJmd0O25ldGRldiwgbmV0LCAmIzM0O3dsYW4lZCYjMzQ7KTsKJiM0MzsJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldCgmYW1wO3JkZXYtJmd0O3dpcGh5KTsKJiM0MzsJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgKnRtcDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiYjNDM7CQllcnIgPSBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBuZXQpOwomIzQzOwkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKLQkJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSBmYWxzZTsKLQkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtJmd0O25ldGRldiwgbmV0LCAmIzM0O3dsYW4lZCYjMzQ7KTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCQl3ZGV2LSZndDtuZXRkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiYjNDM7CQlpZiAoIWZvcmNlKQomIzQzOwkJCWdvdG8gdW5kbzsKJiM0MzsJCS8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi8KJiM0MzsJCWRldl9jbG9zZSh3ZGV2LSZndDtuZXRkZXYpOwomIzQzOwkJc2NvcGVkX2d1YXJkKHdpcGh5LCAmYW1wO3JkZXYtJmd0O3dpcGh5KQomIzQzOwkJCWNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldih3ZGV2KTsKJiM0MzsJCWVyciA9IDA7CiAJfQogCi0JaWYgKGVycikgewotCQkvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovCi0JCW5ldCA9IHdpcGh5X25ldCgmYW1wO3JkZXYtJmd0O3dpcGh5KTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwKLQkJCQkJCSAgICAgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsCi0JCQkJCQkgICAgIGxpc3QpIHsKJiM0MzsJc2NvcGVkX2d1YXJkKHdpcGh5LCAmYW1wO3JkZXYtJmd0O3dpcGh5KSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiAJCQlpZiAoIXdkZXYtJmd0O25ldGRldikKIAkJCQljb250aW51ZTsKLQkJCXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7Ci0JCQllcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi0mZ3Q7bmV0ZGV2LCBuZXQsCi0JCQkJCQkJJiMzNDt3bGFuJWQmIzM0Oyk7Ci0JCQlXQVJOX09OKGVycik7Ci0JCQl3ZGV2LSZndDtuZXRkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiYjNDM7CQkJbmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwKJiM0MzsJCQkJCSAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7CiAJCX0KIAotCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7CiAKLQlndWFyZCh3aXBoeSkoJmFtcDtyZGV2LSZndDt3aXBoeSk7CiYjNDM7CQl3aXBoeV9uZXRfc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksIG5ldCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7Ci0JCWlmICghd2Rldi0mZ3Q7bmV0ZGV2KQotCQkJY29udGludWU7Ci0JCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpOwotCX0KJiM0MzsJCS8qIHRoaXMgb25seSBmYWlscyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KJiM0MzsJCWVyciA9IGRldmljZV9yZW5hbWUoJmFtcDtyZGV2LSZndDt3aXBoeS5kZXYsCiYjNDM7CQkJCSAgICBkZXZfbmFtZSgmYW1wO3JkZXYtJmd0O3dpcGh5LmRldikpOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7ICFmb3JjZSkKJiM0MzsJCQl3aXBoeV9uZXRfc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksIG9sZF9uZXQpOwogCi0Jbmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTsKJiM0MzsJCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7CiAKLQl3aXBoeV9uZXRfc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksIG5ldCk7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiYjNDM7CQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsCiYjNDM7CQkJCQkgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpOwomIzQzOwkJfQomIzQzOwl9CiAKLQllcnIgPSBkZXZpY2VfcmVuYW1lKCZhbXA7cmRldi0mZ3Q7d2lwaHkuZGV2LCBkZXZfbmFtZSgmYW1wO3JkZXYtJmd0O3dpcGh5LmRldikpOwotCVdBUk5fT04oZXJyKTsKJiM0MzsJaWYgKCFlcnIgfHwgZm9yY2UpCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0Jbmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTsKJiM0MzsJLyogc2V0IHRvIHRoZSBsYXN0IG9uZSB0byB1bmRvIGFsbCBvZiB0aGVtICovCiYjNDM7CXdkZXYgPSBsaXN0X2VudHJ5KCZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCB0eXBlb2YoKndkZXYpLCBsaXN0KTsKJiM0Mzt1bmRvOgomIzQzOwkvKgomIzQzOwkgKiBNb3ZlIGJhY2sgZXZlcnl0aGluZywgaWYgdGhpcyBmYWlscyBhZ2FpbiAoYWxsb2NhdGlvbiBmYWlsdXJlcykKJiM0MzsJICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsCiYjNDM7CQkJCQkgICAgIGxpc3QpCiYjNDM7CQlXQVJOX09OKGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG9sZF9uZXQpKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCi0JCQljb250aW51ZTsKLQkJbmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7Ci0JfQomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KIAotCXJldHVybiAwOwomIzQzO2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCSAgc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJaWYgKCEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19ORVROU19PSykpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBuZXQsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZnODAyMTFfcmZraWxsX3BvbGwoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKQpAQCAtMTg2OCw3ICYjNDM7MTg5Myw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogCXJ0bmxfbG9jaygpOwogCWZvcl9lYWNoX3JkZXYocmRldikgewogCQlpZiAobmV0X2VxKHdpcGh5X25ldCgmYW1wO3JkZXYtJmd0O3dpcGh5KSwgbmV0KSkKLQkJCVdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsICZhbXA7aW5pdF9uZXQpKTsKJiM0MzsJCQlXQVJOX09OKF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsICZhbXA7aW5pdF9uZXQsIHRydWUpKTsKIAl9CiAJcnRubF91bmxvY2soKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUgaW50byBXaXJlbGVzcyBOZXR3b3JraW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyBpdCBtYWtlcyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2suIEZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgdG8gYGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoKWAgYW5kIHRoZSB3YXkgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdCgpYC4gVGhlIGZhY3QgdGhhdCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YSgpYCBpcyBub3cgaW52b2tlZCAqYmVmb3JlKiBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKClgIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgd2h5IHRoaXMgcmVvcmRlcmluZyBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYmVuZWZpY2lhbC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgdGhpcyByZWxhdGVkIHRvIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGEgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZT8KCk5leHQsIHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBoZXJlIOKAkyBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoKWAsIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRucygpYCwgYGNmZzgwMjExX3N3aXRjaF9uZXRucygpYCwgYW5kIGBjZmc4MDIxMV9wZXJuZXRfZXhpdCgpYCDigJMgYXJlIGFsbCBrZXkgdG8gbmV0IG5hbWVzcGFjZSBzd2l0Y2hpbmcgd2l0aGluIHRoZSB3aXJlbGVzcyBzdGFjay4gQW5kIHRoYXQgbGFzdCBvbmUsIGNhbGxpbmcgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKClgIHdpdGggYCZhbXA7aW5pdF9uZXRgIGFuZCBgdHJ1ZWAgZHVyaW5nIHBlcm5ldCBleGl0IGlzIHRlbGxpbmcuIFRoaXMgaGludHMgYXQgY2hhbmdlcyByZWxhdGVkIHRvIGhhbmRsaW5nIHdpcmVsZXNzIGRldmljZXMgYXMgdGhleSBtb3ZlIGJldHdlZW4gbmV0d29yayBuYW1lc3BhY2VzLCBvciB0aGVpciBjbGVhbnVwLgoKR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgYXJlYSBvZiB0aGUga2VybmVsIGlzIG9mdGVuIGZ1enplZCBieSB0b29scyBsaWtlIHN5emthbGxlci4gVGhhdCBpdCBpbmNsdWRlcyBtb2R1bGVzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhpbmtpbmcgYWJvdXQgdGhlc2UgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXphdGlvbiBhbmQgZW11bGF0aW9uIGlzIGltcG9ydGFudC4gVGhpcyBmZWVscyBsaWtlIGl0ICpjb3VsZCogYmUgcmVsYXRlZCB0byBhbiBpc3N1ZSBJJiMzOTt2ZSBzZWVuIGJlZm9yZSB3aXRoIHN3aXRjaGluZyBiZXR3ZWVuIG5ldCBuYW1lc3BhY2VzLCBvciBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gY3Jvc3MtbmFtZXNwYWNlIGludGVyYWN0aW9uIHdpdGggd2lyZWxlc3MgZGV2aWNlcy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCByZWFjaCBmb3IgbXkgdG9vbHMgdG8gY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhbmQgZXhhbWluZSB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucywgZW5zdXJpbmcgSSYjMzk7bSBhd2FyZSBvZiBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBjb21taXQgbWVzc2FnZXMgYW5kIG90aGVyIHJlbGF0ZWQgY2hhbmdlc2V0cyBmb3IgZnVsbCBjb250ZXh0LCBidXQgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBzdWdnZXN0cyB0aGlzIGNvdWxkIGJlIGFkZHJlc3NpbmcgYSBzdWJ0bGUsIHBvdGVudGlhbGx5IHNlY3VyaXR5LXJlbGV2YW50LCBpc3N1ZSByZWxhdGVkIHRvIHdpcmVsZXNzIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQgaW4gYSB2aXJ0dWFsaXplZCBvciBuZXRucyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zLW9iai15ICYjNDM7PSB0ZXN0cy9cbi0tXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE3LVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTIzPSQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMyOiQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzM6XHRcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zNC1cdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzAyLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNzAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIHx8XG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDQtXHQgICAgISh3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz01NzQ9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy02NjEtXHRcdFx0ICBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmspO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo2NjI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2My1cdHJkZXYtXHUwMDNld2lwaHkud2V4dCA9IFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY4My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6Njg0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL2NvcmUuYy02ODUtXHRyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIHw9IFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0MzM9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ3My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ3NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ3NS1cdGtmcmVlX3NlbnNpdGl2ZSh3ZGV2LVx1MDAzZXdleHQua2V5cyk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNTI4PXZvaWQgY2ZnODAyMTFfbGVhdmVfbG9ja2VkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NTItXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE1NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NTQtXHRcdGtmcmVlKHdkZXYtXHUwMDNld2V4dC5pZSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjM5PXZvaWQgY2ZnODAyMTFfaW5pdF93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjQ3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjQ4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjQ5LVx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfa2V5ID0gLTE7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzMyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE4MDYtXHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTgwNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgwOC1cdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU3ND1jZmc4MDIxMV9nZXRfNmdoel9wb3dlcl90eXBlKGNvbnN0IHU4ICplbGVtcywgc2l6ZV90IGVsZW1zX2xlbixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3Ni1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NTc3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3OC0jZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXHRXQVJOX09OKGNvbmQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD02MjQ9c3RydWN0IGNmZzgwMjExX2NvbG9jYXRlZF9hcCB7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDAtXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0MTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfS1VOSVRfVEVTVClcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQyLSNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChzeW0pIEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc3ltKVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NjQ5PXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNjU0LSNkZWZpbmUgVklTSUJMRV9JRl9DRkc4MDIxMV9LVU5JVCBzdGF0aWNcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjU1OiNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAqL1xubmV0L3dpcmVsZXNzL2NvcmUuaC02NTYtXG4tLVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC02LXZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xubmV0L3dpcmVsZXNzL2lic3MuYzoyNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL2lic3MuYzo1MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXHRtZW1zZXQoXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTQyLVx0d2Rldi1cdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cdTAwM2VjaGFuZGVmO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cdG1lbXNldChcdTAwMjZ3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xubmV0L3dpcmVsZXNzL2lic3MuYzoxODU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cdGlmICghbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxMy1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yODItXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL21sbWUuYy0yODQtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDY3PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTEwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTExLVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzNC1cdFx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0NT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5My1cdGlmICghZXJyKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgxNz1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg1OC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA4NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA4NjAtc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJlZ19ydWxlX3BvbGljeVtOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA5MTA9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTg4LX1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5ODk6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5OTAtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTkxOS1cdH0sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTIwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5OTIxLVx0e1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjM0MTk9dm9pZCBjZmc4MDIxMV9zY2hlZHVsZV9jaGFubmVsc19jaGVjayhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MjYtXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfREZTX0NPTkNVUlJFTlQpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzNDI3Olx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQyOC1cdCAgICAgd2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTUxNi1cbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9yZWcuYy01MTgtLyogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSBhdHRlbXB0cyB0byBjb21tdW5pY2F0ZSB3aXRoIENSREEgICovXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy01ODktfVxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTU5MS1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03MjktXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9yZWcuYy03MzEtI2luY2x1ZGUgXHUwMDNja2V5cy9hc3ltbWV0cmljLXR5cGUuaFx1MDAzZVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03MzU9c3RhdGljIGludCBfX2luaXQgbG9hZF9idWlsdGluX3JlZ2RiX2tleXModm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ3LVxubmV0L3dpcmVsZXNzL3JlZy5jOjc0ODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KHNoaXBwZWRfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTQ6XHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAmIzM5O1xcMCYjMzk7KVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1NS1cdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTc5OD1zdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAwLX1cbm5ldC93aXJlbGVzcy9yZWcuYzo4MDE6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQiAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjAzOD1ib29sIHJlZ19sYXN0X3JlcXVlc3RfY2VsbF9iYXNlKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDItXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjA0MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MTExNz12b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTIyLVx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyNC1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjUtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExNjY6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjctXHRpZiAod2Rldi1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2ICFyZXF1ZXN0LVx1MDAzZWluZm8uYWJvcnRlZCkge1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MzQ0Mz12b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTYtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTgtc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTczNT12b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVx0dTggY291bnRyeV9kYXRhbGVuO1xubmV0L3dpcmVsZXNzL3NtZS5jOjc0NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cbm5ldC93aXJlbGVzcy9zbWUuYzo3NzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzc2LVx0aWYgKHdleHRldiBcdTAwMjZcdTAwMjYgIWNyLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEwNzk9dm9pZCBfX2NmZzgwMjExX3JvYW1lZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgxLXtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMDgyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTEzNTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMTM2LVx0aWYgKCFpbmZvLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNDgtXHRpbnQgaTtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNTAtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzOTQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk2LVx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tLVxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlPTE9Y2ZnODAyMTEtdGVzdHMteSAmIzQzOz0gbW9kdWxlLm8gZnJhZ21lbnRhdGlvbi5vIHNjYW4ubyB1dGlsLm8gY2hhbi5vXG5uZXQvd2lyZWxlc3MvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAmIzQzOz0gY2ZnODAyMTEtdGVzdHMub1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02MzgtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU2LVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nj1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDEtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwMy1cdGlmIChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM9Mjg9c3RhdGljIHZvaWQgd2lyZWxlc3Nfc2VxX3ByaW50Zl9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDAtI2VuZGlmXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM6NDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMVxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jLTQyLVx0XHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIG1hYzgwMjExIEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5LiBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGFueSBjb25maWd1cmFibGUgb3B0aW9ucyBpcyB0aGUgYE1ha2VmaWxlYCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGUgYE1ha2VmaWxlYCB3aWxsIG9idmlvdXNseSB0ZWxsIG1lIGhvdyB0aGUgc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaG93IG1vZHVsZXMgYXJlIGNyZWF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbGx5IHVuZGVyc3RhbmQgYW55IGJ1aWxkIGZsYWdzIHRoYXQgYXJlIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBpbmZsdWVuY2UgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZSBlbmFibGVtZW50LiBUaGUgYEtjb25maWdgIGZpbGUgaXMgY3J1Y2lhbCBiZWNhdXNlIHRoYXTigJlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEkgbmVlZCB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgY29uZmlndXJhYmxlLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGJldHdlZW4gdGhvc2UgZmVhdHVyZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgYnVpbGQgb2YgdGhlIG1hYzgwMjExIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBmcm9tIGEgYnVpbGQgcGVyc3BlY3RpdmUgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIHRhaWxvciB0aGUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA5NzUgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjpjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNy1cdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxubmV0L21hYzgwMjExL0tjb25maWctMTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTppZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2Olx0c2VsZWN0IE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjctXHRkZWZhdWx0IHlcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMyLVx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWc6MzQ6XHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTM1LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX1JDX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MjpcdGRlZmF1bHQgXCYjMzQ7bWluc3RyZWxfaHRcJiMzNDsgaWYgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNTMtXHRkZWZhdWx0IFwmIzM0O1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0hBU19SQz1uXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02Mi1cdGRlcGVuZHMgb24gS1VOSVRcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctNjQtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctNzMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjgxOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWc6ODI6XHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04My1cdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05MS1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctMTAwLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTEyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMTEzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTM0Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzUtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTQ1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTU2Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTctXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTY1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBPQ0IgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzc6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3OC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTg4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTk5Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDAtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNDpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjI1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjM3Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzg6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzOS1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjUwOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTE6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1Mi1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjYyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzI6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MzpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjc0LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjgyLVx0Ym9vbCBcJiMzNDtWZXJib3NlIFRETFMgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6Mjk1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTY6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Ny1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDk6XHRpbnQgXCYjMzQ7U3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVwmIzM0OyBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMTAtXHRkZWZhdWx0IDBcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTUFDODAyMTEpICYjNDM7PSBtYWM4MDIxMS5vXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMy1cbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU9NT1tYWM4MDIxMS15IDo9IFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTM5LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjQwOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICYjNDM7PSBsZWQub1xubmV0L21hYzgwMjExL01ha2VmaWxlOjQxOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQyLVx0ZGVidWdmcy5vIFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ2LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ3Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX01FU0gpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ4LVx0bWVzaC5vIFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlPTU5PXJjODAyMTFfbWluc3RyZWwteSA6PSBcXFxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02MS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo2MjpyYzgwMjExX21pbnN0cmVsLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTYzLVx0cmM4MDIxMV9taW5zdHJlbF9odF9kZWJ1Z2ZzLm9cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02NC1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo2NTptYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCkgJiM0Mzs9ICQocmM4MDIxMV9taW5zdHJlbC15KVxubmV0L21hYzgwMjExL01ha2VmaWxlLTY2LVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz02MTM9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy03MTAtXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5uZXQvbWFjODAyMTEvY2ZnLmM6NzExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTcxMi1cdFx0aWYgKHNkYXRhLVx1MDAzZXUubWVzaC5zZWN1cml0eSAhPSBJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSlcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9MjE5MD1zdGF0aWMgdm9pZCBzdGFfYXBwbHlfbWVzaF9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIxOTMte1xubmV0L21hYzgwMjExL2NmZy5jOjIxOTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5NS1cdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0yNzg3PXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTI4OTMtXG5uZXQvbWFjODAyMTEvY2ZnLmM6Mjg5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy0yODk1LXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9tcGF0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NDI4PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9hZnRlcl9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ0NTEtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL2NmZy5jOjQ0NTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1My1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDU2Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfY3NhX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGlua19kYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy00NjU0LVx0XHRicmVhaztcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NjU1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTYtXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU5OTYtXHQuZHVtcF9zdXJ2ZXkgPSBpZWVlODAyMTFfZHVtcF9zdXJ2ZXksXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5NzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk4LVx0LmFkZF9tcGF0aCA9IGllZWU4MDIxMV9hZGRfbXBhdGgsXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNS0gKi9cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY6I2lmbmRlZiBfX01BQzgwMjExX0RFQlVHX0hcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjc6I2RlZmluZSBfX01BQzgwMjExX0RFQlVHX0hcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvb25jZV9saXRlLmhcdTAwM2Vcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxMjojZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMy0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6MTQ6I2RlZmluZSBNQUM4MDIxMV9PQ0JfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTUtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6MTg6I2RlZmluZSBNQUM4MDIxMV9JQlNTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE5LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDojZGVmaW5lIE1BQzgwMjExX0lCU1NfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjEtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0OiNkZWZpbmUgTUFDODAyMTFfUFNfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjUtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI2OiNkZWZpbmUgTUFDODAyMTFfUFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yOC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjMwOiNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtMzEtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjMyOiNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzMtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC0zNC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjM1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDozNjojZGVmaW5lIE1BQzgwMjExX01QTF9ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC0zNy0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6Mzg6I2RlZmluZSBNQUM4MDIxMV9NUExfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzktI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC00MC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQyOiNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNDMtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ0OiNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDUtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC00Ni1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ4OiNkZWZpbmUgTUFDODAyMTFfTUhXTVBfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNDktI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUwOiNkZWZpbmUgTUFDODAyMTFfTUhXTVBfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTEtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC01Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NDojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC01NS0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6NTY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC01OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjU5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYwOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNjEtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYyOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjMtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC02NC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6NjY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY3LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2ODojZGVmaW5lIE1BQzgwMjExX01FU0hfUFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjktI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC03MC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjcxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6NzI6I2RlZmluZSBNQUM4MDIxMV9URExTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTczLSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3NDojZGVmaW5lIE1BQzgwMjExX1RETFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzUtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC03Ni1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjc3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3ODojZGVmaW5lIE1BQzgwMjExX1NUQV9ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC03OS0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6ODA6I2RlZmluZSBNQUM4MDIxMV9TVEFfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtODEtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC04Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjgzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6ODQ6I2RlZmluZSBNQUM4MDIxMV9NTE1FX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTg1LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4NjojZGVmaW5lIE1BQzgwMjExX01MTUVfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtODctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC04OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjg5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvZGVidWcuaC05MC12b2lkIF9fc2RhdGFfaW5mbyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMSwgMik7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE3OC0jZGVmaW5lIGh0X2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfSFRfREVCVUcsXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODAtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTgyLSNkZWZpbmUgaHRfZGJnX3JhdGVsaW1pdGVkKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxODM6XHRfc2RhdGFfZGJnKE1BQzgwMjExX0hUX0RFQlVHIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCksXHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTg2LSNkZWZpbmUgb2NiX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxODc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX09DQl9ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4OC1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTAtI2RlZmluZSBpYnNzX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTE6XHRfc2RhdGFfZGJnKE1BQzgwMjExX0lCU1NfREVCVUcsXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTItXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTk0LSNkZWZpbmUgcHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTk1Olx0X3NkYXRhX2RiZyhNQUM4MDIxMV9QU19ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE5Ni1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTgtI2RlZmluZSBwc19kYmdfaHcoaHcsIGZtdCwgLi4uKVx0XHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTk6XHRfd2lwaHlfZGJnKE1BQzgwMjExX1BTX0RFQlVHLFx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjAwLVx0XHQgICAoaHcpLVx1MDAzZXdpcGh5LCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjAyLSNkZWZpbmUgcHNfZGJnX3JhdGVsaW1pdGVkKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDM6XHRfc2RhdGFfZGJnKE1BQzgwMjExX1BTX0RFQlVHIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCksXHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMDQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjA2LSNkZWZpbmUgbXBsX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01QTF9ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIwOC1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTAtI2RlZmluZSBtcGF0aF9kYmcoc2RhdGEsIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjExOlx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NUEFUSF9ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTItXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjE0LSNkZWZpbmUgbWh3bXBfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIxNTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUhXTVBfREVCVUcsXHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjE2LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIxOC0jZGVmaW5lIG1zeW5jX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjAtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjIzOlx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI2LSNkZWZpbmUgbXBzX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfUFNfREVCVUcsXHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzMC0jZGVmaW5lIHRkbHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzMTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfVERMU19ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzMi1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMzQtI2RlZmluZSBzdGFfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzNTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfU1RBX0RFQlVHLFx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjM2LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzOC0jZGVmaW5lIG1sbWVfZGJnKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzOTpcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUxNRV9ERUJVRyxcdFx0XHRcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MC1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MS0jZGVmaW5lIG1sbWVfbGlua19pZF9kYmcoc2RhdGEsIGxpbmtfaWQsIGZtdCwgLi4uKVx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyNDI6XHRfbGlua19pZF9kYmcoTUFDODAyMTFfTUxNRV9ERUJVRywgc2RhdGEsIGxpbmtfaWQsXHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDMtXHRcdCAgICAgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0NS0jZGVmaW5lIG1sbWVfZGJnX3JhdGVsaW1pdGVkKHNkYXRhLCBmbXQsIC4uLilcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyNDY6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01MTUVfREVCVUcgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSxcdFx0XFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0Ny1cdFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0OTojZW5kaWYgLyogX19NQUM4MDIxMV9ERUJVR19IICovXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuYz02Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBkZWJ1Z2ZzX3Nob3J0X2ZvcHMgc3RhdHNfICMjbmFtZSMjIF9vcHMgPSB7XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTYzMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjMzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjM0LSNkZWZpbmUgREVCVUdGU19TVEFUU19BREQobmFtZSlcdFx0XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jPTY0NT12b2lkIGRlYnVnZnNfaHdfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjc5LVxubmV0L21hYzgwMjExL2RlYnVnZnMuYzo2ODA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL2RlYnVnZnMuYy02ODEtXHRERUJVR0ZTX1NUQVRTX0FERChkb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjI6I2lmbmRlZiBfX01BQzgwMjExX0RFQlVHRlNfSFxubmV0L21hYzgwMjExL2RlYnVnZnMuaDozOiNkZWZpbmUgX19NQUM4MDIxMV9ERUJVR0ZTX0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgtNC1cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTYtXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTgtdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuaD0xMj1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdmc19od19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuaC0xNi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmg6MTc6I2VuZGlmIC8qIF9fTUFDODAyMTFfREVCVUdGU19IICovXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6MjojaWZuZGVmIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtNC1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oOjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaD0yND1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9iZWFjb25fZGVmYXVsdChcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC0yOC1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oOjI5OiNlbmRpZiAvKiBfX01BQzgwMjExX0RFQlVHRlNfS0VZX0ggKi9cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz03MzY9SUVFRTgwMjExX0lGX0xJTktfRklMRShhZGRyLCBjb25mLVx1MDAzZWFkZHIsIE1BQyk7XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzctXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo3Mzg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzktSUVFRTgwMjExX0lGX0ZJTEUoZXN0YWJfcGxpbmtzLCB1Lm1lc2guZXN0YWJfcGxpbmtzLCBBVE9NSUMpO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTg2OD1zdGF0aWMgdm9pZCBhZGRfaWJzc19maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzItXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo4NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzQtXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9OTM3PXN0YXRpYyB2b2lkIGFkZF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NDktXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo5NTA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NTEtXHRcdGFkZF9tZXNoX2ZpbGVzKHNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaC0xMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oOjEzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTQtdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDoyOiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR0ZTX1NUQV9IXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDozOiNkZWZpbmUgX19NQUM4MDIxMV9ERUJVR0ZTX1NUQV9IXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC00LVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTYtXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDo3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtOC12b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oPTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfbGlua19zdGFfZGVidWdmc19kcnZfcmVtb3ZlKHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSkge31cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC0yNi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oOjI3OiNlbmRpZiAvKiBfX01BQzgwMjExX0RFQlVHRlNfU1RBX0ggKi9cbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTctXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjg6I2lmbmRlZiBfX01BQzgwMjExX0RSSVZFUl9PUFNcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg6OTojZGVmaW5lIF9fTUFDODAyMTFfRFJJVkVSX09QU1xubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC0xMC1cbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oPTQ3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTQtXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjQ5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtNDk2LXN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfdmlmX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg9MTc5Nz1kcnZfbmFuX3BlZXJfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTE4MTYtXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjE4MTc6I2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqL1xuLS1cbm5ldC9tYWM4MDIxMS9kcm9wLmgtNy1cbm5ldC9tYWM4MDIxMS9kcm9wLmg6ODojaWZuZGVmIE1BQzgwMjExX0RST1BfSFxubmV0L21hYzgwMjExL2Ryb3AuaDo5OiNkZWZpbmUgTUFDODAyMTFfRFJPUF9IXG5uZXQvbWFjODAyMTEvZHJvcC5oLTEwLSNpbmNsdWRlIFx1MDAzY25ldC9kcm9wcmVhc29uLmhcdTAwM2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTQ0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gdGhlIEludGVyZmFjZSBMaWZlY3ljbGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZXNlIHdpcmVsZXNzIGludGVyZmFjZXMgYXJlIGluaXRpYWxpemVkLCB1bmluaXRpYWxpemVkLCBhbmQgZ2VuZXJhbGx5IG1hbmFnZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBtYWM4MDIxMSBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIHRoZSBjZW50cmFsIGxvZ2ljIGZvciBpbnRlcmZhY2Ugb3BlcmF0aW9ucy4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgdW5pbml0aWFsaXphdGlvbiBwYXRoIGFuZCBob3cgaW50ZXJmYWNlcyBnZXQgdGFrZW4gZG93bi4gSSB3YW50IHRvIHNlZSBleGFjdGx5ICp3aGVyZSogYGllZWU4MDIxMV91bmluaXRgIGFuZCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYXJlIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlaXIgdXNlIHRvIGJldHRlciB0cm91Ymxlc2hvb3Qgb3IgbW9kaWZ5IHRoZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGludGVyZmFjZSByZW1vdmFsIGFuZCB0ZWFyZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTU6XHRcdGllZWU4MDIxMV92aWZfY2xlYXJfbGlua3Moc2RhdGEpO1xuIDkxNjpcdFx0aWVlZTgwMjExX2xpbmtfc3RvcChcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rKTtcbiA5MTc6XHRcbiA5MTg6XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4pIHtcbiA5MTk6XHRcdFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpuYW5fc2NoZWQgPVxuIDkyMDpcdFx0XHRcdFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuIDkyMTpcdFxuIDkyMjpcdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuYW5fc2NoZWQtXHUwMDNlY2hhbm5lbHMpOyBpJiM0MzsmIzQzOylcbiA5MjM6XHRcdFx0XHRXQVJOX09OKG5hbl9zY2hlZC1cdTAwM2VjaGFubmVsc1tpXS5jaGFucmVxLm9wZXIuY2hhbik7XG4gOTI0Olx0XHR9XG4gOTI1Olx0fVxuIDkyNjpcdFxuIDkyNzpcdC8qXG4gOTI4Olx0ICogVGhlIG5ldGRldiBjYW4gYmUgdW5yZWdpc3RlcmVkIHdpdGhvdXQgbWFjODAyMTEgZG9pbmcgaXQsIGUuZy4gYnkgdGhlIG5ldGRldlxuIDkyOTpcdCAqIGNvcmUgd2hlbiBjZmc4MDIxMSBjb3VsZG4mIzM5O3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0JiMzOTtzIGJlaW5nXG4gOTMwOlx0ICogZGVzdHJveWVkLiBEcm9wIGl0IGZyb20gdGhlIGludGVyZmFjZSBsaXN0IGVpdGhlciB3YXkuXG4gOTMxOlx0ICovXG4gOTMyOlx0c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiA5MzM6XHR7XG4gOTM0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuIDkzNTpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjtcbiA5MzY6XHRcbiA5Mzc6XHRcdEFTU0VSVF9SVE5MKCk7XG4gOTM4Olx0XG4gOTM5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbiA5NDA6XHRcdFx0aWYgKGl0ZXIgIT0gc2RhdGEpXG4gOTQxOlx0XHRcdFx0Y29udGludWU7XG4gOTQyOlx0XHRcdGd1YXJkKG11dGV4KShcdTAwMjZsb2NhbC1cdTAwM2VpZmxpc3RfbXR4KTtcbiA5NDM6XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnNkYXRhLVx1MDAzZWxpc3QpO1xuIDk0NDpcdFx0XHRyZXR1cm47XG4gOTQ1Olx0XHR9XG4gOTQ2Olx0fVxuIDk0NzpcdFxuIDk0ODpcdHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA5NDk6XHR7XG4gOTUwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG4gOTUxOlx0XG4gOTUyOlx0XHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcbiA5NTM6XHRcdGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YSk7XG4gOTU0Olx0fVxuIDk1NTpcdFxuIDk1NjpcdHN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDk1NzpcdFx0XHRcdFx0ICAgICBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuIDk1ODpcdHtcbiA5NTk6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbiA5NjA6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4gOTYxOlx0XG4gOTYyOlx0XHRyZXR1cm4gZHJ2X25ldF9zZXR1cF90Yyhsb2NhbCwgc2RhdGEsIGRldiwgdHlwZSwgdHlwZV9kYXRhKTtcbiA5NjM6XHR9XG4gOTY0Olx0XG4gOTY1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcbiA5NjY6XHRcdC5uZG9fb3Blblx0XHQ9IGllZWU4MDIxMV9vcGVuLFxuIDk2NzpcdFx0Lm5kb19zdG9wXHRcdD0gaWVlZTgwMjExX3N0b3AsXG4gOTY4Olx0XHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG4gOTY5Olx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcbiA5NzA6XHRcdC5uZG9fc2V0X3J4X21vZGVcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcbiA5NzE6XHRcdC5uZG9fc2V0X21hY19hZGRyZXNzIFx0PSBpZWVlODAyMTFfY2hhbmdlX21hYyxcbiA5NzI6XHRcdC5uZG9fc2V0dXBfdGNcdFx0PSBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjLFxuIDk3MzpcdH07XG4gOTc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5OTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIGBsb2NhbC0mZ3Q7aW50ZXJmYWNlc2AgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxvY2FsLSZndDtpbnRlcmZhY2VzYCBpcyBtYW5pcHVsYXRlZCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBmb3IgbWFjODAyMTEgbGlrZWx5IHJlc2lkZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoICp3aXRoaW4qIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSYjMzk7bSBsb29raW5nIGZvciBkaXJlY3QgbW9kaWZpY2F0aW9ucyB0byB0aGF0IHBhcnRpY3VsYXIgc3RydWN0IG1lbWJlci4gQSBzaW1wbGUgYGdyZXBgIG9yIGFuIElERSYjMzk7cyBzZWFyY2ggd291bGQgYmUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIGZvY3VzIG9uIGFzc2lnbm1lbnRzIChgPWApLCBwb3RlbnRpYWxseSBhbHNvIGluY3JlbWVudHMvZGVjcmVtZW50cyAoYCYjNDM7PWAsIGAtLWApIGlmIHRoZXkgYXJlIGludm9sdmVkIGluIG1hbmlwdWxhdGluZyB0aGUgaW50ZXJmYWNlIGxpc3QuIEkmIzM5O20gYWxzbyBnb2luZyB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBzdHJ1Y3R1cmUgYWNjZXNzZXMgbGlrZSBgbG9jYWwtJmd0O2ludGVyZmFjZXMtJmd0Oy4uLmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIHRoYXQgYXJlIGltcG9ydGFudCB0byB0cmFjay4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBsaXN0IG9mIGludGVyZmFjZXMgaXMgYmVpbmcgYnVpbHQsIG1haW50YWluZWQsIGFuZCBjbGVhbmVkIHVwLCBhcyB0aGlzIGlzIGNyaXRpY2FsIHRvIHByb3BlciBkcml2ZXIgb3BlcmF0aW9uLiBPbmNlIEkgaGF2ZSB0aGUgbG9jYXRpb25zLCBJIGNhbiBzdGFydCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBpbnRlcmZhY2UgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBhbmQgYW55IHJlLWFycmFuZ2VtZW50IGluIHRoaXMgbG9jYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHN1cnJvdW5kaW5nIHRoZSBhY2Nlc3MgYXMgd2VsbCwgdGhhdCBpcyBhbHNvIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIHNvbWUgZm9ybSBvZiBsaW5rZWQgbGlzdCBtYW5pcHVsYXRpb24sIGdpdmVuIHRoYXQgaXQmIzM5O3MgbGlrZWx5IG1hbmFnaW5nIGEgdmFyaWFibGUgbnVtYmVyIG9mIGludGVyZmFjZXMsIGJ1dCBJJiMzOTtsbCBjb25maXJtIHRoYXQgYXMgSSByZXZpZXcgdGhlIGNvZGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBsaWZlY3ljbGUgb2YgYW4gaW50ZXJmYWNlIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoaXMgY29yZSBtYWM4MDIxMSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlcmZhY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvbWFjODAyMTEvYXAuYz0yOTc9dm9pZCBpZWVlODAyMTFfYXBfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9hcC5jLTMwMS1cbm5ldC9tYWM4MDIxMS9hcC5jOjMwMjpcdC8qIHJ4LmMgY2Fubm90IHF1ZXVlIGFueSBub24tYWN0aW9uIGZyYW1lcyB0byBBUCBpbnRlcmZhY2VzICovXG5uZXQvbWFjODAyMTEvYXAuYy0zMDMtXHRpZiAoV0FSTl9PTighaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9MzcwOD1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMzc3My1cbm5ldC9tYWM4MDIxMS9jZmcuYzozNzc0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2NmZy5jLTM3NzUtXHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzk1LVx0fVxubmV0L21hYzgwMjExL2NmZy5jOjM3OTY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMzc5Ny1cdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQyNDU9c3RhdGljIHZvaWQgaWVlZTgwMjExX2VuZF9jYWMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDI1My1cbm5ldC9tYWM4MDIxMS9jZmcuYzo0MjU0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2NmZy5jLTQyNTUtXHRcdGxpbmtfZGF0YSA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbbGlua19pZF0sIHNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDM3NT12b2lkIGllZWU4MDIxMV9jc2FfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy00Mzk1LVx0XHQvKiBUcmlnZ2VyIGllZWU4MDIxMV9jc2FfZmluaXNoKCkgb24gdGhlIG5vbi10cmFuc21pdHRpbmdcbm5ldC9tYWM4MDIxMS9jZmcuYzo0Mzk2Olx0XHQgKiBpbnRlcmZhY2VzIHdoZW4gY2hhbm5lbCBzd2l0Y2ggaXMgcmVjZWl2ZWQgb25cbm5ldC9tYWM4MDIxMS9jZmcuYy00Mzk3LVx0XHQgKiB0cmFuc21pdHRpbmcgaW50ZXJmYWNlXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ0Njc9c3RhdGljIGludCBfX2llZWU4MDIxMV9jc2FfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ4Ni1cdFx0ICogd2l0aCBtdWx0aS12aWYgY3NhIGRyaXZlciBtYXkgY2FsbCBpZWVlODAyMTFfY3NhX2ZpbmlzaCgpXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ4NzpcdFx0ICogbWFueSB0aW1lcyB3aGlsZSB3YWl0aW5nIGZvciBvdGhlciBpbnRlcmZhY2VzIHRvIHVzZSB0aGVpclxubmV0L21hYzgwMjExL2NmZy5jLTQ0ODgtXHRcdCAqIHJlc2VydmF0aW9uc1xuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTEyPWllZWU4MDIxMV9jaGFuY3R4X3VzZXJfaXRlcl9uZXh0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTM3LVx0LyogbmV4dCAob3IgZmlyc3QpIGludGVyZmFjZSAqL1xubmV0L21hYzgwMjExL2NoYW4uYzoxMzg6XHRpdGVyLVx1MDAzZXNkYXRhID0gbGlzdF9wcmVwYXJlX2VudHJ5KGl0ZXItXHUwMDNlc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpO1xubmV0L21hYzgwMjExL2NoYW4uYzoxMzk6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGl0ZXItXHUwMDNlc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTQwLVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKGl0ZXItXHUwMDNlc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9Mjg0PWllZWU4MDIxMV9jaGFucmVxX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSAqYSxcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5NS1cdC8qXG5uZXQvbWFjODAyMTEvY2hhbi5jOjI5NjpcdCAqIFJlbW92ZSBOUENBIGlmIGl0JiMzOTtzIG5vdCByZXF1aXJlZCwgc28gdGhhdCBpbnRlcmZhY2VzXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5Ny1cdCAqIHNoYXJpbmcgYSBjaGFubmVsIGNvbnRleHQgd2lsbCBub3QgdXNlIE5QQ0Egd2hpbGUgdGhlXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5OC1cdCAqIGNoYW5uZWwgY29udGV4dCBpcyBzaGFyZWQuXG5uZXQvbWFjODAyMTEvY2hhbi5jOjI5OTpcdCAqIElmIGJvdGggc2lkZXMgYXJlIEFQIGludGVyZmFjZXMgcmVxdWlyaW5nIE5QQywgdGhlcmUmIzM5O3Ncbm5ldC9tYWM4MDIxMS9jaGFuLmMtMzAwLVx0ICogYW4gYXNzdW1wdGlvbiB0aGF0IHVzZXJzcGFjZSB3aWxsIHNldCB0aGVtIHVwIHdpdGhcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jPTU4Mj1pZWVlODAyMTFfZ2V0X2NoYW5jdHhfbWF4X3JlcXVpcmVkX2J3KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmMtNjMxLSAqIHJlY2FsYyB0aGUgbWluIHJlcXVpcmVkIGNoYW4gd2lkdGggb2YgdGhlIGNoYW5uZWwgY29udGV4dCwgd2hpY2ggaXNcbm5ldC9tYWM4MDIxMS9jaGFuLmM6NjMyOiAqIHRoZSBtYXggb2YgbWluIHJlcXVpcmVkIHdpZHRocyBvZiBhbGwgdGhlIGludGVyZmFjZXMgYm91bmQgdG8gdGhpc1xubmV0L21hYzgwMjExL2NoYW4uYy02MzMtICogY2hhbm5lbCBjb250ZXh0LlxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9Njc1PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jaGFuX2J3X2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTc0MS0gKiByZWNhbGMgdGhlIG1pbiByZXF1aXJlZCBjaGFuIHdpZHRoIG9mIHRoZSBjaGFubmVsIGNvbnRleHQsIHdoaWNoIGlzXG5uZXQvbWFjODAyMTEvY2hhbi5jOjc0MjogKiB0aGUgbWF4IG9mIG1pbiByZXF1aXJlZCB3aWR0aHMgb2YgYWxsIHRoZSBpbnRlcmZhY2VzIGJvdW5kIHRvIHRoaXNcbm5ldC9tYWM4MDIxMS9jaGFuLmMtNzQzLSAqIGNoYW5uZWwgY29udGV4dC5cbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jPTgxMT1zdGF0aWMgdm9pZCBfaWVlZTgwMjExX2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmMtODMxLVx0XHQgKiBtYWM4MDIxMSBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBzaGFyaW5nIGlkZW50aWNhbFxubmV0L21hYzgwMjExL2NoYW4uYzo4MzI6XHRcdCAqIGNoYW5jdHgmIzM5O3MgZm9yIFMxRyBpbnRlcmZhY2VzLlxubmV0L21hYzgwMjExL2NoYW4uYy04MzMtXHRcdCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTg4NT1zdGF0aWMgaW50IGllZWU4MDIxMV92aWZfdXNlX3Jlc2VydmVkX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTE5NDQtXHRcdFx0d2lwaHlfaW5mbyhsb2NhbC1cdTAwM2Vody53aXBoeSxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTk0NTpcdFx0XHRcdCAgIFwmIzM0O2NoYW5uZWwgY29udGV4dCByZXNlcnZhdGlvbiBjYW5ub3QgYmUgZmluYWxpemVkIGJlY2F1c2Ugc29tZSBpbnRlcmZhY2VzIGFyZW4mIzM5O3Qgc3dpdGNoaW5nXFxuXCYjMzQ7KTtcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTk0Ni1cdFx0XHRlcnIgPSAtRUJVU1k7XG4tLVxubmV0L21hYzgwMjExL2NoYW4uYz0yMzU3PWludCBpZWVlODAyMTFfbGlua191c2VfcmVzZXJ2ZWRfY29udGV4dChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbi0tXG5uZXQvbWFjODAyMTEvY2hhbi5jLTIzOTctXHQgKiBUaGUgaWVlZTgwMjExX3ZpZl91c2VfcmVzZXJ2ZWRfc3dpdGNoKCkgYWxyZWFkeSBzdG9wcyBhbGwgbmVjZXNzYXJ5XG5uZXQvbWFjODAyMTEvY2hhbi5jOjIzOTg6XHQgKiBpbnRlcmZhY2VzIHVwb24gZmFpbHVyZS5cbm5ldC9tYWM4MDIxMS9jaGFuLmMtMjM5OS1cdCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9Mzc5PXN0YXRpYyBzc2l6ZV90IHJlc2V0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuYy0zOTEtXHRpZiAocmV0KVxubmV0L21hYzgwMjExL2RlYnVnZnMuYzozOTI6XHRcdGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtMzkzLVxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmM9MTY2OD12b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzMtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2NzQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzUtXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTgzPWV4dGVybiBjb25zdCB1OCBpZWVlODAyMTFfYWNfdG9fcW9zX21hc2tbSUVFRTgwMjExX05VTV9BQ1NdO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwLSAqIEN1cnJlbnQgbWFjODAyMTEgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDE2MDAgQUlEU1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6OTE6ICogZm9yIFMxRyBpbnRlcmZhY2VzLiBXaXRoIHJlZ2FyZHMgdG8gYW4gUzFHIFRJTSwgdGhpcyBjb3ZlcnMgMjUgYmxvY2tzXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05Mi0gKiBhcyBlYWNoIGJsb2NrIGlzIDY0IEFJRHMuXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjEyPWVudW0gaWVlZTgwMjExX3BhY2tldF9yeF9mbGFncyB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzLSAqXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjQ6ICogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgYWNyb3NzIGhhbmRsaW5nIG11bHRpcGxlIGludGVyZmFjZXNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIyNS0gKiBmb3IgYSBzaW5nbGUgZnJhbWUuXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9ODk4PWVudW0gaWVlZTgwMjExX3NkYXRhX3N0YXRlX2JpdHMge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwNy0gKiBASUVFRTgwMjExX0NIQU5DVFhfU0hBUkVEOiBjaGFubmVsIGNvbnRleHQgbWF5IGJlIHVzZWQgYnlcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjkwODogKlx0bXVsdGlwbGUgaW50ZXJmYWNlc1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTA5LSAqIEBJRUVFODAyMTFfQ0hBTkNUWF9FWENMVVNJVkU6IGNoYW5uZWwgY29udGV4dCBjYW4gYmUgdXNlZFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTEyNzA9c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdmlmX3RvX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfdmlmICpwKVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEyODQtXHQgICAgIF9fX2xpbmtfaWQ7IF9fX2xpbmtfaWQgPSAwIC8qIGFsd2F5cyBzdG9wICovKVx0XHRcXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTI4NTpcdGxpc3RfZm9yX2VhY2hfZW50cnkoX19fc2RhdGEsIFx1MDAyNihfbG9jYWwpLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpXHRcXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTI4Ni1cdGlmIChfX19saW5rX2lkID09IEFSUkFZX1NJWkUoX19fc2RhdGEtXHUwMDNlbGluaykgXHUwMDI2XHUwMDI2XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMzAzLVx0ICAgICBfX19saW5rX2lkOyBfX19saW5rX2lkID0gMCAvKiBhbHdheXMgc3RvcCAqLylcdFx0XFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjEzMDQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fX3NkYXRhLCBcdTAwMjYoX2xvY2FsKS1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVx0XFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEzMDUtXHRpZiAoX19fbGlua19pZCA9PSBBUlJBWV9TSVpFKF9fX3NkYXRhLVx1MDAzZWxpbmspIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ1Nz1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDk4LVx0aW50IG1vbml0b3JzLCB2aXJ0X21vbml0b3JzLCB0eF9tbnRycztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE0OTk6XHQvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aXRoIGNvcnJlc3BvbmRpbmcgRklGXyBmbGFncyAqL1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTUwMC1cdGludCBmaWZfZmNzZmFpbCwgZmlmX3BsY3BmYWlsLCBmaWZfY29udHJvbCwgZmlmX290aGVyX2JzcywgZmlmX3BzcG9sbCxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTk2LVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTU5NzpcdC8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdpdGggYWxsbXVsdGkgUlggKi9cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE1OTgtXHRhdG9taWNfdCBpZmZfYWxsbXVsdGlzO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MDYtXHQvKiBzZWUgaWZhY2UuYyAqL1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYwNzpcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJmYWNlcztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MDgtXHRzdHJ1Y3QgbGlzdF9oZWFkIG1vbl9saXN0OyAvKiBvbmx5IHRoYXQgYXJlIElGRl9VUCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE3MDItXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNzAzOlx0aW50IHVzZXJfcG93ZXJfbGV2ZWw7IC8qIGluIGRCbSwgZm9yIGFsbCBpbnRlcmZhY2VzICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNzA0LVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIxMDA9aWVlZTgwMjExX2ZpbmRfbmFuX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxMDYtXHQvKiBGaW5kIHRoZSBOQU4gaW50ZXJmYWNlIC0gdGhlcmUgY2FuIG9ubHkgYmUgb25lICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMTA3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjEwOC1cdFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTk5PXZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjAwOnZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIyMDEtdTMyIGllZWU4MDIxMV9pZGxlX29mZihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA1PXN0YXRpYyB1MzIgX19pZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTIwLVxubmV0L21hYzgwMjExL2lmYWNlLmM6MTIxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMjItXHRcdGlmIChpdGVyLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xNjE9c3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X21hYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIsXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTg3LVxubmV0L21hYzgwMjExL2lmYWNlLmM6MTg4Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODktXHRcdGlmIChpdGVyID09IHNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTM0MT1zdGF0aWMgaW50IGllZWU4MDIxMV9jaGVja19jb25jdXJyZW50X2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTM1MC1cdC8qIHdlIGhvbGQgdGhlIFJUTkwgaGVyZSBzbyBjYW4gc2FmZWx5IHdhbGsgdGhlIGxpc3QgKi9cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjM1MTpcdGxpc3RfZm9yX2VhY2hfZW50cnkobnNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zNTItXHRcdGlmIChuc2RhdGEgIT0gc2RhdGEgXHUwMDI2XHUwMDI2IGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKG5zZGF0YSkpIHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zODAtXHRcdFx0ICogVG8gcmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24gd2UmIzM5O2QgaGF2ZSB0byBkaXNhbGxvdyB0aGVtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzozODE6XHRcdFx0ICogZnJvbSBzZXR0aW5nIHRoZSBzYW1lIFNTSUQgb24gZGlmZmVyZW50IElCU1MgaW50ZXJmYWNlc1xubmV0L21hYzgwMjExL2lmYWNlLmMtMzgyLVx0XHRcdCAqIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBoYXJkd2FyZS4gVGhlbiwgaG93ZXZlciwgd2UmIzM5O3JlXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMzk3LVx0XHRcdC8qXG5uZXQvbWFjODAyMTEvaWZhY2UuYzozOTg6XHRcdFx0ICogVGhlIHJlbWFpbmluZyBjaGVja3MgYXJlIG9ubHkgcGVyZm9ybWVkIGZvciBpbnRlcmZhY2VzXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zOTktXHRcdFx0ICogd2l0aCB0aGUgc2FtZSBNQUMgYWRkcmVzcy5cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00Nzk9c3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG93bilcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzYtXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjYzNzpcdFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xubmV0L21hYzgwMjExL2lmYWNlLmM6NjM4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzOS1cdFx0XHRXQVJOX09OKGl0ZXItXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9ODQ1PXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NDgtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo4NDk6XHQvKiBjbG9zZSBkZXBlbmRlbnQgVkxBTiBpbnRlcmZhY2VzIGJlZm9yZSBsb2NraW5nIHdpcGh5ICovXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NTAtXHRpZiAoc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NjEtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo4NjI6XHQvKiBDbG9zZSB0aGUgZGVwZW5kZW50IE1CU1NJRCBpbnRlcmZhY2VzIHdpdGggd2lwaHkgbG9jayBhcyB3ZSBtYXkgYmVcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg2My1cdCAqIHRlcm1pbmF0aW5nIGl0cyBwYXJ0bmVyIGxpbmtzIHRvbyBpbiBjYXNlIG9mIE1MRC5cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05MzI9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05MzgtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5Mzk6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0MC1cdFx0aWYgKGl0ZXIgIT0gc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTE2MD1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVjYWxjX3NkYXRhX29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE2OS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjExNzA6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3MS1cdFx0aWYgKHZzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIHx8XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTE3OT12b2lkIGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTg3LVxubmV0L21hYzgwMjExL2lmYWNlLmM6MTE4ODpcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExODktXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEzODk9aW50IGllZWU4MDIxMV9kb19vcGVuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGJvb2wgY29taW5nX3VwKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE1OTktXHRcdCAqIGRvZXNuJiMzOTt0IHN0YXJ0IHVwIHdpdGggc2FuZSBkZWZhdWx0cy5cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE2MDA6XHRcdCAqIEVuYWJsZSBRb1MgZm9yIGFueXRoaW5nIGJ1dCBzdGF0aW9uIGludGVyZmFjZXMuXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNjAxLVx0XHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMTIzPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NpZ25fcGVybV9hZGRyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNDYtXHRcdC8qIG1hdGNoIHVwIHdpdGggYW4gQVAgaW50ZXJmYWNlICovXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTQ3Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTQ4LVx0XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUClcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTU3LVx0XHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBQMlBfREVWX0FERFJfRk9SX0lOVEYpKSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTU4Olx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNTktXHRcdFx0XHRpZiAoc2RhdGEtXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSlcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTcyLVxubmV0L21hYzgwMjExL2lmYWNlLmM6MjE3MzpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMTc0LVx0XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwobG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIsXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIwOC1cdFx0bSA9IGxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZXBlcm1fYWRkcjtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMDk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIyMTAtXHRcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIzMy1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMzQ6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL2lmYWNlLmMtMjIzNS1cdFx0XHRcdGlmIChldGhlcl9hZGRyX2VxdWFsKHRtcF9hZGRyLCBzZGF0YS1cdTAwM2V2aWYuYWRkcikpIHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMjUyPWludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTAtXHRcdC8qIE1UVSByYW5nZSBpcyBub3JtYWxseSAyNTYgLSAyMzA0LCB3aGVyZSB0aGUgdXBwZXIgbGltaXQgaXNcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0MTE6XHRcdCAqIHRoZSBtYXhpbXVtIE1TRFUgc2l6ZS4gTW9uaXRvciBpbnRlcmZhY2VzIHNlbmQgYW5kIHJlY2VpdmVcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTItXHRcdCAqIE1QRFUgYW5kIEEtTVNEVSBmcmFtZXMgd2hpY2ggbWF5IGJlIG11Y2ggbGFyZ2VyIHNvIHdlIGRvXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQyOC1cdG11dGV4X2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDI5Olx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcyk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDMwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTI0NjQ9dm9pZCBpZWVlODAyMTFfc2RhdGFfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDcwLVxubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ3MTp2b2lkIGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0NzIte1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0NzctXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDc4Olx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBhbGwgc3RvcHBlZCBzb1xubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ3OS1cdCAqIHRoYXQgdGhlIGhhcmR3YXJlIGlzIHN0b3BwZWQuIE90aGVyd2lzZSwgdGhlIGRyaXZlciBtaWdodCBzdGlsbCBiZVxubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ4MDpcdCAqIGl0ZXJhdGluZyB0aGUgaW50ZXJmYWNlcyBkdXJpbmcgdGhlIHNodXRkb3duLCBlLmcuIGZyb20gYSB3b3JrZXJcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0ODEtXHQgKiBvciBmcm9tIFJYIHByb2Nlc3Npbmcgb3Igc2ltaWxhciwgYW5kIGlmIGl0IGRvZXMgc28gKHVzaW5nIGF0b21pY1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0ODgtXHQgKi9cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0ODk6XHRjZmc4MDIxMV9zaHV0ZG93bl9hbGxfaW50ZXJmYWNlcyhsb2NhbC1cdTAwM2Vody53aXBoeSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDkwLVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0OTYtXHRtdXRleF9sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ5NzpcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgXHUwMDI2dW5yZWdfbGlzdCk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDk4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz0xMjA9c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xNjctXHRcdC8qXG5uZXQvbWFjODAyMTEva2V5LmM6MTY4Olx0XHQgKiBUaGUgZHJpdmVyIGRvZXNuJiMzOTt0IGtub3cgYW55dGhpbmcgYWJvdXQgVkxBTiBpbnRlcmZhY2VzLlxubmV0L21hYzgwMjExL2tleS5jOjE2OTpcdFx0ICogSGVuY2UsIGRvbiYjMzk7dCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxubmV0L21hYzgwMjExL2tleS5jLTE3MC1cdFx0ICovXG4tLVxubmV0L21hYzgwMjExL2tleS5jPTg0Nj1pbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTg3NS1cdFx0ICogdGhlIHNhbWUgY2lwaGVyLiBFbmZvcmNlIHRoZSBhc3N1bXB0aW9uIGZvciBwYWlyd2lzZSBrZXlzLlxubmV0L21hYzgwMjExL2tleS5jOjg3NjpcdFx0ICogTkFOIERhdGEgaW50ZXJmYWNlcyBhcmUgZXhlbXB0OiBXaS1GaSBBd2FyZSB2NC4wIHNlY3Rpb24gNy40XG5uZXQvbWFjODAyMTEva2V5LmMtODc3LVx0XHQgKiByZXF1aXJlcyB1cGdyYWRpbmcgdGhlIE5ELVRLU0Egd2hlbiBhIG5ldyBORFAgbmVnb3RpYXRlcyBhXG4tLVxubmV0L21hYzgwMjExL2tleS5jPTEwMjA9dm9pZCBpZWVlODAyMTFfaXRlcl9rZXlzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDM5LVx0fSBlbHNlIHtcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDQwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxubmV0L21hYzgwMjExL2tleS5jLTEwNDEtXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgdG1wLFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDY1PXZvaWQgaWVlZTgwMjExX2l0ZXJfa2V5c19yY3Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTEwODAtXHR9IGVsc2Uge1xubmV0L21hYzgwMjExL2tleS5jOjEwODE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxubmV0L21hYzgwMjExL2tleS5jLTEwODItXHRcdFx0X2llZWU4MDIxMV9pdGVyX2tleXNfcmN1KGh3LCBzZGF0YSwgaXRlciwgaXRlcl9kYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTk2PXN0YXRpYyB1MzIgaWVlZTgwMjExX2NhbGNfaHdfY29uZl9jaGFuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTczLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL21haW4uYzoxNzQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL21haW4uYy0xNzUtXHRcdGlmICghcmN1X2FjY2Vzc19wb2ludGVyKHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5jaGFuY3R4X2NvbmYpKVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmM9NDc0PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtNDkwLVxubmV0L21hYzgwMjExL21haW4uYzo0OTE6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvbWFpbi5jLTQ5Mi1cdFx0Lypcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTUzMC1cdGlmIChyZXQpXG5uZXQvbWFjODAyMTEvbWFpbi5jOjUzMTpcdFx0Y2ZnODAyMTFfc2h1dGRvd25fYWxsX2ludGVyZmFjZXMobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xubmV0L21hYzgwMjExL21haW4uYy01MzItXG4tLVxubmV0L21hYzgwMjExL21haW4uYz03OTM9c3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtOTc4LVxubmV0L21hYzgwMjExL21haW4uYzo5Nzk6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzKTtcbm5ldC9tYWM4MDIxMS9tYWluLmMtOTgwLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG9jYWwtXHUwMDNlbW9uX2xpc3QpO1xuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmM9MTEzNz1pbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTI3MC1cdFx0XHQgKiBBc3NpZ24gdGhlIGZpcnN0IGVuYWJsZWQgY2hhbm5lbCB0byBkZmx0X2NoYW5kZWZcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTI3MTpcdFx0XHQgKiBmcm9tIHRoZSBsaXN0IG9mIGNoYW5uZWxzLiBGb3IgUzFHIGludGVyZmFjZXNcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTI3Mi1cdFx0XHQgKiBlbnN1cmUgaXQgY2FuIGJlIHVzZWQgYXMgYSBwcmltYXJ5LlxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTUyNy1cdCAqIGFuZCB3ZSBuZWVkIHNvbWUgaGVhZHJvb20gZm9yIHBhc3NpbmcgdGhlIGZyYW1lIHRvIG1vbml0b3Jcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTUyODpcdCAqIGludGVyZmFjZXMsIGJ1dCBuZXZlciBib3RoIGF0IHRoZSBzYW1lIHRpbWUuXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE1MjktXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE2ODItXHRyYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKGxvY2FsKTtcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTY4MzpcdGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhsb2NhbCk7XG5uZXQvbWFjODAyMTEvbWFpbi5jLTE2ODQtXHRydG5sX3VubG9jaygpO1xuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmM9MTY5Nj12b2lkIGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTcxNi1cdCAqL1xubmV0L21hYzgwMjExL21haW4uYzoxNzE3Olx0aWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKGxvY2FsKTtcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTcxOC1cbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oPTIxNj1zdHJ1Y3QgbWVzaF9ybWMge1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmgtMjMzLVxubmV0L21hYzgwMjExL21lc2guaDoyMzQ6LyogUHVibGljIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9tZXNoLmgtMjM1LS8qIFZhcmlvdXMgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM0NT12b2lkIG1lc2hfc3RhX2NsZWFudXAoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xubmV0L21hYzgwMjExL21lc2guaC0zNDYtXG5uZXQvbWFjODAyMTEvbWVzaC5oOjM0NzovKiBQcml2YXRlIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzQ4LS8qIE1lc2ggcGF0aHMgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTE4ODg9c3RhdGljIGJvb2wgaWVlZTgwMjExX2FkZF92aHRfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0xOTM4LVxubmV0L21hYzgwMjExL21sbWUuYzoxOTM5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTE5NDAtXHRcdFx0aWYgKG90aGVyLVx1MDAzZXZpZi5ic3NfY29uZi5tdV9taW1vX293bmVyKSB7XG4tLVxubmV0L21hYzgwMjExL21sbWUuYz0yODc0PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2Ffc3dpdGNoX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDItXHRcdCAqIHdpdGggbXVsdGktdmlmIGNzYSBkcml2ZXIgbWF5IGNhbGwgaWVlZTgwMjExX2NzYV9maW5pc2goKVxubmV0L21hYzgwMjExL21sbWUuYzoyOTQzOlx0XHQgKiBtYW55IHRpbWVzIHdoaWxlIHdhaXRpbmcgZm9yIG90aGVyIGludGVyZmFjZXMgdG8gdXNlIHRoZWlyXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDQtXHRcdCAqIHJlc2VydmF0aW9uc1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9MzgyMj12b2lkIGllZWU4MDIxMV9yZWNhbGNfcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0zODMzLVxubmV0L21hYzgwMjExL21sbWUuYzozODM0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL21sbWUuYy0zODM1LVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05NTg1LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL21sbWUuYzo5NTg2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTU4Ny1cdFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvbmFuLmM9MjI0PWllZWU4MDIxMV9uYW5fdXBkYXRlX2FsbF9uZGlfY2FycmllcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL25hbi5jLTIyOS1cbm5ldC9tYWM4MDIxMS9uYW4uYzoyMzA6XHQvKiBJdGVyYXRlIGFsbCBpbnRlcmZhY2VzIGFuZCB1cGRhdGUgY2FycmllciBmb3IgTkRJIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9uYW4uYzoyMzE6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvbmFuLmMtMjMyLVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODM9dm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3ZpZnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy05My1cdCAqIG5vdGlmeSB0aGUgQVAgYWJvdXQgdXMgbGVhdmluZyB0aGUgY2hhbm5lbCBhbmQgc3RvcCBhbGxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6OTQ6XHQgKiBTVEEgaW50ZXJmYWNlcy5cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtOTUtXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwNS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6MTA2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDctXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9MTMzPXZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTQxLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxNDI6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTE0My1cdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9ERVZJQ0UpXG4tLVxubmV0L21hYzgwMjExL3BtLmM9MjE9aW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbilcbi0tXG5uZXQvbWFjODAyMTEvcG0uYy05MS1cdFx0ICovXG5uZXQvbWFjODAyMTEvcG0uYzo5MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3BtLmMtOTMtXHRcdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4tLVxubmV0L21hYzgwMjExL3BtLmMtMTM0LVx0XHRcdC8qIGNmZzgwMjExIHdpbGwgY2FsbCBiYWNrIGludG8gbWFjODAyMTEgdG8gZGlzY29ubmVjdFxubmV0L21hYzgwMjExL3BtLmM6MTM1Olx0XHRcdCAqIGFsbCBpbnRlcmZhY2VzLCBhbGxvdyB0aGF0IHRvIHByb2NlZWQgcHJvcGVybHlcbm5ldC9tYWM4MDIxMS9wbS5jLTEzNi1cdFx0XHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvcG0uYy0xNDYtXG5uZXQvbWFjODAyMTEvcG0uYzoxNDc6XHQvKiByZW1vdmUgYWxsIGludGVyZmFjZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgaW4gdGhlIGRyaXZlciAqL1xubmV0L21hYzgwMjExL3BtLmM6MTQ4Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3BtLmMtMTQ5LVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvcG0uYy0xNjctXHQvKlxubmV0L21hYzgwMjExL3BtLmM6MTY4Olx0ICogV2UgZGlzY29ubmVjdGVkIG9uIGFsbCBpbnRlcmZhY2VzIGJlZm9yZSBzdXNwZW5kLCBhbGwgY2hhbm5lbFxubmV0L21hYzgwMjExL3BtLmMtMTY5LVx0ICogY29udGV4dHMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTc5Nj1pZWVlODAyMTFfdmFsaWRhdGVfbW9uaXRvcl9yYWRpbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvcnguYy04NDAtLypcbm5ldC9tYWM4MDIxMS9yeC5jOjg0MTogKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhIHJlY2VpdmVkIGZyYW1lIHRvIGFsbCBtb25pdG9yIGludGVyZmFjZXMgYW5kXG5uZXQvbWFjODAyMTEvcnguYy04NDItICogcmV0dXJucyBhIGNsZWFuZWQtdXAgU0tCIHRoYXQgbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBGQ1Mgbm9yIHRoZVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTUxNzE9c3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTUxODMtXHQgKiBzbyBwdW50IGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8gZGVsaXZlciBhIGRhdGFcbm5ldC9tYWM4MDIxMS9yeC5jOjUxODQ6XHQgKiBmcmFtZSB0byBtdWx0aXBsZSBpbnRlcmZhY2VzIGFueXdheS5cbm5ldC9tYWM4MDIxMS9yeC5jLTUxODUtXHQgKlxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTUzNjc9c3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvcnguYy01NTE2LVxubmV0L21hYzgwMjExL3J4LmM6NTUxNzpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvcnguYy01NTE4LVx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbi0tXG5uZXQvbWFjODAyMTEvcnguYz01NzI4PXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNTczNS1cdC8qXG5uZXQvbWFjODAyMTEvcnguYzo1NzM2Olx0ICoga2V5IHJlZmVyZW5jZXMgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcyBhcmUgcHJvdGVjdGVkIHVzaW5nIFJDVVxubmV0L21hYzgwMjExL3J4LmMtNTczNy1cdCAqIGFuZCB0aGlzIHJlcXVpcmVzIHRoYXQgd2UgYXJlIGluIGEgcmVhZC1zaWRlIFJDVSBzZWN0aW9uIGR1cmluZ1xuLS1cbm5ldC9tYWM4MDIxMS9zY2FuLmM9Mjc3PXZvaWQgaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYy0zNTktXG5uZXQvbWFjODAyMTEvc2Nhbi5jOjM2MDpcdC8qIERvIG5vdCB1cGRhdGUgdGhlIEJTUyB0YWJsZSBpbiBjYXNlIG9mIG9ubHkgbW9uaXRvciBpbnRlcmZhY2VzICovXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTM2MS1cdGlmIChsb2NhbC1cdTAwM2VvcGVuX2NvdW50ID09IGxvY2FsLVx1MDAzZW1vbml0b3JzKVxuLS1cbm5ldC9tYWM4MDIxMS9zY2FuLmM9NDQ4PXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYy01MzAtXHQgKi9cbm5ldC9tYWM4MDIxMS9zY2FuLmM6NTMxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3NjYW4uYy01MzItXHRcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYz01OTg9c3RhdGljIGJvb2wgX19pZWVlODAyMTFfY2FuX2xlYXZlX2NoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9zY2FuLmMtNjEyLVxubmV0L21hYzgwMjExL3NjYW4uYzo2MTM6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhX2l0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNjE0LVx0XHRmb3JfZWFjaF92YWxpZF9saW5rKFx1MDAyNnNkYXRhX2l0ZXItXHUwMDNld2RldiwgbGlua19pZClcbi0tXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTkyMz1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9kZWNpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTk0MC1cdCAqL1xubmV0L21hYzgwMjExL3NjYW4uYzo5NDE6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvc2Nhbi5jLTk0Mi1cdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDktICogU3RhdGlvbiBlbnRyaWVzIGFyZSBhZGRlZCBieSBtYWM4MDIxMSB3aGVuIHlvdSBlc3RhYmxpc2ggYSBsaW5rIHdpdGggYVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NTA6ICogcGVlci4gVGhpcyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGZvciB0aGUgZGlmZmVyZW50IHR5cGUgb2YgaW50ZXJmYWNlc1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTEtICogd2Ugc3VwcG9ydC4gRm9yIGEgcmVndWxhciBzdGF0aW9uIHRoaXMgbWVhbiB3ZSBhZGQgdGhlIEFQIHN0YSB3aGVuIHdlXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTI5Mj1zdGF0aWMgYm9vbCBzdGFfaW5mb19jbGVhbnVwX2V4cGlyZV9idWZmZXJlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMjk3LVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTI5ODpcdC8qIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIHN0YXRpb25zIG9uIEJTUy9NQlNTIGludGVyZmFjZXMgKi9cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEyOTktXHRpZiAoIXN0YS1cdTAwM2VzZGF0YS1cdTAwM2Vic3MgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9MzI2PXN0cnVjdCBpZWVlODAyMTFfZmFzdF90eCB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMzQ2LSAqIEBrZXk6IGJvb2wgaW5kaWNhdGluZyBlbmNyeXB0aW9uIGlzIGV4cGVjdGVkIChrZXkgaXMgc2V0KVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6MzQ3OiAqIEBpbnRlcm5hbF9mb3J3YXJkOiBmb3J3YXJkIGZyb21zIGludGVybmFsbHkgb24gQVAvVkxBTiB0eXBlIGludGVyZmFjZXNcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTM0OC0gKiBAdXNlc19yc3M6IGNvcHkgb2YgVVNFU19SU1MgaHcgZmxhZ1xuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz01NzM9aWVlZTgwMjExX3NkYXRhX2Zyb21fc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NzgtXHRpZiAoc2tiLVx1MDAzZWRldikge1xubmV0L21hYzgwMjExL3N0YXR1cy5jOjU3OTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01ODAtXHRcdFx0aWYgKCFzZGF0YS1cdTAwM2VkZXYpXG4tLVxubmV0L21hYzgwMjExL3N0YXR1cy5jLTU4OS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYzo1OTA6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xubmV0L21hYzgwMjExL3N0YXR1cy5jLTU5MS1cdFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz05NDM9dm9pZCBpZWVlODAyMTFfdHhfbW9uaXRvcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtOTUxLVxubmV0L21hYzgwMjExL3N0YXR1cy5jOjk1MjpcdC8qIHNlbmQgZnJhbWUgdG8gbW9uaXRvciBpbnRlcmZhY2VzIG5vdyAqL1xubmV0L21hYzgwMjExL3N0YXR1cy5jLTk1My1cdHJ0YXBfbGVuID0gaWVlZTgwMjExX3R4X3JhZGlvdGFwX2xlbihpbmZvLCBzdGF0dXMpO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy05NjktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6OTcwOlx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy05NzEtXHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MzMwPXN0YXRpYyB2b2lkIHB1cmdlX29sZF9wc19idWZmZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTMzNi1cbm5ldC9tYWM4MDIxMS90eC5jOjMzNzpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG5uZXQvbWFjODAyMTEvdHguYy0zMzgtXHRcdHN0cnVjdCBwc19kYXRhICpwcztcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODAzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzZXF1ZW5jZToKCioqRGVsdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBJbnRlcmZhY2UgUmVtb3ZhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgZm9yIHJlbW92aW5nIHN0YXRpb25zIGFuZCBpbnRlcmZhY2VzIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGhvdyBgY2ZnODAyMTFfZGVsX3N0YWAsIGBjZmc4MDIxMV9kZWxfaWZhY2VgLCBhbmQgdWx0aW1hdGVseSBgaWVlZTgwMjExX2lmX3JlbW92ZWAgZ2V0IGludm9rZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGludGVyZmFjZSByZW1vdmFsIGZ1bmN0aW9uIGJlY2F1c2UgaXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2YgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIGEgc3RhdGlvbi4KCkkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGNvZGUgd2l0aGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgd2hlcmUgYGllZWU4MDIxMV9pZl9yZW1vdmVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zIHRyaWdnZXJpbmcgdGhpcyBjcml0aWNhbCBvcGVyYXRpb24sIGFuZCBob3cgdGhlIHN0YXRpb24mIzM5O3MgcmVtb3ZhbCBmaXRzIGludG8gdGhlIHdob2xlIHByb2Nlc3MuIEkgd2lsbCBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gQW5kIHdoYXQgYXJlIHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zL3JlYXNvbnMgZm9yIHRoZXNlIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfaWZfcmVtb3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9MjA2PXN0YXRpYyBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICppZWVlODAyMTFfYWRkX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIyNS1cdFx0aWYgKGVycikge1xubmV0L21hYzgwMjExL2NmZy5jOjIyNjpcdFx0XHRpZWVlODAyMTFfaWZfcmVtb3ZlKHNkYXRhKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMjctXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI1Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNTMte1xubmV0L21hYzgwMjExL2NmZy5jOjI1NDpcdGllZWU4MDIxMV9pZl9yZW1vdmUoSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNTUtXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE5Nz1pbnQgaWVlZTgwMjExX2lmX2NoYW5nZV90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE5OC1cdFx0XHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMTk5OnZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjAwLXZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMjUyPWludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MzctXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDM4OnZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0Mzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTAzMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQgZnJvbSBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCBsaW5lcyAyNDM1LTI1MTAuCgoqKkRpdmluZyBEZWVwIGludG8gaWZhY2UuYzogQSBEZXRhaWxlZCBMb29rKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IHRoZSBzZWN0aW9uIGZyb20gYGlmYWNlLmNgIG9wZW4gaW4gbXkgbWVudGFsIGVkaXRvci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDI0MzUgdGhyb3VnaCAyNTEwLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHRoZSBpbnRlcmZhY2UgbGF5ZXIgb2YgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrLiBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBJJiMzOTtkIHdhZ2VyIHdlJiMzOTtyZSBsaWtlbHkgaW4gYSBmdW5jdGlvbiBvciBhIGNydWNpYWwgYmxvY2sgZGVhbGluZyB3aXRoIGludGVyZmFjZS1zcGVjaWZpYyBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBicmluZ2luZyBhbiBpbnRlcmZhY2UgdXAsIGRvd24sIG9yIGhhbmRsaW5nIHNvbWUga2luZCBvZiBhc3NvY2lhdGlvbiBvciBjb25maWd1cmF0aW9uIGNoYW5nZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb250cm9sIGZsb3csIGlkZW50aWZ5aW5nIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSByZWxhdGlvbnNoaXBzLiBJJiMzOTttIGdvaW5nIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0bzoKCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gQXJlIHRoZXJlIHJvYnVzdCBlcnJvciBjaGVja3MsIGFuZCBob3cgYXJlIGZhaWx1cmVzIGNvbW11bmljYXRlZD8KKiAgICoqQ29uY3VycmVuY3k6KiogQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgYmVpbmcgbWFuYWdlZD8KKiAgICoqUmVzb3VyY2UgTWFuYWdlbWVudDoqKiBBcmUgdGhlcmUgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGluIHRoaXMgYXJlYT8gSWYgc28sIHdoYXQgbWVjaGFuaXNtcyBhcmUgdXNlZCB0byBwcmV2ZW50IGxlYWtzPwoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBzdHJ1Y3R1cmVzIGFyZSBhdCBwbGF5LCBhbmQgd2hhdCBraW5kIG9mIG1vZGlmaWNhdGlvbnMgYXJlIGdvaW5nIG9uPyBJJiMzOTtsbCBwcm9iYWJseSBzZWUgYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgLCBgc3RydWN0IGllZWU4MDIxMV92aWZgLCBldGMuLCB3aGljaCBJJiMzOTtsbCByZWxhdGUgdG8gbXkgbWVudGFsIG1vZGVsLgoqICAgKipBYnN0cmFjdGlvbiBMZWFrczoqKiBBbSBJIHNlZWluZyB0aGUgY29kZSBtYWtlIGRpcmVjdCBjYWxscyB0byBoYXJkd2FyZSBvciBuZXR3b3JrIHN0YWNrIGVsZW1lbnRzIG9yIGlzIGl0IGFkaGVyaW5nIHRvIGEgbW9yZSBhYnN0cmFjdCBBUEk/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3ZWxsLWRvY3VtZW50ZWQgY29tbWVudHMgYW5kIHZhcmlhYmxlIG5hbWVzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoZSBjb2RlIGRvZXMuIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBmcm9tIGEgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiBob3cgdGhpcyBwaWVjZSBvZiBjb2RlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhpcyBzdWJzeXN0ZW0uIEkmIzM5O20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIGl0IGlzIGFuIG9wdGltaXphdGlvbiBvciBhIHdvcmthcm91bmQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MzU6XHRcdHJldHVybiAwO1xuMjQzNjpcdH1cbjI0Mzc6XHRcbjI0Mzg6XHR2b2lkIGllZWU4MDIxMV9pZl9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4yNDM5Olx0e1xuMjQ0MDpcdFx0QVNTRVJUX1JUTkwoKTtcbjI0NDE6XHRcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbjI0NDI6XHRcbjI0NDM6XHRcdG11dGV4X2xvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4yNDQ0Olx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCk7XG4yNDQ1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4yNDQ2Olx0XG4yNDQ3Olx0XHRpZiAoc2RhdGEtXHUwMDNldmlmLnR4cSlcbjI0NDg6XHRcdFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cdTAwM2Vsb2NhbCwgdG9fdHhxX2luZm8oc2RhdGEtXHUwMDNldmlmLnR4cSkpO1xuMjQ0OTpcdFxuMjQ1MDpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eHFfbWdtdClcbjI0NTE6XHRcdFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cdTAwM2Vsb2NhbCxcbjI0NTI6XHRcdFx0XHRcdCAgICB0b190eHFfaW5mbyhzZGF0YS1cdTAwM2V2aWYudHhxX21nbXQpKTtcbjI0NTM6XHRcbjI0NTQ6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMjQ1NTpcdFxuMjQ1NjpcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KFx1MDAyNnNkYXRhLVx1MDAzZXdkZXYpO1xuMjQ1NzpcdFxuMjQ1ODpcdFx0aWYgKCFzZGF0YS1cdTAwM2VkZXYpIHtcbjI0NTk6XHRcdFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcbjI0NjA6XHRcdFx0a2ZyZWUoc2RhdGEpO1xuMjQ2MTpcdFx0fVxuMjQ2MjpcdH1cbjI0NjM6XHRcbjI0NjQ6XHR2b2lkIGllZWU4MDIxMV9zZGF0YV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuMjQ2NTpcdHtcbjI0NjY6XHRcdGlmIChXQVJOX09OX09OQ0UoIXRlc3RfYml0KFNEQVRBX1NUQVRFX1JVTk5JTkcsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKSkpXG4yNDY3Olx0XHRcdHJldHVybjtcbjI0Njg6XHRcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcbjI0Njk6XHR9XG4yNDcwOlx0XG4yNDcxOlx0dm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4yNDcyOlx0e1xuMjQ3MzpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsICp0bXA7XG4yNDc0Olx0XHRMSVNUX0hFQUQodW5yZWdfbGlzdCk7XG4yNDc1Olx0XG4yNDc2Olx0XHRBU1NFUlRfUlROTCgpO1xuMjQ3NzpcdFxuMjQ3ODpcdFx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBhbGwgc3RvcHBlZCBzb1xuMjQ3OTpcdFx0ICogdGhhdCB0aGUgaGFyZHdhcmUgaXMgc3RvcHBlZC4gT3RoZXJ3aXNlLCB0aGUgZHJpdmVyIG1pZ2h0IHN0aWxsIGJlXG4yNDgwOlx0XHQgKiBpdGVyYXRpbmcgdGhlIGludGVyZmFjZXMgZHVyaW5nIHRoZSBzaHV0ZG93biwgZS5nLiBmcm9tIGEgd29ya2VyXG4yNDgxOlx0XHQgKiBvciBmcm9tIFJYIHByb2Nlc3Npbmcgb3Igc2ltaWxhciwgYW5kIGlmIGl0IGRvZXMgc28gKHVzaW5nIGF0b21pY1xuMjQ4MjpcdFx0ICogaXRlcmF0aW9uKSB3aGlsZSB3ZSYjMzk7cmUgbWFuaXB1bGF0aW5nIHRoZSBsaXN0LCB0aGUgaXRlcmF0aW9uIHdpbGxcbjI0ODM6XHRcdCAqIGNyYXNoLlxuMjQ4NDpcdFx0ICpcbjI0ODU6XHRcdCAqIEFmdGVyIHRoaXMsIHRoZSBoYXJkd2FyZSBzaG91bGQgYmUgc3RvcHBlZCBhbmQgdGhlIGRyaXZlciBzaG91bGRcbjI0ODY6XHRcdCAqIGhhdmUgc3RvcHBlZCBhbGwgb2YgaXRzIGFjdGl2aXRpZXMsIHNvIHRoYXQgd2UgY2FuIGRvIFJDVS11bmF3YXJlXG4yNDg3Olx0XHQgKiBtYW5pcHVsYXRpb25zIG9mIHRoZSBpbnRlcmZhY2UgbGlzdCBiZWxvdy5cbjI0ODg6XHRcdCAqL1xuMjQ4OTpcdFx0Y2ZnODAyMTFfc2h1dGRvd25fYWxsX2ludGVyZmFjZXMobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuMjQ5MDpcdFxuMjQ5MTpcdFx0Z3VhcmQod2lwaHkpKGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbjI0OTI6XHRcbjI0OTM6XHRcdFdBUk4obG9jYWwtXHUwMDNlb3Blbl9jb3VudCwgXCYjMzQ7JXM6IG9wZW4gY291bnQgcmVtYWlucyAlZFxcblwmIzM0OyxcbjI0OTQ6XHRcdCAgICAgd2lwaHlfbmFtZShsb2NhbC1cdTAwM2Vody53aXBoeSksIGxvY2FsLVx1MDAzZW9wZW5fY291bnQpO1xuMjQ5NTpcdFxuMjQ5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2VpZmxpc3RfbXR4KTtcbjI0OTc6XHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgXHUwMDI2dW5yZWdfbGlzdCk7XG4yNDk4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlaWZsaXN0X210eCk7XG4yNDk5Olx0XG4yNTAwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RhdGEsIHRtcCwgXHUwMDI2dW5yZWdfbGlzdCwgbGlzdCkge1xuMjUwMTpcdFx0XHRib29sIG5ldGRldiA9IHNkYXRhLVx1MDAzZWRldjtcbjI1MDI6XHRcbjI1MDM6XHRcdFx0LypcbjI1MDQ6XHRcdFx0ICogUmVtb3ZlIElQIGFkZHJlc3NlcyBleHBsaWNpdGx5LCBzaW5jZSB0aGUgbm90aWZpZXIgd2lsbFxuMjUwNTpcdFx0XHQgKiBza2lwIHRoZSBjYWxsYmFja3MgaWYgd2Rldi1cdTAwM2VyZWdpc3RlcmVkIGlzIGZhbHNlLCBzaW5jZVxuMjUwNjpcdFx0XHQgKiB3ZSBjYW4mIzM5O3QgYWNxdWlyZSB0aGUgd2lwaHlfbG9jaygpIGFnYWluIHRoZXJlIGlmIGFscmVhZHlcbjI1MDc6XHRcdFx0ICogaW5zaWRlIHRoaXMgbG9ja2VkIHNlY3Rpb24uXG4yNTA4Olx0XHRcdCAqL1xuMjUwOTpcdFx0XHRzZGF0YS1cdTAwM2V2aWYuY2ZnLmFycF9hZGRyX2NudCA9IDA7XG4yNTEwOlx0XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuMjUxMTpcdFx0XHQgICAgc2RhdGEtXHUwMDNldS5tZ2QuYXNzb2NpYXRlZClcbjI1MTI6XHRcdFx0XHRpZWVlODAyMTFfdmlmX2NmZ19jaGFuZ2Vfbm90aWZ5KHNkYXRhLFxuMjUxMzpcdFx0XHRcdFx0XHRcdFx0QlNTX0NIQU5HRURfQVJQX0ZJTFRFUik7XG4yNTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBVbmluaXRpYWxpemluZyBhIE5ldGRldiBXaXRob3V0IEV4cGxpY2l0IE1hYzgwMjExIFJlbW92YWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgcG90ZW50aWFsIGZhbGxvdXQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkgaXMgdW5pbml0aWFsaXplZCBvciB1bnJlZ2lzdGVyZWQsIGJ1dCB3aXRob3V0IGBtYWM4MDIxMWAgZXhwbGljaXRseSBjYWxsaW5nIGBpZWVlODAyMTFfaWZfcmVtb3ZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4YW1pbmluZyB0aGUgYGllZWU4MDIxMV91bmluaXRgIGZ1bmN0aW9uLiBCZWZvcmUgdGhlIHJlY2VudCBwYXRjaCwgdGhpcyBmdW5jdGlvbiB3YXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBjYWxsaW5nIGBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGFgLiBIb3dldmVyLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgLiBUaGlzIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgYSBzdWItaW50ZXJmYWNlIGRhdGEgc3RydWN0dXJlIChgc2RhdGFgKSBmcm9tIGEgbGlua2VkIGxpc3QgKGBsb2NhbC0mZ3Q7aW50ZXJmYWNlc2ApLiBUaGUgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgdGhlIGBpZmxpc3RfbXR4YCBtdXRleC4gVGhlIGBsaXN0X2RlbF9yY3VgIGNhbGwgaGVyZSBpcyBpbXBvcnRhbnQgZm9yIHRoZSBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIG1lY2hhbmlzbSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIgZm9yIGNvbmN1cnJlbmN5IGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuCgpOb3csIGFmdGVyIHRoZSBwYXRjaCwgYGllZWU4MDIxMV91bmluaXRgIG5vdyBjYWxscyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYW5kICp0aGVuKiBjYWxscyBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhYC4gU28gdGhlIG9yZGVyIGlzIGNsZWFybHkgcmVsZXZhbnQ6IFVubGlzdCAqdGhlbiogdGVhcmRvd24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY2xvc2VseSBpbnNwZWN0IGxpbmVzIDE1MC0yNTAgYW5kIGxpbmVzIDE4ODAtMTkxMCB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBob3cgdGhvc2UgcGFydHMgdGllIGludG8gdGhpcyBmbG93LCBhbmQgd2hhdCBvdGhlciBhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudCBkdXJpbmcgZGV2aWNlIHVuaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIG90aGVyIHN1YnRsZSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHRoZSBub3JtYWwgcmVtb3ZhbCBwcm9jZWR1cmUgaXNuJiMzOTt0IGZvbGxvd2VkLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgd2hhdCBoYXBwZW5zIGlmIHRoZSBkcml2ZXIgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIHVubGlzdGVkIG9yIHRvcm4tZG93biBzdWItaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcbiAxNTE6XHRcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4gMTUyOlx0XG4gMTUzOlx0XHRyZXR1cm4gMDtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0c3RhdGljIGludCBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIDE1NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuIDE1ODpcdHtcbiAxNTk6XHRcdGludCBlcnI7XG4gMTYwOlx0XG4gMTYxOlx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE2MjpcdFx0XHRyZXR1cm4gMDtcbiAxNjM6XHRcbiAxNjQ6XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuIDE2NTpcdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4gMTY2Olx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuIDE2NzpcdFxuIDE2ODpcdFx0cmV0dXJuIGVycjtcbiAxNjk6XHR9XG4gMTcwOlx0XG4gMTcxOlx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMTcyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4gMTczOlx0e1xuIDE3NDpcdFx0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiAxNzU6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7XG4gMTc2Olx0XHRpbnQgZXJyID0gMDtcbiAxNzc6XHRcbiAxNzg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gMTc5Olx0XHRcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XG4gMTgwOlx0XHRcdGlmICghZXJyKVxuIDE4MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDE4MjpcdFx0XHRpZiAoIWZvcmNlKVxuIDE4MzpcdFx0XHRcdGdvdG8gdW5kbztcbiAxODQ6XHRcdFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xuIDE4NTpcdFx0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuIDE4NjpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpXG4gMTg3Olx0XHRcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHdkZXYpO1xuIDE4ODpcdFx0XHRlcnIgPSAwO1xuIDE4OTpcdFx0fVxuIDE5MDpcdFxuIDE5MTpcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSB7XG4gMTkyOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbiAxOTM6XHRcdFx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE5NDpcdFx0XHRcdFx0Y29udGludWU7XG4gMTk1Olx0XHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcbiAxOTY6XHRcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiAxOTc6XHRcdFx0fVxuIDE5ODpcdFxuIDE5OTpcdFx0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuIDIwMDpcdFxuIDIwMTpcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4gMjAyOlx0XG4gMjAzOlx0XHRcdC8qIHRoaXMgb25seSBmYWlscyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbiAyMDQ6XHRcdFx0ZXJyID0gZGV2aWNlX3JlbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldixcbiAyMDU6XHRcdFx0XHRcdCAgICBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuIDIwNjpcdFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhZm9yY2UpXG4gMjA3Olx0XHRcdFx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBvbGRfbmV0KTtcbiAyMDg6XHRcbiAyMDk6XHRcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiAyMTA6XHRcbiAyMTE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuIDIxMjpcdFx0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4gMjEzOlx0XHRcdFx0XHRjb250aW51ZTtcbiAyMTQ6XHRcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuIDIxNTpcdFx0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuIDIxNjpcdFx0XHR9XG4gMjE3Olx0XHR9XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAoIWVyciB8fCBmb3JjZSlcbiAyMjA6XHRcdFx0cmV0dXJuIGVycjtcbiAyMjE6XHRcbiAyMjI6XHRcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xuIDIyMzpcdFx0d2RldiA9IGxpc3RfZW50cnkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIHR5cGVvZigqd2RldiksIGxpc3QpO1xuIDIyNDpcdHVuZG86XG4gMjI1Olx0XHQvKlxuIDIyNjpcdFx0ICogTW92ZSBiYWNrIGV2ZXJ5dGhpbmcsIGlmIHRoaXMgZmFpbHMgYWdhaW4gKGFsbG9jYXRpb24gZmFpbHVyZXMpXG4gMjI3Olx0XHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cbiAyMjg6XHRcdCAqL1xuIDIyOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LFxuIDIzMDpcdFx0XHRcdFx0XHQgICAgIGxpc3QpXG4gMjMxOlx0XHRcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2Rldiwgb2xkX25ldCkpO1xuIDIzMjpcdFxuIDIzMzpcdFx0cmV0dXJuIGVycjtcbiAyMzQ6XHR9XG4gMjM1Olx0XG4gMjM2Olx0aW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMjM3Olx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXG4gMjM4Olx0e1xuIDIzOTpcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19ORVROU19PSykpXG4gMjQwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAyNDE6XHRcbiAyNDI6XHRcdHJldHVybiBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBuZXQsIGZhbHNlKTtcbiAyNDM6XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0c3RhdGljIHZvaWQgY2ZnODAyMTFfcmZraWxsX3BvbGwoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKVxuIDI0NjpcdHtcbiAyNDc6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRhdGE7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRndWFyZCh3aXBoeSkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgY2ZnODAyMTFfcGVybmV0X2V4aXRgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGNmZzgwMjExX3Blcm5ldF9leGl0YC4gVGhpcyBmdW5jdGlvbi4uLiBpdCYjMzk7cyBjcnVjaWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBjbGVhbmluZyB1cCB0aGUgcGVyLW5ldCBkZXZpY2Ugc3RhdGUgd2l0aGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRldmljZSByZW1vdmFsLCBtb2R1bGUgdW5sb2FkLCBhbmQgZ2VuZXJhbGx5LCBncmFjZWZ1bCBzaHV0ZG93biBvZiBuZXR3b3JrIG5hbWVzcGFjZXMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNsZWFuZWQgdXAgaGVyZT8gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgdW5yZWdpc3RyYXRpb24gcHJvY2Vzcywgb3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIHBlcmhhcHMgd2l0aCBvdXRzdGFuZGluZyB3b3JrcXVldWVzIG9yIGRlZmVycmVkIGV2ZW50cyByZWxhdGVkIHRvIHdpcmVsZXNzIG9wZXJhdGlvbnM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgdGVhcmRvd24gdGhhdCBuZWVkIGNsb3NlciBzY3J1dGlueT8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvcmUgY2ZnODAyMTEgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgcmVsYXRlZCB0byByZWdpc3RyYXRpb24sIHVucmVnaXN0cmF0aW9uLCBhbmQgZXZlbnQgaGFuZGxpbmcgd2l0aGluIHRoYXQgbmV0d29yayBuYW1lc3BhY2UgY29udGV4dC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBmcmVlaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCDigJMgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZS1mcmVlcyBsdXJraW5nIGhlcmU/IEkmIzM5O20gaG9waW5nIHRoZSBjb2RlIGlzIGNsZWFuLCBidXQgeW91IG5ldmVyIGtub3cuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIGEgcm9idXN0IGFuZCBzdGFibGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODg1Olx0c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIgPSB7XG4xODg2Olx0XHQubm90aWZpZXJfY2FsbCA9IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsLFxuMTg4NzpcdH07XG4xODg4Olx0XG4xODg5Olx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4xODkwOlx0e1xuMTg5MTpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuMTg5MjpcdFxuMTg5MzpcdFx0cnRubF9sb2NrKCk7XG4xODk0Olx0XHRmb3JfZWFjaF9yZGV2KHJkZXYpIHtcbjE4OTU6XHRcdFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSksIG5ldCkpXG4xODk2Olx0XHRcdFx0V0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCwgdHJ1ZSkpO1xuMTg5NzpcdFx0fVxuMTg5ODpcdFx0cnRubF91bmxvY2soKTtcbjE4OTk6XHR9XG4xOTAwOlx0XG4xOTAxOlx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBjZmc4MDIxMV9wZXJuZXRfb3BzID0ge1xuMTkwMjpcdFx0LmV4aXQgPSBjZmc4MDIxMV9wZXJuZXRfZXhpdCxcbjE5MDM6XHR9O1xuMTkwNDpcdFxuMTkwNTpcdHZvaWQgd2lwaHlfd29ya19xdWV1ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbjE5MDY6XHR7XG4xOTA3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbjE5MDg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xOTA5Olx0XG4xOTEwOlx0XHR0cmFjZV93aXBoeV93b3JrX3F1ZXVlKHdpcGh5LCB3b3JrKTtcbjE5MTE6XHRcbjE5MTI6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHlfd29ya19sb2NrLCBmbGFncyk7XG4xOTEzOlx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ3b3JrLVx1MDAzZWVudHJ5KSlcbjE5MTQ6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ3b3JrLVx1MDAzZWVudHJ5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5X3dvcmtfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgTGludXggV2lyZWxlc3MgTmV0d29yayBOYW1lc3BhY2UgVHJhbnNpdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgbmFtZXNwYWNlIHRyYW5zaXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbXMsIGBjZmc4MDIxMWAgYW5kIGBtYWM4MDIxMWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBzdWJzeXN0ZW1zIGFyZSByZWFjaGFibGUgYW5kIGhvdyBuYW1lc3BhY2Ugc3dpdGNoaW5nIGlzIGhhbmRsZWQuCgpSaWdodCwgSSYjMzk7dmUgZ290IGl0LiBJIGNhbiBjcmVhdGUgYW5kIG1hbmFnZSB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMsIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgdmlydF93aWZpYCwgdXNpbmcgbmV0bGluayAoYG5sODAyMTFgKS4gVGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHRyaWdnZXIgbmFtZXNwYWNlIHN3aXRjaGluZy4gSSByZW1lbWJlciB0aGF0IG5ldGxpbmsgb2ZmZXJzIGEgZmV3IG1ldGhvZHMsIGxpa2UgYE5MODAyMTFfQ01EX1NFVF9XSVBIWWAgaW4gY29uanVuY3Rpb24gd2l0aCBgTkw4MDIxMV9BVFRSX05FVE5TX1BJRGAgb3IgYE5MODAyMTFfQVRUUl9ORVROU19GRGAuIFRoYXQgc2VlbXMgcHJldHR5IHN0YW5kYXJkLiBBbHNvLCBuYW1lc3BhY2UgZXhpdCB1c2luZyBgY2ZnODAyMTFfcGVybmV0X2V4aXRgLgoKSSBhbHNvIHJlY2FsbCB0aGF0IGR1cmluZyBpbnRlcmZhY2UgdGVhcmRvd24gb3IgbmFtZXNwYWNlIGRlc3RydWN0aW9uLCB0aGluZ3MgbGlrZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBhcmUgZXhlY3V0ZWQsIHdoaWNoIGFyZSBjcnVjaWFsIGNsZWFudXAgb3BlcmF0aW9ucy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGxvb2sgYXQgd2hlcmUgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AgaXMgYWN0dWFsbHkgKmNhbGxlZCouIEkgbmVlZCB0byBzZWUgdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTGV0IG1lIGRpZyBpbnRvIHRoZSBjb2RlIHVuZGVyIGBuZXQvd2lyZWxlc3MvYCBhbmQgZWxzZXdoZXJlLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV9zd2l0Y2hfbmV0bnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmM9MTU2PXN0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3MC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTcxOnN0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzItXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMzUtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjIzNjppbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjM3LVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjQxLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNDI6XHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0My19XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xODg5PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTg5NS1cdFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSksIG5ldCkpXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE4OTY6XHRcdFx0V0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCwgdHJ1ZSkpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xODk3LVx0fVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9MjQzPXN0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpO1xubmV0L3dpcmVsZXNzL2NvcmUuaC0yNDQtXG5uZXQvd2lyZWxlc3MvY29yZS5oOjI0NTppbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmgtMjQ2LVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0MzU3PXN0YXRpYyBpbnQgbmw4MDIxMV93aXBoeV9uZXRucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzOTQtXHRpZiAoIW5ldF9lcSh3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSksIG5ldCkpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0Mzk1Olx0XHRlcnIgPSBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzOTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBtYWM4MDIxMSBJbnRlcmZhY2UgVW5pbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSAqZGVmaW5pdGVseSogcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCmBpZWVlODAyMTFfdW5pbml0YCBpcyBlc3NlbnRpYWxseSB0aGUgYG5kb191bmluaXRgIGNhbGxiYWNrIHdpdGhpbiBgbmV0X2RldmljZV9vcHNgLCBzcGVjaWZpY2FsbHkgZGVmaW5lZCB3aXRoaW4gYGllZWU4MDIxMV9kYXRhaWZfb3BzYC4gVGhpcyBtZWFucyBpdCBnZXRzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCB0cmlnZ2VyZWQgYnkgYWN0aW9ucyBsaWtlIGB1bnJlZ2lzdGVyX25ldGRldmljZWAgb3IgYHJvbGxiYWNrX3JlZ2lzdGVyZWRfbWFueWAuIFdpdGggdGhlIHBhdGNoIGluIHF1ZXN0aW9uLCB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHJlbW92ZXMgdGhlIGBzZGF0YWAgc3RydWN0dXJlIGZyb20gYGxvY2FsLSZndDtpbnRlcmZhY2VzYCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkICp3aXRob3V0KiBhIHByaW9yIGBpZWVlODAyMTFfaWZfcmVtb3ZlYCBjYWxsLiBUaGlzIHNjZW5hcmlvIGFyaXNlcywgZm9yIGluc3RhbmNlLCB3aGVuIGBjZmc4MDIxMWAgZmFpbHMgdG8gbW92ZSB0aGUgZGV2aWNlIG91dCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlIHRoYXQmIzM5O3MgYmVpbmcgZGVzdHJveWVkLCBvciBkdXJpbmcgZm9yY2VkIHVucmVnaXN0ZXJzIChlLmcuLCB3aGVuIHVucmVnaXN0ZXJpbmcgYSB3aXJlbGVzcyBkZXZpY2Ugb3IgbmV0IGRldmljZSkgYW5kIG5hbWVzcGFjZSBpc3N1ZXMuCgpUaGUgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zYCBmdW5jdGlvbiBub3cgaGFzIGEgYGZvcmNlYCBwYXJhbWV0ZXIuIFdoZW4gc2V0IHRvIHRydWUsIGl0IGZvcmNlcyB0aGUgdW5yZWdpc3RyYXRpb24gb2Ygd2lyZWxlc3MgZGV2aWNlcyB0aGF0IGZhaWwgdG8gc3dpdGNoIG5hbWVzcGFjZXMuIFRoaXMgc2VlbXMgZGlyZWN0bHkgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZSBleGl0LCB3aGljaCBpcyBhbm90aGVyIGFyZWEgSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiByZWNlbnRseS4KCkdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGludm9sdmVkIGluIGNvcmUgd2lyZWxlc3MgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCB0b3VjaGluZyBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAgYW5kIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSBoaWdoIHByaW9yaXR5LiBUaGUgY29kZSBwYXRoIGFwcGVhcnMgcmVhY2hhYmxlLCBhbmQgY29tcGxleCBlbm91Z2ggdG8gd2FycmFudCBleHRlbnNpdmUgZnV6emluZy4gYFdvcnRoRnV6emluZyA9IHRydWVgLgoKSSYjMzk7bGwgbm93IGNhcmVmdWxseSB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIHJlbGV2YW50IHN5bWJvbHMgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCB0byBiZSBlbmFibGVkLCBhbmQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHdpdGhpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXHRib29sIFwmIzM0O2VuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXHRib29sIFwmIzM0O3JlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDthbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXHRzdHJpbmcgXCYjMzQ7YWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O2NmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVx0Ym9vbCBcJiMzNDtlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7c3VwcG9ydCBDUkRBXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1Rcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBjZmc4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDYzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmb3IgYENGRzgwMjExYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRpZ2h0bHkgYENGRzgwMjExYCBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLiBUaGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3aXJlbGVzcywgaW5jbHVkaW5nIGxpa2VseSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ0ZHODAyMTFgLCBzaG91bGQgYmUgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIHJlbHkgb24sIG9yIGFyZSBhY3RpdmF0ZWQgYnksIGBDRkc4MDIxMWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaG93IGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgd291bGQgYWZmZWN0IHRoZSBvdmVyYWxsIHdpcmVsZXNzIGZ1bmN0aW9uYWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBtYXAgb3V0IHRoZSAmIzM0O2luZmx1ZW5jZSYjMzQ7IG9mIHRoaXMgY29yZSBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0lSRUxFU1NfRVhUXG4gICAzOlx0XHRib29sXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFdFWFRfQ09SRVxuICAgNjpcdFx0ZGVmX2Jvb2wgeVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBXRVhUX1BST0NcbiAgMTA6XHRcdGRlZl9ib29sIHlcbiAgMTE6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgV0VYVF9QUklWXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIENGRzgwMjExXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gIDIwOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjI6XHRcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxuICAyMzpcdFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJiMzOTt0XG4gIDI0Olx0XHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cbiAgMjg6XHRcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDMxOlx0XG4gIDMyOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxuICAzMzpcdFxuICAzNDpcdFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxuICAzNTpcdFxuICAzNjpcdGlmIENGRzgwMjExXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7bmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MjQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmNpZXMgLSBJbnZlc3RpZ2F0aW5nIHRoZSBOZXR3b3JrIEtlcm5lbCBNb2R1bGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkcml2aW5nIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IGl0cyBkZXBlbmRlbmNpZXMsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHdoaWNoIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIG9wdGlvbnMgYXJlIHJlcXVpcmVkIG9yIGltcGFjdGVkIGJ5IGl0cyBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIGZvciBtZSB0byBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhlc2UgcmVsYXRpb25zaGlwczsgdGhpcyB3aWxsIGVuYWJsZSBtZSB0byB0cmFjayBkb3duIHRoZSByb290IGNhdXNlIG9mIHRoZSBjdXJyZW50IGlzc3VlIGFuZCB0byBwcm92aWRlIGFuIGVmZmVjdGl2ZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNQUM4MDIxMVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ0NNXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXG4gIDE0Olx0XHQgIG5ldHdvcmtpbmcgc3RhY2suXG4gIDE1Olx0XG4gIDE2Olx0Y29tbWVudCBcJiMzNDtDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXG4gIDE4Olx0XG4gIDE5Olx0aWYgTUFDODAyMTEgIT0gblxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODcyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBOYW1lc3BhY2UgU3dpdGNoaW5nIGluIFdpcmVsZXNzIFN1YnN5c3RlbXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBpbXBsZW1lbnRhdGlvbiBmb3Igd2lyZWxlc3MsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zOiBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFgLCBhbG9uZ3NpZGUgdGhlIHN0YW5kYXJkIGBORVRgIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdpbmcuIExldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIGFmZmVjdGVkIGJ5IHRoaXMuCgpJbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCBJIHNlZSBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYW5kIGBpZWVlODAyMTFfdW5pbml0YCBhcmUgYmVpbmcgdG91Y2hlZC4gVGhlbiwgb3ZlciBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIEkmIzM5O3ZlIGdvdCBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNgIGFuZCBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIOKAkyBib3RoIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgZGlzdGluY3Qgb3IgaW5saW5lZCDigJMgYWxvbmcgd2l0aCB0aGUgZ2xvYmFsbHkgZXhwb3J0ZWQgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AsIGFuZCBmaW5hbGx5LCB0aGUgc3RhdGljIHBlcm5ldCBleGl0IGNhbGxiYWNrIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgZGlzdGluY3RuZXNzIG9yIGlubGluaW5nIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEkmIzM5O2xsIGZsYWcgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgLCBgaWVlZTgwMjExX3VuaW5pdGAsIGBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc2AsIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2AsIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgLCBhbmQgYGNmZzgwMjExX3Blcm5ldF9leGl0YCBmb3IgdGhhdCBjaGVjay4KCkFsc28sIGl0JiMzOTtzIGNydWNpYWwgdG8gZmluZCB0aGUgZW50cnkgcG9pbnQsIHRoZSBjYWxsZXIuIEkgc2VlIGBubDgwMjExX3dpcGh5X25ldG5zYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgYXMgYSBkaXJlY3QgbmV0bGluayBoYW5kbGVyIGNhbGxpbmcgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AuIEkgd2lsbCBiZSBjaGVja2luZyBpbnRvIGBubDgwMjExX3dpcGh5X25ldG5zYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV93aXBoeV9uZXRucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDMzND1zdGF0aWMgaW50IG5sODAyMTFfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzNTYtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0MzU3OnN0YXRpYyBpbnQgbmw4MDIxMV93aXBoeV9uZXRucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDM1OC17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDA2Ni1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDA2NzpcdFx0LmRvaXQgPSBubDgwMjExX3dpcGh5X25ldG5zLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDA2OC1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4ODkKCQkJCQkJCW91dHB1dDogMjU1CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXROUyBXaXJlbGVzcyBJbnRlcmZhY2UgU3dpdGNoaW5nKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB2aWV3IGhlcmUuIEkmIzM5O20gc2VlaW5nIGEgY29yZSBzZXQgb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gd2lyZWxlc3MgbmV0d29yayBuYW1lc3BhY2Ugc3dpdGNoaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AKKiAgIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2AKKiAgIGBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc2AKKiAgIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAKKiAgIGBubDgwMjExX3dpcGh5X25ldG5zYAoqICAgYGllZWU4MDIxMV91bmluaXRgCiogICBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAKCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyDigJMgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGNvbmZpZ3VyYXRpb25zLCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ0ZHODAyMTFgIG9yIGBNQUM4MDIxMWAgbW9yZSBnZW5lcmFsbHkuIFRoZW4sIGxldCYjMzk7cyBjb25maXJtIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLgoKWXVwLCB0aGlzIGxvb2tzIHdvcnRod2hpbGUuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwgd2lyZWxlc3MgbmV0bnMgc3dpdGNoaW5nIGxvZ2ljIHdpdGhpbiBgY2ZnODAyMTFgIGFuZCBhbHNvIGRlYWxpbmcgd2l0aCBpbnRlcmZhY2UgdW5saXN0aW5nIGluIGBtYWM4MDIxMWAsIGFsbCBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb24gb3IgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uLiBUaGVzZSBwYXRocyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcyBvciB3aGVuIHRlYXJpbmcgZG93biBuZXR3b3JrIG5hbWVzcGFjZXMsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCYjMzk7cyBhbGwgY2xlYXIsIHRoZSBhbmFseXNpcyBzZWVtcyBzb2xpZC4gT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX3N3aXRjaF9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wZXJuZXRfZXhpdCYjMzQ7LAogICAgJiMzNDtubDgwMjExX3dpcGh5X25ldG5zJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV91bmluaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VubGlzdF9zZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi91bmxpc3RpbmcgbG9naWMgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgaGFuZGxpbmcgb2YgaW50ZXJmYWNlcyBmYWlsaW5nIHRvIHN3aXRjaCBuYW1lc3BhY2VzIG9uIG5ldG5zIGV4aXQgYW5kIGVuc3VyZXMgbWFjODAyMTEgZHJvcHMgbmV0ZGV2cyBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCB1cG9uIHVuaW5pdC4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIHdpdGggdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChlLmcuLCBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfc3dpdGNoX25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3Blcm5ldF9leGl0JiMzNDssCiAgICAmIzM0O25sODAyMTFfd2lwaHlfbmV0bnMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdW5saXN0X3NkYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M3NmEwNGQ0NTM1OTVlMjU3ZGIyMzYyODRlYzllYzgzN2Q4NzU2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDE6MzM6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC05MjQsOSAmIzQzOzkyNCwzMyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2CiYjNDM7ICogY29yZSB3aGVuIGNmZzgwMjExIGNvdWxkbiYjMzk7dCBtb3ZlIGl0IG91dCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlIHRoYXQmIzM5O3MgYmVpbmcKJiM0MzsgKiBkZXN0cm95ZWQuIERyb3AgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgZWl0aGVyIHdheS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5saXN0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0mZ3Q7bG9jYWw7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKml0ZXI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJmFtcDtsb2NhbC0mZ3Q7aW50ZXJmYWNlcywgbGlzdCkgewomIzQzOwkJaWYgKGl0ZXIgIT0gc2RhdGEpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlndWFyZChtdXRleCkoJmFtcDtsb2NhbC0mZ3Q7aWZsaXN0X210eCk7CiYjNDM7CQlsaXN0X2RlbF9yY3UoJmFtcDtzZGF0YS0mZ3Q7bGlzdCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldikpOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiYjNDM7CiYjNDM7CWllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc2RhdGEpOwomIzQzOwlpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjMxZDBmNzA4NjcwMTIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMTUzLDY4ICYjNDM7MTUzLDkzIEBAIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkgIHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgaW50IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwotCWludCBlcnIgPSAwOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKCEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19ORVROU19PSykpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiYjNDM7CXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7CiYjNDM7CWVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LSZndDtuZXRkZXYsIG5ldCwgJiMzNDt3bGFuJWQmIzM0Oyk7CiYjNDM7CXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm9sZF9uZXQgPSB3aXBoeV9uZXQoJmFtcDtyZGV2LSZndDt3aXBoeSk7CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewomIzQzOwkJZXJyID0gY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2RldiwgbmV0KTsKJiM0MzsJCWlmICghZXJyKQogCQkJY29udGludWU7Ci0JCXdkZXYtJmd0O25ldGRldi0mZ3Q7bmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7Ci0JCWVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LSZndDtuZXRkZXYsIG5ldCwgJiMzNDt3bGFuJWQmIzM0Oyk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSB0cnVlOwomIzQzOwkJaWYgKCFmb3JjZSkKJiM0MzsJCQlnb3RvIHVuZG87CiYjNDM7CQkvKiByZW1vdmUgaW50ZXJmYWNlcyB0aGF0IGZhaWwgdG8gYWxsb3cgd2lwaHkgc3dpdGNoaW5nICovCiYjNDM7CQlkZXZfY2xvc2Uod2Rldi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCXNjb3BlZF9ndWFyZCh3aXBoeSwgJmFtcDtyZGV2LSZndDt3aXBoeSkKJiM0MzsJCQljZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7CiYjNDM7CQllcnIgPSAwOwogCX0KIAotCWlmIChlcnIpIHsKLQkJLyogZmFpbGVkIC0tIGNsZWFuIHVwIHRvIG9sZCBuZXRucyAqLwotCQluZXQgPSB3aXBoeV9uZXQoJmFtcDtyZGV2LSZndDt3aXBoeSk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsCi0JCQkJCQkgICAgICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LAotCQkJCQkJICAgICBsaXN0KSB7CiYjNDM7CXNjb3BlZF9ndWFyZCh3aXBoeSwgJmFtcDtyZGV2LSZndDt3aXBoeSkgewomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewogCQkJaWYgKCF3ZGV2LSZndDtuZXRkZXYpCiAJCQkJY29udGludWU7Ci0JCQl3ZGV2LSZndDtuZXRkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IGZhbHNlOwotCQkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtJmd0O25ldGRldiwgbmV0LAotCQkJCQkJCSYjMzQ7d2xhbiVkJiMzNDspOwotCQkJV0FSTl9PTihlcnIpOwotCQkJd2Rldi0mZ3Q7bmV0ZGV2LSZndDtuZXRuc19pbW11dGFibGUgPSB0cnVlOwomIzQzOwkJCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsCiYjNDM7CQkJCQkgICAgIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpOwogCQl9CiAKLQkJcmV0dXJuIGVycjsKLQl9CiYjNDM7CQlubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpOwogCi0JZ3VhcmQod2lwaHkpKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwomIzQzOwkJd2lwaHlfbmV0X3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LCBuZXQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXdkZXYtJmd0O25ldGRldikKLQkJCWNvbnRpbnVlOwotCQlubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTsKLQl9CiYjNDM7CQkvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovCiYjNDM7CQllcnIgPSBkZXZpY2VfcmVuYW1lKCZhbXA7cmRldi0mZ3Q7d2lwaHkuZGV2LAomIzQzOwkJCQkgICAgZGV2X25hbWUoJmFtcDtyZGV2LSZndDt3aXBoeS5kZXYpKTsKJiM0MzsJCWlmIChlcnIgJmFtcDsmYW1wOyAhZm9yY2UpCiYjNDM7CQkJd2lwaHlfbmV0X3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LCBvbGRfbmV0KTsKIAotCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7CiYjNDM7CQlubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpOwogCi0Jd2lwaHlfbmV0X3NldCgmYW1wO3JkZXYtJmd0O3dpcGh5LCBuZXQpOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewomIzQzOwkJCWlmICghd2Rldi0mZ3Q7bmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LAomIzQzOwkJCQkJICAgICBOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFKTsKJiM0MzsJCX0KJiM0MzsJfQogCi0JZXJyID0gZGV2aWNlX3JlbmFtZSgmYW1wO3JkZXYtJmd0O3dpcGh5LmRldiwgZGV2X25hbWUoJmFtcDtyZGV2LSZndDt3aXBoeS5kZXYpKTsKLQlXQVJOX09OKGVycik7CiYjNDM7CWlmICghZXJyIHx8IGZvcmNlKQomIzQzOwkJcmV0dXJuIGVycjsKIAotCW5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7CiYjNDM7CS8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqLwomIzQzOwl3ZGV2ID0gbGlzdF9lbnRyeSgmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7CiYjNDM7dW5kbzoKJiM0MzsJLyoKJiM0MzsJICogTW92ZSBiYWNrIGV2ZXJ5dGhpbmcsIGlmIHRoaXMgZmFpbHMgYWdhaW4gKGFsbG9jYXRpb24gZmFpbHVyZXMpCiYjNDM7CSAqIHRoZW4gdGhpbmdzIGdldCBzdHVjayBpbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LAomIzQzOwkJCQkJICAgICBsaXN0KQomIzQzOwkJV0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7Ci0JCWlmICghd2Rldi0mZ3Q7bmV0ZGV2KQotCQkJY29udGludWU7Ci0JCW5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpOwotCX0KJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiAKLQlyZXR1cm4gMDsKJiM0MztpbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CWlmICghKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfTkVUTlNfT0spKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSkKQEAgLTE4NjgsNyAmIzQzOzE4OTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGNmZzgwMjExX3Blcm5ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIAlydG5sX2xvY2soKTsKIAlmb3JfZWFjaF9yZGV2KHJkZXYpIHsKIAkJaWYgKG5ldF9lcSh3aXBoeV9uZXQoJmFtcDtyZGV2LSZndDt3aXBoeSksIG5ldCkpCi0JCQlXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCAmYW1wO2luaXRfbmV0KSk7CiYjNDM7CQkJV0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCAmYW1wO2luaXRfbmV0LCB0cnVlKSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGludXggS2VybmVsIFBhdGNoIGZvciBLTVNBTiBOZWVkcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGRpZyBpbnRvIHRoaXMga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gRmlyc3QsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZGVmZW5zaXZlIHNlY3VyaXR5L2NvZGUgcXVhbGl0eSB0YXNrLiBObyBleHBsb2l0IGdlbmVyYXRpb24gb3IgYW55dGhpbmcgbGlrZSB0aGF0LiBXZSYjMzk7cmUgbG9va2luZyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIGJ1Z3MuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgYW5kIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gSW4gYGlmYWNlLmNgLCB0aGUga2V5IGFkZGl0aW9uIGlzIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0IGl0ZXJhdGVzIHRocm91Z2ggYSBsaXN0LCByZW1vdmVzIGFuIGVudHJ5IGlmIGl0IGZpbmRzIGEgbWF0Y2gsIGFsbCB3aGlsZSBwcm90ZWN0ZWQgYnkgYSBtdXRleC4gVGhlbiwgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdGAgYmVmb3JlIGBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGFgLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9ucywgYnV0IGF0IGEgZ2xhbmNlLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UganVzdCBmcm9tIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGNhbGxzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGNoYW5nZXMuIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcmVmYWN0b3Jpbmcgb2YgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AuIEl0JiMzOTtzIHNwbGl0IGludG8gYGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zYCBhbmQgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zYC4gSWYgYGZvcmNlYCBpcyB0cnVlIGFuZCBzd2l0Y2hpbmcgdGhlIG5ldG5zIG9mIGEgd2RldiBmYWlscywgdGhlIHBhdGNoIGNhbGxzIGBkZXZfY2xvc2VgIGFuZCBgY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2YC4gSSBjYW4gc2VlIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIHdpcGh5IGxvY2svZ3VhcmRzIGFuZCBub3RpZmljYXRpb25zIHRvby4gSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgaGFwcGVucyB0byBkYXRhIGlmIGEgYHdkZXZgIG5ldG5zIHN3aXRjaCBmYWlscy4gRG9lcyBpdCBsZWFrPyBJcyBkYXRhIGZyZWVkIHByb3Blcmx5PyBJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdXNlPwoKVGhlIHJlYWwgY3J1eCBvZiB0aGlzIGFuYWx5c2lzIGlzIGRpZ2dpbmcgaW4gdG8gaWRlbnRpZnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLiBJIG5lZWQgdG8gdXRpbGl6ZSBteSBjb2Rlc2VhcmNoIGFuZCBmaWxlIHJlYWRpbmcgdG9vbHMgdG8gdGhvcm91Z2hseSBpbnNwZWN0IHRoZXNlIHNlY3Rpb25zIG9mIHRoZSBjb2RlIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIFRoYXQgd2lsbCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgZ29vZCBkZXRlcm1pbmF0aW9uIG9uIEtNU0FOIGZ1enppbmcgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV91bmluaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lmYWNlLmM9OTMyPXN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTQ3LVxubmV0L21hYzgwMjExL2lmYWNlLmM6OTQ4OnN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0OS17XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9OTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTY3LVx0Lm5kb19zdG9wXHRcdD0gaWVlZTgwMjExX3N0b3AsXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5Njg6XHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NjktXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTAwNS1cdC5uZG9fc3RvcFx0XHQ9IGllZWU4MDIxMV9zdG9wLFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTAwNjpcdC5uZG9fdW5pbml0XHRcdD0gaWVlZTgwMjExX3VuaW5pdCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwMDctXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmXzgwMjNfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNzMtXHQubmRvX3N0b3BcdFx0PSBpZWVlODAyMTFfc3RvcCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNzQ6XHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDc1LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBOb3RpZmljYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgaG93IHdlIGdldCBpbnRlcmZhY2UgYW5kIFdpLUZpIFBIWSB1cGRhdGVzIG91dCB0byB1c2Vyc3BhY2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgYW55IHJlY2VudCBpc3N1ZXMgYXJlIHByb2JhYmx5IGNlbnRlcmVkIGFyb3VuZCBlaXRoZXIgYG5sODAyMTFfbm90aWZ5X2lmYWNlYCBvciBgbmw4MDIxMV9ub3RpZnlfd2lwaHlgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBicm9hZGNhc3RpbmcgY2hhbmdlcyBpbiB0aGUgd2lyZWxlc3MgbmV0d29yayBjb25maWd1cmF0aW9uLiBUaGV5JiMzOTtyZSBteSBwcmltYXJ5IHN1c3BlY3RzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSB0cmlnZ2VyZWQsIHdoYXQgZGF0YSB0aGV5IGNhcnJ5LCBhbmQgd2hhdCBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgbWlnaHQgZXhpc3Qgd2l0aGluIHRoZWlyIGV4ZWN1dGlvbiBwYXRocy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9ub3RpZnlfaWZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0xNzE9c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXHRcdFx0XHRjb250aW51ZTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTk1Olx0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxMy1cdFx0XHRcdGNvbnRpbnVlO1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTQ6XHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2Rldixcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjE1LVx0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQzMz1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQyLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQzOlx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDQtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjczPXZvaWQgY2ZnODAyMTFfcmVnaXN0ZXJfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjk2LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjk3Olx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTgtfVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTA1MD1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTExOS1cdGlmIChjaGFuZ2UgXHUwMDI2XHUwMDI2ICFlcnIpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjUxMjA6XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX1NFVF9JTlRFUkZBQ0UpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy01MTIxLVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjA2NDY9dm9pZCBubDgwMjExX25vdGlmeV93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY2Ny1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2Njg6dm9pZCBubDgwMjExX25vdGlmeV9pZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjY5LVx0XHRcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oPTMzPXZvaWQgbmw4MDIxMV9ub3RpZnlfd2lwaHkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuaC0zNC1cdFx0XHQgIGVudW0gbmw4MDIxMV9jb21tYW5kcyBjbWQpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuaDozNTp2b2lkIG5sODAyMTFfbm90aWZ5X2lmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmgtMzYtXHRcdFx0ICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHdpcmVsZXNzIGNvcmUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyAxNTAgdG8gMjQwLiBUaGF0IHJlZ2lvbiBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGF0IHNlY3Rpb24gd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eS4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcbiAxNTE6XHRcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4gMTUyOlx0XG4gMTUzOlx0XHRyZXR1cm4gMDtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0c3RhdGljIGludCBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIDE1NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuIDE1ODpcdHtcbiAxNTk6XHRcdGludCBlcnI7XG4gMTYwOlx0XG4gMTYxOlx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE2MjpcdFx0XHRyZXR1cm4gMDtcbiAxNjM6XHRcbiAxNjQ6XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuIDE2NTpcdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwmIzM0O3dsYW4lZFwmIzM0Oyk7XG4gMTY2Olx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuIDE2NzpcdFxuIDE2ODpcdFx0cmV0dXJuIGVycjtcbiAxNjk6XHR9XG4gMTcwOlx0XG4gMTcxOlx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMTcyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4gMTczOlx0e1xuIDE3NDpcdFx0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiAxNzU6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7XG4gMTc2Olx0XHRpbnQgZXJyID0gMDtcbiAxNzc6XHRcbiAxNzg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gMTc5Olx0XHRcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XG4gMTgwOlx0XHRcdGlmICghZXJyKVxuIDE4MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDE4MjpcdFx0XHRpZiAoIWZvcmNlKVxuIDE4MzpcdFx0XHRcdGdvdG8gdW5kbztcbiAxODQ6XHRcdFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xuIDE4NTpcdFx0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuIDE4NjpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpXG4gMTg3Olx0XHRcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHdkZXYpO1xuIDE4ODpcdFx0XHRlcnIgPSAwO1xuIDE4OTpcdFx0fVxuIDE5MDpcdFxuIDE5MTpcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSB7XG4gMTkyOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbiAxOTM6XHRcdFx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuIDE5NDpcdFx0XHRcdFx0Y29udGludWU7XG4gMTk1Olx0XHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcbiAxOTY6XHRcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiAxOTc6XHRcdFx0fVxuIDE5ODpcdFxuIDE5OTpcdFx0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuIDIwMDpcdFxuIDIwMTpcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4gMjAyOlx0XG4gMjAzOlx0XHRcdC8qIHRoaXMgb25seSBmYWlscyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbiAyMDQ6XHRcdFx0ZXJyID0gZGV2aWNlX3JlbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldixcbiAyMDU6XHRcdFx0XHRcdCAgICBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuIDIwNjpcdFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhZm9yY2UpXG4gMjA3Olx0XHRcdFx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBvbGRfbmV0KTtcbiAyMDg6XHRcbiAyMDk6XHRcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiAyMTA6XHRcbiAyMTE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuIDIxMjpcdFx0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4gMjEzOlx0XHRcdFx0XHRjb250aW51ZTtcbiAyMTQ6XHRcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuIDIxNTpcdFx0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuIDIxNjpcdFx0XHR9XG4gMjE3Olx0XHR9XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAoIWVyciB8fCBmb3JjZSlcbiAyMjA6XHRcdFx0cmV0dXJuIGVycjtcbiAyMjE6XHRcbiAyMjI6XHRcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xuIDIyMzpcdFx0d2RldiA9IGxpc3RfZW50cnkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIHR5cGVvZigqd2RldiksIGxpc3QpO1xuIDIyNDpcdHVuZG86XG4gMjI1Olx0XHQvKlxuIDIyNjpcdFx0ICogTW92ZSBiYWNrIGV2ZXJ5dGhpbmcsIGlmIHRoaXMgZmFpbHMgYWdhaW4gKGFsbG9jYXRpb24gZmFpbHVyZXMpXG4gMjI3Olx0XHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cbiAyMjg6XHRcdCAqL1xuIDIyOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LFxuIDIzMDpcdFx0XHRcdFx0XHQgICAgIGxpc3QpXG4gMjMxOlx0XHRcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2Rldiwgb2xkX25ldCkpO1xuIDIzMjpcdFxuIDIzMzpcdFx0cmV0dXJuIGVycjtcbiAyMzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzkKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaW4gdGhlc2UgY2hhbmdlcywgdGhlIGZvY3VzIGlzIHJlYWxseSBvbiByZWZpbmluZyBpbnRlcmZhY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIGhhbmRsaW5nIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgaW4gYG5ldC9tYWM4MDIxMWAgYW5kIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4KCkZpcnN0LCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCB0aGUgYWRkaXRpb24gb2YgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgdW5pbml0aWFsaXphdGlvbiBwcm9jZXNzIChgaWVlZTgwMjExX3VuaW5pdGAsIGNhbGxlZCBkdXJpbmcgYG5kb191bmluaXRgKSBzZWVtcyB0byBiZSBhYm91dCBlbnN1cmluZyBjbGVhbiBpbnRlcmZhY2UgcmVtb3ZhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyB0aGF0IG1pZ2h0IGZhaWwuIFRoaXMgaXMgYWJvdXQgbGlzdCBtYW5hZ2VtZW50IGZvciB0aGVzZSBpbnRlcmZhY2VzIGFuZCBtYWtpbmcgc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGNsZWFudXAgY29uc2lzdGVudGx5LiBUaGUgY2hhbmdlcyBhcmUgYWJvdXQgb3JkZXIgYW5kIGhvdyB3ZSBkZWFsIHdpdGggdGhlc2Ugc2RhdGEgYW5kIGludGVyZmFjZXMuCgpUaGVuLCB0aGUgc3BsaXR0aW5nIG9mIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIGludG8gaGVscGVyIGZ1bmN0aW9ucyBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgYW5kIHBhc3NpbmcgYGZvcmNlID0gdHJ1ZWAgZHVyaW5nIHBlcm5ldCBleGl0IGNhdWdodCBteSBleWUuIFRoaXMgbG9va3MgbGlrZSByb2J1c3RpZnlpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaC4gSWYgYSB3ZGV2IGNhbiYjMzk7dCBiZSBtb3ZlZCB0byB0aGUgbmV3IG5ldG5zLCB0aGlzIHdpbGwgY2xvc2UgYW5kIHVucmVnaXN0ZXIgaXQgcmF0aGVyIHRoYW4gbGVhdmluZyBpdCBpbiBhIGJyb2tlbiBzdGF0ZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgdXBkYXRpbmcgb2YgbG9ja2luZyBhbmQgbm90aWZpY2F0aW9uIHNjb3BlcyB3aXRoIHRoZSBgc2NvcGVkX2d1YXJkYCBtYWNyby4gVGhpcyBhbHNvIHByb3ZpZGVzIGFkZGl0aW9uYWwgc2FmZXR5IHdpdGhpbiB0aGUgc3lzdGVtLgoKTm93LCBhcyBhbiBleHBlcnQsIG15IHJlYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZXNwZWNpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gSSYjMzk7dmUgY2hlY2tlZCB0aGVzZSBhZ2FpbnN0IHRoZSBrbm93biBtZW1vcnkgc2FmZXR5IGlzc3VlczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSoqOiBObywgdGhlIG5vdGlmaWNhdGlvbnMgYmVpbmcgc2VudCAoIGBubDgwMjExX25vdGlmeV9pZmFjZWAsIGBubDgwMjExX25vdGlmeV93aXBoeWApIGFyZSBzdGFuZGFyZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmUgY29uc3RydWN0ZWQgd2l0aCBpbml0aWFsaXplZCBhdHRyaWJ1dGVzLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyoqOiBOb3BlLCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciByZWNlaXZlIGEgdmFsdWUgd2l0aCB0aGUgYXNzaWdubWVudHMgd2l0aGluIGEgbG9vcC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMqKjogTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4KNC4gICoqQm91bmRzL2xlbmd0aHMqKjogTm90aGluZyYjMzk7cyBjaGFuZ2luZyB0aGVyZS4KClNpbmNlIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGVzZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBvdGVudGlhbCByaXNrcyBhcmUgbW9yZSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIGxpc3QgbWFuYWdlbWVudC4gTE9DS0RFUCBzaG91bGQgY2F0Y2ggYW55IGRlYWRsb2NrcywgYW5kIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIHdpbGwgY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgZnJvbSBpbmNvcnJlY3QgdW5yZWdpc3RyYXRpb24vdW5saXN0aW5nL3RyYXZlcnNhbCBvcmRlcnMuCgpMb29rcyBsaWtlIHdlJiMzOTtyZSBnb29kIHdpdGggdGhlc2UgdG9vbHMuIExldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBuYW1lc3BhY2Ugc3dpdGNoaW5nIGZvciB3aXJlbGVzcyBkZXZpY2VzIChjZmc4MDIxMSkgYW5kIGhhbmRsZXMgaW50ZXJmYWNlIHVubGlzdGluZyBkdXJpbmcgbmV0ZGV2IHVuaW5pdGlhbGl6YXRpb24gKG1hYzgwMjExKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsaXN0IG1hbmFnZW1lbnQsIGludGVyZmFjZSB1bnJlZ2lzdHJhdGlvbiBvbiBuZXRucyBtaWdyYXRpb24gZmFpbHVyZSwgYW5kIGxvY2tpbmcgYWRqdXN0bWVudHMgKG11dGV4IGd1YXJkcykuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBjb3BpZXMgdG8vZnJvbSB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy9hbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSBpbnRlcmZhY2UgbGlmZWN5Y2xlIG9yIGxpc3QgbWFuaXB1bGF0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIHVucmVnaXN0ZXIsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozMzo1NS4wOTM3MzAyNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU1ODgyMTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfbmV0bnNcIixcbiAgICBcIl9fY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc1wiLFxuICAgIFwiY2ZnODAyMTFfcGVybmV0X2V4aXRcIixcbiAgICBcIm5sODAyMTFfd2lwaHlfbmV0bnNcIixcbiAgICBcImllZWU4MDIxMV91bmluaXRcIixcbiAgICBcImllZWU4MDIxMV91bmxpc3Rfc2RhdGFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzM6NTUuMDkzNzM5MTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgzMTgxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3Yzc2YTA0ZDQ1MzU5NWUyNTdkYjIzNjI4NGVjOWVjODM3ZDg3NTYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDE6MzM6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbkBAIC05MjQsOSArOTI0LDMzIEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4gXFx0fVxcbiB9XFxuIFxcbisvKlxcbisgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XFxuKyAqIGNvcmUgd2hlbiBjZmc4MDIxMSBjb3VsZG4ndCBtb3ZlIGl0IG91dCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlIHRoYXQncyBiZWluZ1xcbisgKiBkZXN0cm95ZWQuIERyb3AgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgZWl0aGVyIHdheS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKml0ZXI7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKGl0ZXIgIT0gc2RhdGEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4rXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZzZGF0YS1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldikpO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XFxuK1xcbitcXHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcXG4rXFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXFxuaW5kZXggZDEzMzEwZmVmNjkxYS4uMzFkMGY3MDg2NzAxMiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbkBAIC0xNTMsNjggKzE1Myw5MyBAQCBpbnQgY2ZnODAyMTFfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXFxuK3N0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuLVxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XFxuLVxcdGludCBlcnIgPSAwO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocmRldi1cXHUwMDNld2lwaHkuZmxhZ3MgXFx1MDAyNiBXSVBIWV9GTEFHX05FVE5TX09LKSlcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuK1xcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuK1xcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVxcdTAwM2VuZXRkZXYsIG5ldCwgXFxcIndsYW4lZFxcXCIpO1xcbitcXHR3ZGV2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXQgKm9sZF9uZXQgPSB3aXBoeV9uZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KTtcXG4rXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgKnRtcDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XFxuK1xcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0d2Rldi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcXG4tXFx0XFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXFx1MDAzZW5ldGRldiwgbmV0LCBcXFwid2xhbiVkXFxcIik7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR3ZGV2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxuK1xcdFxcdGlmICghZm9yY2UpXFxuK1xcdFxcdFxcdGdvdG8gdW5kbztcXG4rXFx0XFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xcbitcXHRcXHRkZXZfY2xvc2Uod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpXFxuK1xcdFxcdFxcdGNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldih3ZGV2KTtcXG4rXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHQvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovXFxuLVxcdFxcdG5ldCA9IHdpcGh5X25ldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbi1cXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KSB7XFxuK1xcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSB7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbiBcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuLVxcdFxcdFxcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVxcdTAwM2VuZXRkZXYsIG5ldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIndsYW4lZFxcXCIpO1xcbi1cXHRcXHRcXHRXQVJOX09OKGVycik7XFxuLVxcdFxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xcbiBcXG4tXFx0Z3VhcmQod2lwaHkpKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuK1xcdFxcdHdpcGh5X25ldF9zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBuZXQpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxuLVxcdH1cXG4rXFx0XFx0LyogdGhpcyBvbmx5IGZhaWxzIG9uIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbitcXHRcXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBkZXZfbmFtZShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkuZGV2KSk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIWZvcmNlKVxcbitcXHRcXHRcXHR3aXBoeV9uZXRfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgb2xkX25ldCk7XFxuIFxcbi1cXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xcbitcXHRcXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xcbiBcXG4tXFx0d2lwaHlfbmV0X3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIG5ldCk7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4tXFx0ZXJyID0gZGV2aWNlX3JlbmFtZShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkuZGV2LCBkZXZfbmFtZShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkuZGV2KSk7XFxuLVxcdFdBUk5fT04oZXJyKTtcXG4rXFx0aWYgKCFlcnIgfHwgZm9yY2UpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xcbitcXHQvKiBzZXQgdG8gdGhlIGxhc3Qgb25lIHRvIHVuZG8gYWxsIG9mIHRoZW0gKi9cXG4rXFx0d2RldiA9IGxpc3RfZW50cnkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XFxuK3VuZG86XFxuK1xcdC8qXFxuK1xcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxcbitcXHQgKiB0aGVuIHRoaW5ncyBnZXQgc3R1Y2sgaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy5cXG4rXFx0ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGxpc3QpXFxuK1xcdFxcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMod2Rldiwgb2xkX25ldCkpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XFxuLVxcdH1cXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRpZiAoIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcXG5AQCAtMTg2OCw3ICsxODkzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRmb3JfZWFjaF9yZGV2KHJkZXYpIHtcXG4gXFx0XFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSwgbmV0KSlcXG4tXFx0XFx0XFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0KSk7XFxuK1xcdFxcdFxcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XFxuIFxcdH1cXG4gXFx0cnRubF91bmxvY2soKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozMzo1NS41MjI4NTg5NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwODA5NjI2MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjExX3N3aXRjaF9uZXRuc1wiLFxuICAgIFwiX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNcIixcbiAgICBcImNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zXCIsXG4gICAgXCJjZmc4MDIxMV9wZXJuZXRfZXhpdFwiLFxuICAgIFwibmw4MDIxMV93aXBoeV9uZXRuc1wiLFxuICAgIFwiaWVlZTgwMjExX3VuaW5pdFwiLFxuICAgIFwiaWVlZTgwMjExX3VubGlzdF9zZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZyBsb2dpYyBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBoYW5kbGluZyBvZiBpbnRlcmZhY2VzIGZhaWxpbmcgdG8gc3dpdGNoIG5hbWVzcGFjZXMgb24gbmV0bnMgZXhpdCBhbmQgZW5zdXJlcyBtYWM4MDIxMSBkcm9wcyBuZXRkZXZzIGZyb20gdGhlIGludGVyZmFjZSBsaXN0IHVwb24gdW5pbml0LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5sODAyMTEgbmV0bGluayBjb21tYW5kcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gd2l0aCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4sIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3Yzc2YTA0ZDQ1MzU5NWUyNTdkYjIzNjI4NGVjOWVjODM3ZDg3NTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMTozMzo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IGZkYWM3MjljYTU4MGQuLjQ5MWJiYjY5NWQxN2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05MjQsOSArOTI0LDMzIEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XG4rICogY29yZSB3aGVuIGNmZzgwMjExIGNvdWxkbid0IG1vdmUgaXQgb3V0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UgdGhhdCdzIGJlaW5nXG4rICogZGVzdHJveWVkLiBEcm9wIGl0IGZyb20gdGhlIGludGVyZmFjZSBsaXN0IGVpdGhlciB3YXkuXG4rICovXG4rc3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqaXRlcjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbitcdFx0aWYgKGl0ZXIgIT0gc2RhdGEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGd1YXJkKG11dGV4KShcdTAwMjZsb2NhbC1cdTAwM2VpZmxpc3RfbXR4KTtcbitcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnNkYXRhLVx1MDAzZWxpc3QpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG4rXG4rXHRpZWVlODAyMTFfdW5saXN0X3NkYXRhKHNkYXRhKTtcbitcdGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi4zMWQwZjcwODY3MDEyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTE1Myw2OCArMTUzLDkzIEBAIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi1cdFx0XHQgIHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgaW50IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuLVx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdGludCBlcnIgPSAwO1xuK1x0aW50IGVycjtcbiBcbi1cdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbitcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuK1x0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwid2xhbiVkXCIpO1xuK1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxuK3tcbitcdHN0cnVjdCBuZXQgKm9sZF9uZXQgPSB3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4rXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2RldiwgdG1wLCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuK1x0XHRlcnIgPSBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBuZXQpO1xuK1x0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4tXHRcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVx1MDAzZW5ldGRldiwgbmV0LCBcIndsYW4lZFwiKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRicmVhaztcbi1cdFx0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbitcdFx0aWYgKCFmb3JjZSlcbitcdFx0XHRnb3RvIHVuZG87XG4rXHRcdC8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi9cbitcdFx0ZGV2X2Nsb3NlKHdkZXYtXHUwMDNlbmV0ZGV2KTtcbitcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuK1x0XHRcdGNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldih3ZGV2KTtcbitcdFx0ZXJyID0gMDtcbiBcdH1cbiBcbi1cdGlmIChlcnIpIHtcbi1cdFx0LyogZmFpbGVkIC0tIGNsZWFuIHVwIHRvIG9sZCBuZXRucyAqL1xuLVx0XHRuZXQgPSB3aXBoeV9uZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsXG4tXHRcdFx0XHRcdFx0ICAgICBsaXN0KSB7XG4rXHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcbi1cdFx0XHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cdTAwM2VuZXRkZXYsIG5ldCxcbi1cdFx0XHRcdFx0XHRcdFwid2xhbiVkXCIpO1xuLVx0XHRcdFdBUk5fT04oZXJyKTtcbi1cdFx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuK1x0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG4rXHRcdFx0XHRcdCAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XG4gXHRcdH1cbiBcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbiBcbi1cdGd1YXJkKHdpcGh5KShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbitcdFx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBuZXQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LCBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbi1cdH1cbitcdFx0LyogdGhpcyBvbmx5IGZhaWxzIG9uIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xuK1x0XHRlcnIgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2LFxuK1x0XHRcdFx0ICAgIGRldl9uYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2KSk7XG4rXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFmb3JjZSlcbitcdFx0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG9sZF9uZXQpO1xuIFxuLVx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfREVMX1dJUEhZKTtcbitcdFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcbiBcbi1cdHdpcGh5X25ldF9zZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgbmV0KTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuK1x0XHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRubDgwMjExX25vdGlmeV9pZmFjZShyZGV2LCB3ZGV2LFxuK1x0XHRcdFx0XHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuK1x0XHR9XG4rXHR9XG4gXG4tXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2LCBkZXZfbmFtZShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LmRldikpO1xuLVx0V0FSTl9PTihlcnIpO1xuK1x0aWYgKCFlcnIgfHwgZm9yY2UpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4tXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xuK1x0Lyogc2V0IHRvIHRoZSBsYXN0IG9uZSB0byB1bmRvIGFsbCBvZiB0aGVtICovXG4rXHR3ZGV2ID0gbGlzdF9lbnRyeShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XG4rdW5kbzpcbitcdC8qXG4rXHQgKiBNb3ZlIGJhY2sgZXZlcnl0aGluZywgaWYgdGhpcyBmYWlscyBhZ2FpbiAoYWxsb2NhdGlvbiBmYWlsdXJlcylcbitcdCAqIHRoZW4gdGhpbmdzIGdldCBzdHVjayBpbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsXG4rXHRcdFx0XHRcdCAgICAgbGlzdClcbitcdFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xuLVx0fVxuK1x0cmV0dXJuIGVycjtcbit9XG4gXG4tXHRyZXR1cm4gMDtcbitpbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRpZiAoIShyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX05FVE5TX09LKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIG5ldCwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjZmc4MDIxMV9yZmtpbGxfcG9sbChzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpXG5AQCAtMTg2OCw3ICsxODkzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRydG5sX2xvY2soKTtcbiBcdGZvcl9lYWNoX3JkZXYocmRldikge1xuIFx0XHRpZiAobmV0X2VxKHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSwgbmV0KSlcbi1cdFx0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCkpO1xuK1x0XHRcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXHUwMDI2aW5pdF9uZXQsIHRydWUpKTtcbiBcdH1cbiBcdHJ0bmxfdW5sb2NrKCk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzM6NTUuNTIyODYxNjU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQ2OTg2MzU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUgaW50byBXaXJlbGVzcyBOZXR3b3JraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgaXQgbWFrZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrLiBGaXJzdCwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHRvIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhKClgIGFuZCB0aGUgd2F5IGl0J3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdCgpYC4gVGhlIGZhY3QgdGhhdCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YSgpYCBpcyBub3cgaW52b2tlZCAqYmVmb3JlKiBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKClgIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgd2h5IHRoaXMgcmVvcmRlcmluZyBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYmVuZWZpY2lhbC4gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlP1xuXG5OZXh0LCB0aGUgcGF0Y2ggdG91Y2hlcyBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIFRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZSDigJMgYGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKClgLCBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoKWAsIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoKWAsIGFuZCBgY2ZnODAyMTFfcGVybmV0X2V4aXQoKWAg4oCTIGFyZSBhbGwga2V5IHRvIG5ldCBuYW1lc3BhY2Ugc3dpdGNoaW5nIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3RhY2suIEFuZCB0aGF0IGxhc3Qgb25lLCBjYWxsaW5nIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRucygpYCB3aXRoIGBcdTAwMjZpbml0X25ldGAgYW5kIGB0cnVlYCBkdXJpbmcgcGVybmV0IGV4aXQgaXMgdGVsbGluZy4gVGhpcyBoaW50cyBhdCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgd2lyZWxlc3MgZGV2aWNlcyBhcyB0aGV5IG1vdmUgYmV0d2VlbiBuZXR3b3JrIG5hbWVzcGFjZXMsIG9yIHRoZWlyIGNsZWFudXAuXG5cbkdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGlzIGFyZWEgb2YgdGhlIGtlcm5lbCBpcyBvZnRlbiBmdXp6ZWQgYnkgdG9vbHMgbGlrZSBzeXprYWxsZXIuIFRoYXQgaXQgaW5jbHVkZXMgbW9kdWxlcyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgYW5kIG5ldGxpbmsgY29tbWFuZHMuIFRoaW5raW5nIGFib3V0IHRoZXNlIGNoYW5nZXMgaW4gdGhlIGNvbnRleHQgb2YgdmlydHVhbGl6YXRpb24gYW5kIGVtdWxhdGlvbiBpcyBpbXBvcnRhbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCAqY291bGQqIGJlIHJlbGF0ZWQgdG8gYW4gaXNzdWUgSSd2ZSBzZWVuIGJlZm9yZSB3aXRoIHN3aXRjaGluZyBiZXR3ZWVuIG5ldCBuYW1lc3BhY2VzLCBvciBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gY3Jvc3MtbmFtZXNwYWNlIGludGVyYWN0aW9uIHdpdGggd2lyZWxlc3MgZGV2aWNlcy5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgcmVhY2ggZm9yIG15IHRvb2xzIHRvIGNoZWNrIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYW5kIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMsIGVuc3VyaW5nIEknbSBhd2FyZSBvZiBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbGwgbmVlZCB0byBsb29rIGF0IGNvbW1pdCBtZXNzYWdlcyBhbmQgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzZXRzIGZvciBmdWxsIGNvbnRleHQsIGJ1dCB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIHN1Z2dlc3RzIHRoaXMgY291bGQgYmUgYWRkcmVzc2luZyBhIHN1YnRsZSwgcG90ZW50aWFsbHkgc2VjdXJpdHktcmVsZXZhbnQsIGlzc3VlIHJlbGF0ZWQgdG8gd2lyZWxlc3MgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudCBpbiBhIHZpcnR1YWxpemVkIG9yIG5ldG5zIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MDMuOTkyNzI4MDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjgwNDUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMtb2JqLXkgKz0gdGVzdHMvXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTctXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMjAtY2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MjM9JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zMS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzI6JChvYmopL2V4dHJhLWNlcnRzLmM6ICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikgXFxcXFxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZTozMzpcXHRcXHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTM0LVxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xNjk0PXN0YXRpYyBib29sIGNmZzgwMjExX2lyX3Blcm1pc3NpdmVfY2hhbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzAyLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTcwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX1JFR19SRUxBWF9OT19JUikgfHxcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDQtXFx0ICAgICEod2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTU3ND1zdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjYxLVxcdFxcdFxcdCAgY2ZnODAyMTFfZGZzX2NoYW5uZWxzX3VwZGF0ZV93b3JrKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjY2MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2My1cXHRyZGV2LVxcdTAwM2V3aXBoeS53ZXh0ID0gXFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjgzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6Njg0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjg1LVxcdHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIHw9IFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQzMz1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NzMtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDc0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ3NS1cXHRrZnJlZV9zZW5zaXRpdmUod2Rldi1cXHUwMDNld2V4dC5rZXlzKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTUyOD12b2lkIGNmZzgwMjExX2xlYXZlX2xvY2tlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NTItXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTU1NC1cXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTYzOT12b2lkIGNmZzgwMjExX2luaXRfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjQ3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTY0ODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2NDktXFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IC0xO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzMyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgwNi1cXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTgwNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE4MDgtXFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NTc0PWNmZzgwMjExX2dldF82Z2h6X3Bvd2VyX3R5cGUoY29uc3QgdTggKmVsZW1zLCBzaXplX3QgZWxlbXNfbGVuLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NzYtXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1Nzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3OC0jZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXFx0V0FSTl9PTihjb25kKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD02MjQ9c3RydWN0IGNmZzgwMjExX2NvbG9jYXRlZF9hcCB7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY0MC1cXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0MTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfS1VOSVRfVEVTVClcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY0Mi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfSUZfQ0ZHODAyMTFfS1VOSVQoc3ltKSBFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHN5bSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NjQ5PXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NTQtI2RlZmluZSBWSVNJQkxFX0lGX0NGRzgwMjExX0tVTklUIHN0YXRpY1xcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjU1OiNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAqL1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjU2LVxcbi0tXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTYtdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTE5PXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVxcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcztcXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjI0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjUyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXFx0bWVtc2V0KFxcdTAwMjZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz04Nz1pbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoxNDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDItXFx0d2Rldi1cXHUwMDNld2V4dC5pYnNzLmNoYW5kZWYgPSBwYXJhbXMtXFx1MDAzZWNoYW5kZWY7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTE1Nj12b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cXHRtZW1zZXQoXFx1MDAyNndkZXYtXFx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYpKTtcXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE4NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cXHRpZiAoIW5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjEzLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjE1LWludCBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI4Mi1cXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcXG5uZXQvd2lyZWxlc3MvbWxtZS5jOjI4MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI4NC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU0Njc9c3RhdGljIGludCBubDgwMjExX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUwOS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1MTA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTExLVxcdFxcdHdkZXYtXFx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTMyLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MzQtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X21nbXRfa2V5ID0ga2V5LmlkeDtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0NT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NjkxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2OTMtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4MTc9c3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg1OC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODU5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg2MC1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA5MTA9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5ODgtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5ODk6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTkwLVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5OTE5LVxcdH0sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTkyMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5MjEtXFx0e1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzQxOT12b2lkIGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzNDI2LVxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9ERlNfQ09OQ1VSUkVOVCkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzNDI3OlxcdCAgICAoSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MjgtXFx0ICAgICB3aXBoeS1cXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE2LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE4LS8qIE1heCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYXR0ZW1wdHMgdG8gY29tbXVuaWNhdGUgd2l0aCBDUkRBICAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTU4OS19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xcbm5ldC93aXJlbGVzcy9yZWcuYy01OTEtXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTcyOS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzMxLSNpbmNsdWRlIFxcdTAwM2NrZXlzL2FzeW1tZXRyaWMtdHlwZS5oXFx1MDAzZVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTczNT1zdGF0aWMgaW50IF9faW5pdCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0Ny1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzQ4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChzaGlwcGVkX3JlZ2RiX2NlcnRzLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL3JlZy5jOjc1NDpcXHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAnXFxcXDAnKVxcbm5ldC93aXJlbGVzcy9yZWcuYy03NTUtXFx0XFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Nzk4PXN0YXRpYyB2b2lkIGZyZWVfcmVnZGJfa2V5cmluZyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMC19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjgwMTojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCICovXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMDM4PWJvb2wgcmVnX2xhc3RfcmVxdWVzdF9jZWxsX2Jhc2Uodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQyLVxcbm5ldC93aXJlbGVzcy9yZWcuYzoyMDQzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMTE3PXZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyMi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMjQtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTY1LVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTE2NjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjctXFx0aWYgKHdkZXYtXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiAhcmVxdWVzdC1cXHUwMDNlaW5mby5hYm9ydGVkKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM0NDM9dm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTYtXFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNTE3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzUxOC1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYz03MzU9dm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVxcdHU4IGNvdW50cnlfZGF0YWxlbjtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6NzQ0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6Nzc1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NzYtXFx0aWYgKHdleHRldiBcXHUwMDI2XFx1MDAyNiAhY3ItXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9MTA3OT12b2lkIF9fY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4MS17XFxubmV0L3dpcmVsZXNzL3NtZS5jOjEwODI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXFxubmV0L3dpcmVsZXNzL3NtZS5jOjExMzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzYtXFx0aWYgKCFpbmZvLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM0OC1cXHRpbnQgaTtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM1MC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5Ni1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvdGVzdHMvTWFrZWZpbGU9MT1jZmc4MDIxMS10ZXN0cy15ICs9IG1vZHVsZS5vIGZyYWdtZW50YXRpb24ubyBzY2FuLm8gdXRpbC5vIGNoYW4ub1xcbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZS0yLVxcbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSArPSBjZmc4MDIxMS10ZXN0cy5vXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjM3PUVYUE9SVF9TWU1CT0wod2lyZWxlc3Nfc2VuZF9ldmVudCk7XFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTYzOC1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NDAtc3RhdGljIHZvaWQgd2lyZWxlc3Nfd2Fybl9jZmc4MDIxMV93ZXh0KHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTYtXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU4LVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02OTY9c3RhdGljIGl3X2hhbmRsZXIgZ2V0X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDEtXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjcwMjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNzAzLVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSkge1xcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jPTI4PXN0YXRpYyB2b2lkIHdpcmVsZXNzX3NlcV9wcmludGZfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDAtI2VuZGlmXFxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jOjQxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDItXFx0XFx0aWYgKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MDQuMTE1NTM2Njg1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0MjE3NTgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5LiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IGNvbmZpZ3VyYWJsZSBvcHRpb25zIGlzIHRoZSBgTWFrZWZpbGVgIGFuZCB0aGUgYEtjb25maWdgIGZpbGUuIFRoZSBgTWFrZWZpbGVgIHdpbGwgb2J2aW91c2x5IHRlbGwgbWUgaG93IHRoZSBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBob3cgbW9kdWxlcyBhcmUgY3JlYXRlZC4gSSdsbCBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSB1bmRlcnN0YW5kIGFueSBidWlsZCBmbGFncyB0aGF0IGFyZSBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIG9yIGZlYXR1cmUgZW5hYmxlbWVudC4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIGNydWNpYWwgYmVjYXVzZSB0aGF04oCZcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gc2VlIHdoYXQgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyYWJsZSwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBiZXR3ZWVuIHRob3NlIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGJ1aWxkIG9mIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlIGFuZCBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIHRhaWxvciB0aGUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MDYuNzU3NzE0ODczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzg1NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA5NzUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2OmNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5OmlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjpcXHRzZWxlY3QgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjctXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2VcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMi1cXHRwcm9tcHQgXFxcIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0hBU19SQ1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjM0OlxcdGRlZmF1bHQgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTM1LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ0LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxubmV0L21hYzgwMjExL0tjb25maWc6NTI6XFx0ZGVmYXVsdCBcXFwibWluc3RyZWxfaHRcXFwiIGlmIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01My1cXHRkZWZhdWx0IFxcXCJcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9IQVNfUkM9blxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYyLVxcdGRlcGVuZHMgb24gS1VOSVRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctNjQtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03My1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6ODE6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjgyOlxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04My1cXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctOTEtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlRyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IFRSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDAtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMy1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTM0OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzNS1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NjpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTctXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBIVCBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTY1OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBPQ0IgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzgtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4ODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXFx0Ym9vbCBcXFwiVmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk5OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwMC1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjExOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMjpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTMtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNDpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzg6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjM5LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTA6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcyOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzQtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cXHRib29sIFxcXCJWZXJib3NlIFRETFMgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODQtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5NTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTY6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk3LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA5OlxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMxMC1cXHRkZWZhdWx0IDBcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTUFDODAyMTEpICs9IG1hYzgwMjExLm9cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMy1cXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTM5LVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo0MDptYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9MRURTKSArPSBsZWQub1xcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo0MTptYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQyLVxcdGRlYnVnZnMubyBcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDYtXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ3Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX01FU0gpICs9IFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDgtXFx0bWVzaC5vIFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01OT1yYzgwMjExX21pbnN0cmVsLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTYxLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZTo2MjpyYzgwMjExX21pbnN0cmVsLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjMtXFx0cmM4MDIxMV9taW5zdHJlbF9odF9kZWJ1Z2ZzLm9cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjQtXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjY1Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMKSArPSAkKHJjODAyMTFfbWluc3RyZWwteSlcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjYtXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NjEzPXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy03MTAtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbm5ldC9tYWM4MDIxMS9jZmcuYzo3MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTcxMi1cXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXUubWVzaC5zZWN1cml0eSAhPSBJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz0yMTkwPXN0YXRpYyB2b2lkIHN0YV9hcHBseV9tZXNoX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTkzLXtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5NS1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS1cXHUwMDNlc2RhdGE7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9Mjc4Nz1zdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2Vfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTMtXFxubmV0L21hYzgwMjExL2NmZy5jOjI4OTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTUtc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDQyOD1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfYWZ0ZXJfY3NhX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGlua19kYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTQ0NTEtXFx0XFx0YnJlYWs7XFxubmV0L21hYzgwMjExL2NmZy5jOjQ0NTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTQ0NTMtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ1NjM9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NjU0LVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NjU1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NjU2LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU5NzY9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTYtXFx0LmR1bXBfc3VydmV5ID0gaWVlZTgwMjExX2R1bXBfc3VydmV5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTk3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk4LVxcdC5hZGRfbXBhdGggPSBpZWVlODAyMTFfYWRkX21wYXRoLFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNS0gKi9cXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2OiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR19IXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29uY2VfbGl0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTAtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxMjojZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTMtI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNDojZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTUtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTYtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTg6I2RlZmluZSBNQUM4MDIxMV9JQlNTX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOS0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIwOiNkZWZpbmUgTUFDODAyMTFfSUJTU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjEtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjItXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0OiNkZWZpbmUgTUFDODAyMTFfUFNfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI1LSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjY6I2RlZmluZSBNQUM4MDIxMV9QU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjctI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6Mjk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjMwOiNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTMxLSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MzI6I2RlZmluZSBNQUM4MDIxMV9IVF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzMtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzQtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MzU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDozNjojZGVmaW5lIE1BQzgwMjExX01QTF9ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzctI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDozODojZGVmaW5lIE1BQzgwMjExX01QTF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzktI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDAtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NDE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NUEFUSF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQyOiNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQzLSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NDQ6I2RlZmluZSBNQUM4MDIxMV9NUEFUSF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDUtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNDYtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NSFdNUF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ4OiNkZWZpbmUgTUFDODAyMTFfTUhXTVBfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQ5LSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTA6I2RlZmluZSBNQUM4MDIxMV9NSFdNUF9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTEtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTItXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NDojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTUtI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NjojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTctI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYwOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTYxLSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjI6I2RlZmluZSBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjMtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjQtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC02Ny0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY4OiNkZWZpbmUgTUFDODAyMTFfTUVTSF9QU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjktI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzAtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NzE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NzI6I2RlZmluZSBNQUM4MDIxMV9URExTX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC03My0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjc0OiNkZWZpbmUgTUFDODAyMTFfVERMU19ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzUtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzYtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6Nzc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3ODojZGVmaW5lIE1BQzgwMjExX1NUQV9ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNzktI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4MDojZGVmaW5lIE1BQzgwMjExX1NUQV9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODEtI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODItXFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODQ6I2RlZmluZSBNQUM4MDIxMV9NTE1FX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC04NS0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjg2OiNkZWZpbmUgTUFDODAyMTFfTUxNRV9ERUJVRyAwXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODctI2VuZGlmXFxubmV0L21hYzgwMjExL2RlYnVnLmgtODgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvZGVidWcuaC05MC12b2lkIF9fc2RhdGFfaW5mbyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMSwgMik7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaD0xMjU9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE3OC0jZGVmaW5lIGh0X2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX0hUX0RFQlVHLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODAtXFx0XFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4Mi0jZGVmaW5lIGh0X2RiZ19yYXRlbGltaXRlZChzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE4MzpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX0hUX0RFQlVHIFxcdTAwMjZcXHUwMDI2IG5ldF9yYXRlbGltaXQoKSxcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTg0LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODYtI2RlZmluZSBvY2JfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTg3OlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfT0NCX0RFQlVHLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xODgtXFx0XFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE5MC0jZGVmaW5lIGlic3NfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTkxOlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfSUJTU19ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTkyLVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTQtI2RlZmluZSBwc19kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTU6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTk2LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xOTgtI2RlZmluZSBwc19kYmdfaHcoaHcsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxOTk6XFx0X3dpcGh5X2RiZyhNQUM4MDIxMV9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjAwLVxcdFxcdCAgIChodyktXFx1MDAzZXdpcGh5LCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMDItI2RlZmluZSBwc19kYmdfcmF0ZWxpbWl0ZWQoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMDM6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9QU19ERUJVRyBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCksXFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIwNC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjA2LSNkZWZpbmUgbXBsX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIwNzpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX01QTF9ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjA4LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTAtI2RlZmluZSBtcGF0aF9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTE6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NUEFUSF9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjEyLVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTQtI2RlZmluZSBtaHdtcF9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTU6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NSFdNUF9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjE2LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTgtI2RlZmluZSBtc3luY19kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcsXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIyMC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjM6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI0LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjYtI2RlZmluZSBtcHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjI3OlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUVTSF9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMzAtI2RlZmluZSB0ZGxzX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzMTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX1RETFNfREVCVUcsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIzMi1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjM0LSNkZWZpbmUgc3RhX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzNTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX1NUQV9ERUJVRyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjM2LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMzgtI2RlZmluZSBtbG1lX2RiZyhzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjIzOTpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX01MTUVfREVCVUcsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTI0MS0jZGVmaW5lIG1sbWVfbGlua19pZF9kYmcoc2RhdGEsIGxpbmtfaWQsIGZtdCwgLi4uKVxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyNDI6XFx0X2xpbmtfaWRfZGJnKE1BQzgwMjExX01MTUVfREVCVUcsIHNkYXRhLCBsaW5rX2lkLFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDMtXFx0XFx0ICAgICBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDUtI2RlZmluZSBtbG1lX2RiZ19yYXRlbGltaXRlZChzZGF0YSwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI0NjpcXHRfc2RhdGFfZGJnKE1BQzgwMjExX01MTUVfREVCVUcgXFx1MDAyNlxcdTAwMjYgbmV0X3JhdGVsaW1pdCgpLFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDctXFx0XFx0ICAgc2RhdGEsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNDgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjQ5OiNlbmRpZiAvKiBfX01BQzgwMjExX0RFQlVHX0ggKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9NjI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVidWdmc19zaG9ydF9mb3BzIHN0YXRzXyAjI25hbWUjIyBfb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjMyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjMzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTYzNC0jZGVmaW5lIERFQlVHRlNfU1RBVFNfQUREKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuYz02NDU9dm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjc5LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjgwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTY4MS1cXHRERUJVR0ZTX1NUQVRTX0FERChkb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjI6I2lmbmRlZiBfX01BQzgwMjExX0RFQlVHRlNfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19IXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaC00LVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaC02LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmg6NzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTgtdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgtMTYtXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaDoxNzojZW5kaWYgLyogX19NQUM4MDIxMV9ERUJVR0ZTX0ggKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaDoyOiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR0ZTX0tFWV9IXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oLTQtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oPTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2JlYWNvbl9kZWZhdWx0KFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtMjgtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6Mjk6I2VuZGlmIC8qIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9NzM2PUlFRUU4MDIxMV9JRl9MSU5LX0ZJTEUoYWRkciwgY29uZi1cXHUwMDNlYWRkciwgTUFDKTtcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzctXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM6NzM4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczOS1JRUVFODAyMTFfSUZfRklMRShlc3RhYl9wbGlua3MsIHUubWVzaC5lc3RhYl9wbGlua3MsIEFUT01JQyk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz04Njg9c3RhdGljIHZvaWQgYWRkX2lic3NfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzItXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM6ODczOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3NC1cXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTkzNz1zdGF0aWMgdm9pZCBhZGRfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NDktXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjk1MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NTEtXFx0XFx0YWRkX21lc2hfZmlsZXMoc2RhdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTItXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2Lmg6MTM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTQtdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaDoyOiNpZm5kZWYgX19NQUM4MDIxMV9ERUJVR0ZTX1NUQV9IXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg6MzojZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19TVEFfSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTQtXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC02LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtOC12b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg9MjQ9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9saW5rX3N0YV9kZWJ1Z2ZzX2Rydl9yZW1vdmUoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKSB7fVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtMjYtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg6Mjc6I2VuZGlmIC8qIF9fTUFDODAyMTFfREVCVUdGU19TVEFfSCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC03LVxcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg6ODojaWZuZGVmIF9fTUFDODAyMTFfRFJJVkVSX09QU1xcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg6OTojZGVmaW5lIF9fTUFDODAyMTFfRFJJVkVSX09QU1xcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtMTAtXFxuLS1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oPTQ3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTQ5NC1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjQ5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oLTQ5Ni1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3ZpZl9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmg9MTc5Nz1kcnZfbmFuX3BlZXJfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtMTgxNi1cXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjE4MTc6I2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqL1xcbi0tXFxubmV0L21hYzgwMjExL2Ryb3AuaC03LVxcbm5ldC9tYWM4MDIxMS9kcm9wLmg6ODojaWZuZGVmIE1BQzgwMjExX0RST1BfSFxcbm5ldC9tYWM4MDIxMS9kcm9wLmg6OTojZGVmaW5lIE1BQzgwMjExX0RST1BfSFxcbm5ldC9tYWM4MDIxMS9kcm9wLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9kcm9wcmVhc29uLmhcXHUwMDNlXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjA2LjgwNzUwMzI3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTg1NjYyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbnRlcmZhY2UgTGlmZWN5Y2xlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZXNlIHdpcmVsZXNzIGludGVyZmFjZXMgYXJlIGluaXRpYWxpemVkLCB1bmluaXRpYWxpemVkLCBhbmQgZ2VuZXJhbGx5IG1hbmFnZWQgaW4gdGhlIGtlcm5lbCdzIG1hYzgwMjExIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgY2VudHJhbCBsb2dpYyBmb3IgaW50ZXJmYWNlIG9wZXJhdGlvbnMuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgdW5pbml0aWFsaXphdGlvbiBwYXRoIGFuZCBob3cgaW50ZXJmYWNlcyBnZXQgdGFrZW4gZG93bi4gSSB3YW50IHRvIHNlZSBleGFjdGx5ICp3aGVyZSogYGllZWU4MDIxMV91bmluaXRgIGFuZCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYXJlIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgY2FsbCBzdGFjayBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlaXIgdXNlIHRvIGJldHRlciB0cm91Ymxlc2hvb3Qgb3IgbW9kaWZ5IHRoZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaGVscCBtZSByZWFzb24gYWJvdXQgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgaW50ZXJmYWNlIHJlbW92YWwgYW5kIHRlYXJkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU0NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjA5LjE2NjA3MjA2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTU6XFx0XFx0aWVlZTgwMjExX3ZpZl9jbGVhcl9saW5rcyhzZGF0YSk7XFxuIDkxNjpcXHRcXHRpZWVlODAyMTFfbGlua19zdG9wKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluayk7XFxuIDkxNzpcXHRcXG4gOTE4OlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKSB7XFxuIDkxOTpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKm5hbl9zY2hlZCA9XFxuIDkyMDpcXHRcXHRcXHRcXHRcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xcbiA5MjE6XFx0XFxuIDkyMjpcXHRcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobmFuX3NjaGVkLVxcdTAwM2VjaGFubmVscyk7IGkrKylcXG4gOTIzOlxcdFxcdFxcdFxcdFdBUk5fT04obmFuX3NjaGVkLVxcdTAwM2VjaGFubmVsc1tpXS5jaGFucmVxLm9wZXIuY2hhbik7XFxuIDkyNDpcXHRcXHR9XFxuIDkyNTpcXHR9XFxuIDkyNjpcXHRcXG4gOTI3OlxcdC8qXFxuIDkyODpcXHQgKiBUaGUgbmV0ZGV2IGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aG91dCBtYWM4MDIxMSBkb2luZyBpdCwgZS5nLiBieSB0aGUgbmV0ZGV2XFxuIDkyOTpcXHQgKiBjb3JlIHdoZW4gY2ZnODAyMTEgY291bGRuJ3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0J3MgYmVpbmdcXG4gOTMwOlxcdCAqIGRlc3Ryb3llZC4gRHJvcCBpdCBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCBlaXRoZXIgd2F5LlxcbiA5MzE6XFx0ICovXFxuIDkzMjpcXHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5saXN0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuIDkzNTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICppdGVyO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiA5Mzg6XFx0XFxuIDkzOTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbiA5NDA6XFx0XFx0XFx0aWYgKGl0ZXIgIT0gc2RhdGEpXFxuIDk0MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTQyOlxcdFxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2bG9jYWwtXFx1MDAzZWlmbGlzdF9tdHgpO1xcbiA5NDM6XFx0XFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZzZGF0YS1cXHUwMDNlbGlzdCk7XFxuIDk0NDpcXHRcXHRcXHRyZXR1cm47XFxuIDk0NTpcXHRcXHR9XFxuIDk0NjpcXHR9XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdHN0YXRpYyB2b2lkIGllZWU4MDIxMV91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gOTQ5OlxcdHtcXG4gOTUwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0aWVlZTgwMjExX3VubGlzdF9zZGF0YShzZGF0YSk7XFxuIDk1MzpcXHRcXHRpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0XFxuIDk1NjpcXHRzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gOTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcXG4gOTU4OlxcdHtcXG4gOTU5OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gOTYwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbiA5NjE6XFx0XFxuIDk2MjpcXHRcXHRyZXR1cm4gZHJ2X25ldF9zZXR1cF90Yyhsb2NhbCwgc2RhdGEsIGRldiwgdHlwZSwgdHlwZV9kYXRhKTtcXG4gOTYzOlxcdH1cXG4gOTY0OlxcdFxcbiA5NjU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcXG4gOTY2OlxcdFxcdC5uZG9fb3BlblxcdFxcdD0gaWVlZTgwMjExX29wZW4sXFxuIDk2NzpcXHRcXHQubmRvX3N0b3BcXHRcXHQ9IGllZWU4MDIxMV9zdG9wLFxcbiA5Njg6XFx0XFx0Lm5kb191bmluaXRcXHRcXHQ9IGllZWU4MDIxMV91bmluaXQsXFxuIDk2OTpcXHRcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0LFxcbiA5NzA6XFx0XFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcXG4gOTcxOlxcdFxcdC5uZG9fc2V0X21hY19hZGRyZXNzIFxcdD0gaWVlZTgwMjExX2NoYW5nZV9tYWMsXFxuIDk3MjpcXHRcXHQubmRvX3NldHVwX3RjXFx0XFx0PSBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjLFxcbiA5NzM6XFx0fTtcXG4gOTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDowOS4xNjYyNTgyODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ3NjIyNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIGBsb2NhbC1cdTAwM2VpbnRlcmZhY2VzYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBsb2NhbC1cdTAwM2VpbnRlcmZhY2VzYCBpcyBtYW5pcHVsYXRlZCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmZhY2UgbWFuYWdlbWVudCBmb3IgbWFjODAyMTEgbGlrZWx5IHJlc2lkZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoICp3aXRoaW4qIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSdtIGxvb2tpbmcgZm9yIGRpcmVjdCBtb2RpZmljYXRpb25zIHRvIHRoYXQgcGFydGljdWxhciBzdHJ1Y3QgbWVtYmVyLiBBIHNpbXBsZSBgZ3JlcGAgb3IgYW4gSURFJ3Mgc2VhcmNoIHdvdWxkIGJlIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIGZvY3VzIG9uIGFzc2lnbm1lbnRzIChgPWApLCBwb3RlbnRpYWxseSBhbHNvIGluY3JlbWVudHMvZGVjcmVtZW50cyAoYCs9YCwgYC0tYCkgaWYgdGhleSBhcmUgaW52b2x2ZWQgaW4gbWFuaXB1bGF0aW5nIHRoZSBpbnRlcmZhY2UgbGlzdC4gSSdtIGFsc28gZ29pbmcgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgc3RydWN0dXJlIGFjY2Vzc2VzIGxpa2UgYGxvY2FsLVx1MDAzZWludGVyZmFjZXMtXHUwMDNlLi4uYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRyYWNrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGxpc3Qgb2YgaW50ZXJmYWNlcyBpcyBiZWluZyBidWlsdCwgbWFpbnRhaW5lZCwgYW5kIGNsZWFuZWQgdXAsIGFzIHRoaXMgaXMgY3JpdGljYWwgdG8gcHJvcGVyIGRyaXZlciBvcGVyYXRpb24uIE9uY2UgSSBoYXZlIHRoZSBsb2NhdGlvbnMsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGludGVyZmFjZSBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGFuZCBhbnkgcmUtYXJyYW5nZW1lbnQgaW4gdGhpcyBsb2NhdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBzdXJyb3VuZGluZyB0aGUgYWNjZXNzIGFzIHdlbGwsIHRoYXQgaXMgYWxzbyBjcml0aWNhbCB0byB1bmRlcnN0YW5kLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIHNvbWUgZm9ybSBvZiBsaW5rZWQgbGlzdCBtYW5pcHVsYXRpb24sIGdpdmVuIHRoYXQgaXQncyBsaWtlbHkgbWFuYWdpbmcgYSB2YXJpYWJsZSBudW1iZXIgb2YgaW50ZXJmYWNlcywgYnV0IEknbGwgY29uZmlybSB0aGF0IGFzIEkgcmV2aWV3IHRoZSBjb2RlLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgbGlmZWN5Y2xlIG9mIGFuIGludGVyZmFjZSBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGlzIGNvcmUgbWFjODAyMTEgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5OTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjEyLjMxMzg4MzA1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MTMxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZXJmYWNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbWFjODAyMTEvYXAuYz0yOTc9dm9pZCBpZWVlODAyMTFfYXBfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2FwLmMtMzAxLVxcbm5ldC9tYWM4MDIxMS9hcC5jOjMwMjpcXHQvKiByeC5jIGNhbm5vdCBxdWV1ZSBhbnkgbm9uLWFjdGlvbiBmcmFtZXMgdG8gQVAgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9hcC5jLTMwMy1cXHRpZiAoV0FSTl9PTighaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LVxcdTAwM2VmcmFtZV9jb250cm9sKSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9MzcwOD1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzczLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzozNzc0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzc1LVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTM3OTUtXFx0fVxcbm5ldC9tYWM4MDIxMS9jZmcuYzozNzk2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0zNzk3LVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQyNDU9c3RhdGljIHZvaWQgaWVlZTgwMjExX2VuZF9jYWMoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00MjUzLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo0MjU0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy00MjU1LVxcdFxcdGxpbmtfZGF0YSA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2VsaW5rW2xpbmtfaWRdLCBzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDM3NT12b2lkIGllZWU4MDIxMV9jc2FfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTQzOTUtXFx0XFx0LyogVHJpZ2dlciBpZWVlODAyMTFfY3NhX2ZpbmlzaCgpIG9uIHRoZSBub24tdHJhbnNtaXR0aW5nXFxubmV0L21hYzgwMjExL2NmZy5jOjQzOTY6XFx0XFx0ICogaW50ZXJmYWNlcyB3aGVuIGNoYW5uZWwgc3dpdGNoIGlzIHJlY2VpdmVkIG9uXFxubmV0L21hYzgwMjExL2NmZy5jLTQzOTctXFx0XFx0ICogdHJhbnNtaXR0aW5nIGludGVyZmFjZVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ0Njc9c3RhdGljIGludCBfX2llZWU4MDIxMV9jc2FfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDg2LVxcdFxcdCAqIHdpdGggbXVsdGktdmlmIGNzYSBkcml2ZXIgbWF5IGNhbGwgaWVlZTgwMjExX2NzYV9maW5pc2goKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NDg3OlxcdFxcdCAqIG1hbnkgdGltZXMgd2hpbGUgd2FpdGluZyBmb3Igb3RoZXIgaW50ZXJmYWNlcyB0byB1c2UgdGhlaXJcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ4OC1cXHRcXHQgKiByZXNlcnZhdGlvbnNcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTEyPWllZWU4MDIxMV9jaGFuY3R4X3VzZXJfaXRlcl9uZXh0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy0xMzctXFx0LyogbmV4dCAob3IgZmlyc3QpIGludGVyZmFjZSAqL1xcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTM4OlxcdGl0ZXItXFx1MDAzZXNkYXRhID0gbGlzdF9wcmVwYXJlX2VudHJ5KGl0ZXItXFx1MDAzZXNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpO1xcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTM5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoaXRlci1cXHUwMDNlc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTQwLVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoaXRlci1cXHUwMDNlc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYz0yODQ9aWVlZTgwMjExX2NoYW5yZXFfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmVxICphLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy0yOTUtXFx0LypcXG5uZXQvbWFjODAyMTEvY2hhbi5jOjI5NjpcXHQgKiBSZW1vdmUgTlBDQSBpZiBpdCdzIG5vdCByZXF1aXJlZCwgc28gdGhhdCBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL2NoYW4uYy0yOTctXFx0ICogc2hhcmluZyBhIGNoYW5uZWwgY29udGV4dCB3aWxsIG5vdCB1c2UgTlBDQSB3aGlsZSB0aGVcXG5uZXQvbWFjODAyMTEvY2hhbi5jLTI5OC1cXHQgKiBjaGFubmVsIGNvbnRleHQgaXMgc2hhcmVkLlxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6Mjk5OlxcdCAqIElmIGJvdGggc2lkZXMgYXJlIEFQIGludGVyZmFjZXMgcmVxdWlyaW5nIE5QQywgdGhlcmUnc1xcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMzAwLVxcdCAqIGFuIGFzc3VtcHRpb24gdGhhdCB1c2Vyc3BhY2Ugd2lsbCBzZXQgdGhlbSB1cCB3aXRoXFxuLS1cXG5uZXQvbWFjODAyMTEvY2hhbi5jPTU4Mj1pZWVlODAyMTFfZ2V0X2NoYW5jdHhfbWF4X3JlcXVpcmVkX2J3KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy02MzEtICogcmVjYWxjIHRoZSBtaW4gcmVxdWlyZWQgY2hhbiB3aWR0aCBvZiB0aGUgY2hhbm5lbCBjb250ZXh0LCB3aGljaCBpc1xcbm5ldC9tYWM4MDIxMS9jaGFuLmM6NjMyOiAqIHRoZSBtYXggb2YgbWluIHJlcXVpcmVkIHdpZHRocyBvZiBhbGwgdGhlIGludGVyZmFjZXMgYm91bmQgdG8gdGhpc1xcbm5ldC9tYWM4MDIxMS9jaGFuLmMtNjMzLSAqIGNoYW5uZWwgY29udGV4dC5cXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM9Njc1PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jaGFuX2J3X2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtNzQxLSAqIHJlY2FsYyB0aGUgbWluIHJlcXVpcmVkIGNoYW4gd2lkdGggb2YgdGhlIGNoYW5uZWwgY29udGV4dCwgd2hpY2ggaXNcXG5uZXQvbWFjODAyMTEvY2hhbi5jOjc0MjogKiB0aGUgbWF4IG9mIG1pbiByZXF1aXJlZCB3aWR0aHMgb2YgYWxsIHRoZSBpbnRlcmZhY2VzIGJvdW5kIHRvIHRoaXNcXG5uZXQvbWFjODAyMTEvY2hhbi5jLTc0My0gKiBjaGFubmVsIGNvbnRleHQuXFxuLS1cXG5uZXQvbWFjODAyMTEvY2hhbi5jPTgxMT1zdGF0aWMgdm9pZCBfaWVlZTgwMjExX2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy04MzEtXFx0XFx0ICogbWFjODAyMTEgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgc2hhcmluZyBpZGVudGljYWxcXG5uZXQvbWFjODAyMTEvY2hhbi5jOjgzMjpcXHRcXHQgKiBjaGFuY3R4J3MgZm9yIFMxRyBpbnRlcmZhY2VzLlxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtODMzLVxcdFxcdCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYz0xODg1PXN0YXRpYyBpbnQgaWVlZTgwMjExX3ZpZl91c2VfcmVzZXJ2ZWRfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYy0xOTQ0LVxcdFxcdFxcdHdpcGh5X2luZm8obG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTk0NTpcXHRcXHRcXHRcXHQgICBcXFwiY2hhbm5lbCBjb250ZXh0IHJlc2VydmF0aW9uIGNhbm5vdCBiZSBmaW5hbGl6ZWQgYmVjYXVzZSBzb21lIGludGVyZmFjZXMgYXJlbid0IHN3aXRjaGluZ1xcXFxuXFxcIik7XFxubmV0L21hYzgwMjExL2NoYW4uYy0xOTQ2LVxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM9MjM1Nz1pbnQgaWVlZTgwMjExX2xpbmtfdXNlX3Jlc2VydmVkX2NvbnRleHQoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXFxuLS1cXG5uZXQvbWFjODAyMTEvY2hhbi5jLTIzOTctXFx0ICogVGhlIGllZWU4MDIxMV92aWZfdXNlX3Jlc2VydmVkX3N3aXRjaCgpIGFscmVhZHkgc3RvcHMgYWxsIG5lY2Vzc2FyeVxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MjM5ODpcXHQgKiBpbnRlcmZhY2VzIHVwb24gZmFpbHVyZS5cXG5uZXQvbWFjODAyMTEvY2hhbi5jLTIzOTktXFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jPTM3OT1zdGF0aWMgc3NpemVfdCByZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuYy0zOTEtXFx0aWYgKHJldClcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jOjM5MjpcXHRcXHRjZmc4MDIxMV9zaHV0ZG93bl9hbGxfaW50ZXJmYWNlcyhsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtMzkzLVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYz0xNjY4PXZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjczLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTY3NDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzUtXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD04Mz1leHRlcm4gY29uc3QgdTggaWVlZTgwMjExX2FjX3RvX3Fvc19tYXNrW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwLSAqIEN1cnJlbnQgbWFjODAyMTEgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDE2MDAgQUlEU1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjkxOiAqIGZvciBTMUcgaW50ZXJmYWNlcy4gV2l0aCByZWdhcmRzIHRvIGFuIFMxRyBUSU0sIHRoaXMgY292ZXJzIDI1IGJsb2Nrc1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkyLSAqIGFzIGVhY2ggYmxvY2sgaXMgNjQgQUlEcy5cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIxMj1lbnVtIGllZWU4MDIxMV9wYWNrZXRfcnhfZmxhZ3Mge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzLSAqXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjI0OiAqIFRoZXNlIGZsYWdzIGFyZSB1c2VkIGFjcm9zcyBoYW5kbGluZyBtdWx0aXBsZSBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjI1LSAqIGZvciBhIHNpbmdsZSBmcmFtZS5cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTg5OD1lbnVtIGllZWU4MDIxMV9zZGF0YV9zdGF0ZV9iaXRzIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTkwNy0gKiBASUVFRTgwMjExX0NIQU5DVFhfU0hBUkVEOiBjaGFubmVsIGNvbnRleHQgbWF5IGJlIHVzZWQgYnlcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5MDg6ICpcXHRtdWx0aXBsZSBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTA5LSAqIEBJRUVFODAyMTFfQ0hBTkNUWF9FWENMVVNJVkU6IGNoYW5uZWwgY29udGV4dCBjYW4gYmUgdXNlZFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTI3MD1zdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICp2aWZfdG9fc2RhdGEoc3RydWN0IGllZWU4MDIxMV92aWYgKnApXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMjg0LVxcdCAgICAgX19fbGlua19pZDsgX19fbGlua19pZCA9IDAgLyogYWx3YXlzIHN0b3AgKi8pXFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjEyODU6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShfX19zZGF0YSwgXFx1MDAyNihfbG9jYWwpLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxcdFxcXFxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMjg2LVxcdGlmIChfX19saW5rX2lkID09IEFSUkFZX1NJWkUoX19fc2RhdGEtXFx1MDAzZWxpbmspIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTMwMy1cXHQgICAgIF9fX2xpbmtfaWQ7IF9fX2xpbmtfaWQgPSAwIC8qIGFsd2F5cyBzdG9wICovKVxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxMzA0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoX19fc2RhdGEsIFxcdTAwMjYoX2xvY2FsKS1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdClcXHRcXFxcXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTMwNS1cXHRpZiAoX19fbGlua19pZCA9PSBBUlJBWV9TSVpFKF9fX3NkYXRhLVxcdTAwM2VsaW5rKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDk4LVxcdGludCBtb25pdG9ycywgdmlydF9tb25pdG9ycywgdHhfbW50cnM7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTQ5OTpcXHQvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aXRoIGNvcnJlc3BvbmRpbmcgRklGXyBmbGFncyAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE1MDAtXFx0aW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzLCBmaWZfcHNwb2xsLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTU5Ni1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNTk3OlxcdC8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdpdGggYWxsbXVsdGkgUlggKi9cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTk4LVxcdGF0b21pY190IGlmZl9hbGxtdWx0aXM7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjA2LVxcdC8qIHNlZSBpZmFjZS5jICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYwNzpcXHRzdHJ1Y3QgbGlzdF9oZWFkIGludGVyZmFjZXM7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTYwOC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIG1vbl9saXN0OyAvKiBvbmx5IHRoYXQgYXJlIElGRl9VUCAqL1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTcwMi1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNzAzOlxcdGludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0sIGZvciBhbGwgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE3MDQtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTAwPWllZWU4MDIxMV9maW5kX25hbl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxMDYtXFx0LyogRmluZCB0aGUgTkFOIGludGVyZmFjZSAtIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxMDc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjEwOC1cXHRcXHRpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTk5PXZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIwMDp2b2lkIGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIwMS11MzIgaWVlZTgwMjExX2lkbGVfb2ZmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNT1zdGF0aWMgdTMyIF9faWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTIwLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEyMTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEyMi1cXHRcXHRpZiAoaXRlci1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xNjE9c3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X21hYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODctXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTg4OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTg5LVxcdFxcdGlmIChpdGVyID09IHNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MzQxPXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoZWNrX2NvbmN1cnJlbnRfaWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zNTAtXFx0Lyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjM1MTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5zZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMzUyLVxcdFxcdGlmIChuc2RhdGEgIT0gc2RhdGEgXFx1MDAyNlxcdTAwMjYgaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcobnNkYXRhKSkge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMzgwLVxcdFxcdFxcdCAqIFRvIHJlbW92ZSB0aGlzIHJlc3RyaWN0aW9uIHdlJ2QgaGF2ZSB0byBkaXNhbGxvdyB0aGVtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MzgxOlxcdFxcdFxcdCAqIGZyb20gc2V0dGluZyB0aGUgc2FtZSBTU0lEIG9uIGRpZmZlcmVudCBJQlNTIGludGVyZmFjZXNcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0zODItXFx0XFx0XFx0ICogYmVsb25naW5nIHRvIHRoZSBzYW1lIGhhcmR3YXJlLiBUaGVuLCBob3dldmVyLCB3ZSdyZVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMzk3LVxcdFxcdFxcdC8qXFxubmV0L21hYzgwMjExL2lmYWNlLmM6Mzk4OlxcdFxcdFxcdCAqIFRoZSByZW1haW5pbmcgY2hlY2tzIGFyZSBvbmx5IHBlcmZvcm1lZCBmb3IgaW50ZXJmYWNlc1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTM5OS1cXHRcXHRcXHQgKiB3aXRoIHRoZSBzYW1lIE1BQyBhZGRyZXNzLlxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9NDc5PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2Rvd24pXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzYtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxubmV0L21hYzgwMjExL2lmYWNlLmM6NjM3OlxcdFxcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo2Mzg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzktXFx0XFx0XFx0V0FSTl9PTihpdGVyLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9ODQ1PXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg0OC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo4NDk6XFx0LyogY2xvc2UgZGVwZW5kZW50IFZMQU4gaW50ZXJmYWNlcyBiZWZvcmUgbG9ja2luZyB3aXBoeSAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg1MC1cXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NjEtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6ODYyOlxcdC8qIENsb3NlIHRoZSBkZXBlbmRlbnQgTUJTU0lEIGludGVyZmFjZXMgd2l0aCB3aXBoeSBsb2NrIGFzIHdlIG1heSBiZVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg2My1cXHQgKiB0ZXJtaW5hdGluZyBpdHMgcGFydG5lciBsaW5rcyB0b28gaW4gY2FzZSBvZiBNTEQuXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05MzI9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTkzOC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5Mzk6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NDAtXFx0XFx0aWYgKGl0ZXIgIT0gc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMTYwPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZWNhbGNfc2RhdGFfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExNjktXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTE3MDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3MS1cXHRcXHRpZiAodnNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIHx8XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMTc5PXZvaWQgaWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE4Ny1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMTg4OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExODktXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMzg5PWludCBpZWVlODAyMTFfZG9fb3BlbihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBib29sIGNvbWluZ191cClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE1OTktXFx0XFx0ICogZG9lc24ndCBzdGFydCB1cCB3aXRoIHNhbmUgZGVmYXVsdHMuXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTYwMDpcXHRcXHQgKiBFbmFibGUgUW9TIGZvciBhbnl0aGluZyBidXQgc3RhdGlvbiBpbnRlcmZhY2VzLlxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE2MDEtXFx0XFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yMTIzPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NpZ25fcGVybV9hZGRyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE0Ni1cXHRcXHQvKiBtYXRjaCB1cCB3aXRoIGFuIEFQIGludGVyZmFjZSAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIxNDc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE0OC1cXHRcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE1Ny1cXHRcXHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIFAyUF9ERVZfQUREUl9GT1JfSU5URikpIHtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTU4OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNTktXFx0XFx0XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfREVWSUNFKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjE3Mi1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMTczOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIxNzQtXFx0XFx0XFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwobG9jYWwtXFx1MDAzZWh3LndpcGh5LVxcdTAwM2VhZGRyZXNzZXNbaV0uYWRkcixcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIyMDgtXFx0XFx0bSA9IGxvY2FsLVxcdTAwM2Vody53aXBoeS1cXHUwMDNlcGVybV9hZGRyO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMDk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIxMC1cXHRcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMjMzLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjIyMzQ6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjIzNS1cXHRcXHRcXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbCh0bXBfYWRkciwgc2RhdGEtXFx1MDAzZXZpZi5hZGRyKSkge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MjI1Mj1pbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTAtXFx0XFx0LyogTVRVIHJhbmdlIGlzIG5vcm1hbGx5IDI1NiAtIDIzMDQsIHdoZXJlIHRoZSB1cHBlciBsaW1pdCBpc1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0MTE6XFx0XFx0ICogdGhlIG1heGltdW0gTVNEVSBzaXplLiBNb25pdG9yIGludGVyZmFjZXMgc2VuZCBhbmQgcmVjZWl2ZVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MTItXFx0XFx0ICogTVBEVSBhbmQgQS1NU0RVIGZyYW1lcyB3aGljaCBtYXkgYmUgbXVjaCBsYXJnZXIgc28gd2UgZG9cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MjgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZWlmbGlzdF9tdHgpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0Mjk6XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNnNkYXRhLVxcdTAwM2VsaXN0LCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0MzAtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yNDY0PXZvaWQgaWVlZTgwMjExX3NkYXRhX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDcwLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0NzE6dm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ3Mi17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDc3LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0Nzg6XFx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzdG9wcGVkIHNvXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ3OS1cXHQgKiB0aGF0IHRoZSBoYXJkd2FyZSBpcyBzdG9wcGVkLiBPdGhlcndpc2UsIHRoZSBkcml2ZXIgbWlnaHQgc3RpbGwgYmVcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDgwOlxcdCAqIGl0ZXJhdGluZyB0aGUgaW50ZXJmYWNlcyBkdXJpbmcgdGhlIHNodXRkb3duLCBlLmcuIGZyb20gYSB3b3JrZXJcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDgxLVxcdCAqIG9yIGZyb20gUlggcHJvY2Vzc2luZyBvciBzaW1pbGFyLCBhbmQgaWYgaXQgZG9lcyBzbyAodXNpbmcgYXRvbWljXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDg4LVxcdCAqL1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0ODk6XFx0Y2ZnODAyMTFfc2h1dGRvd25fYWxsX2ludGVyZmFjZXMobG9jYWwtXFx1MDAzZWh3LndpcGh5KTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDkwLVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMjQ5Ni1cXHRtdXRleF9sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxubmV0L21hYzgwMjExL2lmYWNlLmM6MjQ5NzpcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgXFx1MDAyNnVucmVnX2xpc3QpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0OTgtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTIwPXN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNjctXFx0XFx0LypcXG5uZXQvbWFjODAyMTEva2V5LmM6MTY4OlxcdFxcdCAqIFRoZSBkcml2ZXIgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy5cXG5uZXQvbWFjODAyMTEva2V5LmM6MTY5OlxcdFxcdCAqIEhlbmNlLCBkb24ndCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNzAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9ODQ2PWludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy04NzUtXFx0XFx0ICogdGhlIHNhbWUgY2lwaGVyLiBFbmZvcmNlIHRoZSBhc3N1bXB0aW9uIGZvciBwYWlyd2lzZSBrZXlzLlxcbm5ldC9tYWM4MDIxMS9rZXkuYzo4NzY6XFx0XFx0ICogTkFOIERhdGEgaW50ZXJmYWNlcyBhcmUgZXhlbXB0OiBXaS1GaSBBd2FyZSB2NC4wIHNlY3Rpb24gNy40XFxubmV0L21hYzgwMjExL2tleS5jLTg3Ny1cXHRcXHQgKiByZXF1aXJlcyB1cGdyYWRpbmcgdGhlIE5ELVRLU0Egd2hlbiBhIG5ldyBORFAgbmVnb3RpYXRlcyBhXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTAyMD12b2lkIGllZWU4MDIxMV9pdGVyX2tleXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTAzOS1cXHR9IGVsc2Uge1xcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDQwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdClcXG5uZXQvbWFjODAyMTEva2V5LmMtMTA0MS1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTA2NT12b2lkIGllZWU4MDIxMV9pdGVyX2tleXNfcmN1KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL2tleS5jLTEwODAtXFx0fSBlbHNlIHtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTA4MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDgyLVxcdFxcdFxcdF9pZWVlODAyMTFfaXRlcl9rZXlzX3JjdShodywgc2RhdGEsIGl0ZXIsIGl0ZXJfZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTk2PXN0YXRpYyB1MzIgaWVlZTgwMjExX2NhbGNfaHdfY29uZl9jaGFuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYy0xNzMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTc0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE3NS1cXHRcXHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mLmNoYW5jdHhfY29uZikpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTQ3ND1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVzdGFydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmMtNDkwLVxcbm5ldC9tYWM4MDIxMS9tYWluLmM6NDkxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9tYWluLmMtNDkyLVxcdFxcdC8qXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTUzMC1cXHRpZiAocmV0KVxcbm5ldC9tYWM4MDIxMS9tYWluLmM6NTMxOlxcdFxcdGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKGxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxubmV0L21hYzgwMjExL21haW4uYy01MzItXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTc5Mz1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTk3OC1cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjk3OTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMpO1xcbm5ldC9tYWM4MDIxMS9tYWluLmMtOTgwLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsb2NhbC1cXHUwMDNlbW9uX2xpc3QpO1xcbi0tXFxubmV0L21hYzgwMjExL21haW4uYz0xMTM3PWludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEyNzAtXFx0XFx0XFx0ICogQXNzaWduIHRoZSBmaXJzdCBlbmFibGVkIGNoYW5uZWwgdG8gZGZsdF9jaGFuZGVmXFxubmV0L21hYzgwMjExL21haW4uYzoxMjcxOlxcdFxcdFxcdCAqIGZyb20gdGhlIGxpc3Qgb2YgY2hhbm5lbHMuIEZvciBTMUcgaW50ZXJmYWNlc1xcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTI3Mi1cXHRcXHRcXHQgKiBlbnN1cmUgaXQgY2FuIGJlIHVzZWQgYXMgYSBwcmltYXJ5Llxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYy0xNTI3LVxcdCAqIGFuZCB3ZSBuZWVkIHNvbWUgaGVhZHJvb20gZm9yIHBhc3NpbmcgdGhlIGZyYW1lIHRvIG1vbml0b3JcXG5uZXQvbWFjODAyMTEvbWFpbi5jOjE1Mjg6XFx0ICogaW50ZXJmYWNlcywgYnV0IG5ldmVyIGJvdGggYXQgdGhlIHNhbWUgdGltZS5cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE1MjktXFx0ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE2ODItXFx0cmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7XFxubmV0L21hYzgwMjExL21haW4uYzoxNjgzOlxcdGllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhsb2NhbCk7XFxubmV0L21hYzgwMjExL21haW4uYy0xNjg0LVxcdHJ0bmxfdW5sb2NrKCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTE2OTY9dm9pZCBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTcxNi1cXHQgKi9cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjE3MTc6XFx0aWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKGxvY2FsKTtcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTE3MTgtXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTIxNj1zdHJ1Y3QgbWVzaF9ybWMge1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guaC0yMzMtXFxubmV0L21hYzgwMjExL21lc2guaDoyMzQ6LyogUHVibGljIGludGVyZmFjZXMgKi9cXG5uZXQvbWFjODAyMTEvbWVzaC5oLTIzNS0vKiBWYXJpb3VzICovXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM0NT12b2lkIG1lc2hfc3RhX2NsZWFudXAoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzQ2LVxcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzQ3Oi8qIFByaXZhdGUgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzQ4LS8qIE1lc2ggcGF0aHMgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTg4OD1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYWRkX3ZodF9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTkzOC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjE5Mzk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL21sbWUuYy0xOTQwLVxcdFxcdFxcdGlmIChvdGhlci1cXHUwMDNldmlmLmJzc19jb25mLm11X21pbW9fb3duZXIpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9Mjg3ND1zdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX3N3aXRjaF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDItXFx0XFx0ICogd2l0aCBtdWx0aS12aWYgY3NhIGRyaXZlciBtYXkgY2FsbCBpZWVlODAyMTFfY3NhX2ZpbmlzaCgpXFxubmV0L21hYzgwMjExL21sbWUuYzoyOTQzOlxcdFxcdCAqIG1hbnkgdGltZXMgd2hpbGUgd2FpdGluZyBmb3Igb3RoZXIgaW50ZXJmYWNlcyB0byB1c2UgdGhlaXJcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTI5NDQtXFx0XFx0ICogcmVzZXJ2YXRpb25zXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTM4MjI9dm9pZCBpZWVlODAyMTFfcmVjYWxjX3BzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0zODMzLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MzgzNDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTM4MzUtXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk1ODUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTU4NjpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL21sbWUuYy05NTg3LVxcdFxcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvbmFuLmM9MjI0PWllZWU4MDIxMV9uYW5fdXBkYXRlX2FsbF9uZGlfY2FycmllcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvbmFuLmMtMjI5LVxcbm5ldC9tYWM4MDIxMS9uYW4uYzoyMzA6XFx0LyogSXRlcmF0ZSBhbGwgaW50ZXJmYWNlcyBhbmQgdXBkYXRlIGNhcnJpZXIgZm9yIE5ESSBpbnRlcmZhY2VzICovXFxubmV0L21hYzgwMjExL25hbi5jOjIzMTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvbmFuLmMtMjMyLVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIHx8XFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTgzPXZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF92aWZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy05My1cXHQgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzo5NDpcXHQgKiBTVEEgaW50ZXJmYWNlcy5cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTk1LVxcdCAqL1xcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDUtXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxMDY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDctXFx0XFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTEzMz12b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTQxLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6MTQyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTQzLVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9wbS5jPTIxPWludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pXFxuLS1cXG5uZXQvbWFjODAyMTEvcG0uYy05MS1cXHRcXHQgKi9cXG5uZXQvbWFjODAyMTEvcG0uYzo5MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvcG0uYy05My1cXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9wbS5jLTEzNC1cXHRcXHRcXHQvKiBjZmc4MDIxMSB3aWxsIGNhbGwgYmFjayBpbnRvIG1hYzgwMjExIHRvIGRpc2Nvbm5lY3RcXG5uZXQvbWFjODAyMTEvcG0uYzoxMzU6XFx0XFx0XFx0ICogYWxsIGludGVyZmFjZXMsIGFsbG93IHRoYXQgdG8gcHJvY2VlZCBwcm9wZXJseVxcbm5ldC9tYWM4MDIxMS9wbS5jLTEzNi1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9wbS5jLTE0Ni1cXG5uZXQvbWFjODAyMTEvcG0uYzoxNDc6XFx0LyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGluIHRoZSBkcml2ZXIgKi9cXG5uZXQvbWFjODAyMTEvcG0uYzoxNDg6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL3BtLmMtMTQ5LVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL3BtLmMtMTY3LVxcdC8qXFxubmV0L21hYzgwMjExL3BtLmM6MTY4OlxcdCAqIFdlIGRpc2Nvbm5lY3RlZCBvbiBhbGwgaW50ZXJmYWNlcyBiZWZvcmUgc3VzcGVuZCwgYWxsIGNoYW5uZWxcXG5uZXQvbWFjODAyMTEvcG0uYy0xNjktXFx0ICogY29udGV4dHMgc2hvdWxkIGJlIHJlbGVhc2VkLlxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9Nzk2PWllZWU4MDIxMV92YWxpZGF0ZV9tb25pdG9yX3JhZGlvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtODQwLS8qXFxubmV0L21hYzgwMjExL3J4LmM6ODQxOiAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgcmVjZWl2ZWQgZnJhbWUgdG8gYWxsIG1vbml0b3IgaW50ZXJmYWNlcyBhbmRcXG5uZXQvbWFjODAyMTEvcnguYy04NDItICogcmV0dXJucyBhIGNsZWFuZWQtdXAgU0tCIHRoYXQgbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBGQ1Mgbm9yIHRoZVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTE3MT1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy01MTgzLVxcdCAqIHNvIHB1bnQgaW4gdGhhdCBjYXNlLiBXZSBzaG91bGQgbmV2ZXIgaGF2ZSB0byBkZWxpdmVyIGEgZGF0YVxcbm5ldC9tYWM4MDIxMS9yeC5jOjUxODQ6XFx0ICogZnJhbWUgdG8gbXVsdGlwbGUgaW50ZXJmYWNlcyBhbnl3YXkuXFxubmV0L21hYzgwMjExL3J4LmMtNTE4NS1cXHQgKlxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTM2Nz1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTUxNi1cXG5uZXQvbWFjODAyMTEvcnguYzo1NTE3OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG5uZXQvbWFjODAyMTEvcnguYy01NTE4LVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTcyOD12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTczNS1cXHQvKlxcbm5ldC9tYWM4MDIxMS9yeC5jOjU3MzY6XFx0ICoga2V5IHJlZmVyZW5jZXMgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcyBhcmUgcHJvdGVjdGVkIHVzaW5nIFJDVVxcbm5ldC9tYWM4MDIxMS9yeC5jLTU3MzctXFx0ICogYW5kIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBhcmUgaW4gYSByZWFkLXNpZGUgUkNVIHNlY3Rpb24gZHVyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTI3Nz12b2lkIGllZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjExL3NjYW4uYy0zNTktXFxubmV0L21hYzgwMjExL3NjYW4uYzozNjA6XFx0LyogRG8gbm90IHVwZGF0ZSB0aGUgQlNTIHRhYmxlIGluIGNhc2Ugb2Ygb25seSBtb25pdG9yIGludGVyZmFjZXMgKi9cXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTM2MS1cXHRpZiAobG9jYWwtXFx1MDAzZW9wZW5fY291bnQgPT0gbG9jYWwtXFx1MDAzZW1vbml0b3JzKVxcbi0tXFxubmV0L21hYzgwMjExL3NjYW4uYz00NDg9c3RhdGljIHZvaWQgX19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZClcXG4tLVxcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNTMwLVxcdCAqL1xcbm5ldC9tYWM4MDIxMS9zY2FuLmM6NTMxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNTMyLVxcdFxcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTU5OD1zdGF0aWMgYm9vbCBfX2llZWU4MDIxMV9jYW5fbGVhdmVfY2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTYxMi1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jOjYxMzpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhX2l0ZXIsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zY2FuLmMtNjE0LVxcdFxcdGZvcl9lYWNoX3ZhbGlkX2xpbmsoXFx1MDAyNnNkYXRhX2l0ZXItXFx1MDAzZXdkZXYsIGxpbmtfaWQpXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jPTkyMz1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9kZWNpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zY2FuLmMtOTQwLVxcdCAqL1xcbm5ldC9tYWM4MDIxMS9zY2FuLmM6OTQxOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zY2FuLmMtOTQyLVxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDktICogU3RhdGlvbiBlbnRyaWVzIGFyZSBhZGRlZCBieSBtYWM4MDIxMSB3aGVuIHlvdSBlc3RhYmxpc2ggYSBsaW5rIHdpdGggYVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjUwOiAqIHBlZXIuIFRoaXMgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBmb3IgdGhlIGRpZmZlcmVudCB0eXBlIG9mIGludGVyZmFjZXNcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MS0gKiB3ZSBzdXBwb3J0LiBGb3IgYSByZWd1bGFyIHN0YXRpb24gdGhpcyBtZWFuIHdlIGFkZCB0aGUgQVAgc3RhIHdoZW4gd2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTEyOTI9c3RhdGljIGJvb2wgc3RhX2luZm9fY2xlYW51cF9leHBpcmVfYnVmZmVyZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMjk3LVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjEyOTg6XFx0LyogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3Igc3RhdGlvbnMgb24gQlNTL01CU1MgaW50ZXJmYWNlcyAqL1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEyOTktXFx0aWYgKCFzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vic3MgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTMyNj1zdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfdHgge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMzQ2LSAqIEBrZXk6IGJvb2wgaW5kaWNhdGluZyBlbmNyeXB0aW9uIGlzIGV4cGVjdGVkIChrZXkgaXMgc2V0KVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjM0NzogKiBAaW50ZXJuYWxfZm9yd2FyZDogZm9yd2FyZCBmcm9tcyBpbnRlcm5hbGx5IG9uIEFQL1ZMQU4gdHlwZSBpbnRlcmZhY2VzXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMzQ4LSAqIEB1c2VzX3JzczogY29weSBvZiBVU0VTX1JTUyBodyBmbGFnXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9NTczPWllZWU4MDIxMV9zZGF0YV9mcm9tX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NzgtXFx0aWYgKHNrYi1cXHUwMDNlZGV2KSB7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjU3OTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTU4MC1cXHRcXHRcXHRpZiAoIXNkYXRhLVxcdTAwM2VkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNTg5LVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYzo1OTA6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01OTEtXFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz05NDM9dm9pZCBpZWVlODAyMTFfdHhfbW9uaXRvcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy05NTEtXFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjk1MjpcXHQvKiBzZW5kIGZyYW1lIHRvIG1vbml0b3IgaW50ZXJmYWNlcyBub3cgKi9cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtOTUzLVxcdHJ0YXBfbGVuID0gaWVlZTgwMjExX3R4X3JhZGlvdGFwX2xlbihpbmZvLCBzdGF0dXMpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTk2OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjk3MDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTk3MS1cXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTMzMD1zdGF0aWMgdm9pZCBwdXJnZV9vbGRfcHNfYnVmZmVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMzNi1cXG5uZXQvbWFjODAyMTEvdHguYzozMzc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbm5ldC9tYWM4MDIxMS90eC5jLTMzOC1cXHRcXHRzdHJ1Y3QgcHNfZGF0YSAqcHM7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjEyLjM2NDgwNDI3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDc4OTc5MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNlcXVlbmNlOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgTUFDODAyMTEgSW50ZXJmYWNlIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgZm9yIHJlbW92aW5nIHN0YXRpb25zIGFuZCBpbnRlcmZhY2VzIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IGBjZmc4MDIxMV9kZWxfc3RhYCwgYGNmZzgwMjExX2RlbF9pZmFjZWAsIGFuZCB1bHRpbWF0ZWx5IGBpZWVlODAyMTFfaWZfcmVtb3ZlYCBnZXQgaW52b2tlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW50ZXJmYWNlIHJlbW92YWwgZnVuY3Rpb24gYmVjYXVzZSBpdCBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGUgdGVhcmRvd24gcHJvY2VzcyBmb3IgYSBzdGF0aW9uLlxuXG5JJ2xsIHN0YXJ0IHdpdGggdGhlIGNvZGUgd2l0aGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBhcm91bmQgd2hlcmUgYGllZWU4MDIxMV9pZl9yZW1vdmVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zIHRyaWdnZXJpbmcgdGhpcyBjcml0aWNhbCBvcGVyYXRpb24sIGFuZCBob3cgdGhlIHN0YXRpb24ncyByZW1vdmFsIGZpdHMgaW50byB0aGUgd2hvbGUgcHJvY2Vzcy4gSSB3aWxsIHNlZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBBbmQgd2hhdCBhcmUgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MvcmVhc29ucyBmb3IgdGhlc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDM5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MTYuODQzNzg2NTA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY3NzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfaWZfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTIwNj1zdGF0aWMgc3RydWN0IHdpcmVsZXNzX2RldiAqaWVlZTgwMjExX2FkZF9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIyNS1cXHRcXHRpZiAoZXJyKSB7XFxubmV0L21hYzgwMjExL2NmZy5jOjIyNjpcXHRcXHRcXHRpZWVlODAyMTFfaWZfcmVtb3ZlKHNkYXRhKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjI3LVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTI1Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjUzLXtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjU0OlxcdGllZWU4MDIxMV9pZl9yZW1vdmUoSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjU1LVxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE5Nz1pbnQgaWVlZTgwMjExX2lmX2NoYW5nZV90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxOTgtXFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxOTk6dm9pZCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjAwLXZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTIyNTI9aW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDM3LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0Mzg6dm9pZCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDoxNi44OTE0NjcwNTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQzNzAxNjUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQgZnJvbSBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCBsaW5lcyAyNDM1LTI1MTAuXG5cbioqRGl2aW5nIERlZXAgaW50byBpZmFjZS5jOiBBIERldGFpbGVkIExvb2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgdGhlIHNlY3Rpb24gZnJvbSBgaWZhY2UuY2Agb3BlbiBpbiBteSBtZW50YWwgZWRpdG9yLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBsaW5lcyAyNDM1IHRocm91Z2ggMjUxMC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHRoZSBpbnRlcmZhY2UgbGF5ZXIgb2YgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrLiBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBJJ2Qgd2FnZXIgd2UncmUgbGlrZWx5IGluIGEgZnVuY3Rpb24gb3IgYSBjcnVjaWFsIGJsb2NrIGRlYWxpbmcgd2l0aCBpbnRlcmZhY2Utc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBidXQgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGJyaW5naW5nIGFuIGludGVyZmFjZSB1cCwgZG93biwgb3IgaGFuZGxpbmcgc29tZSBraW5kIG9mIGFzc29jaWF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgcmVsYXRpb25zaGlwcy4gSSdtIGdvaW5nIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0bzpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBBcmUgdGhlcmUgcm9idXN0IGVycm9yIGNoZWNrcywgYW5kIGhvdyBhcmUgZmFpbHVyZXMgY29tbXVuaWNhdGVkP1xuKiAgICoqQ29uY3VycmVuY3k6KiogQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgYmVpbmcgbWFuYWdlZD9cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogQXJlIHRoZXJlIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucyBpbiB0aGlzIGFyZWE/IElmIHNvLCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgdG8gcHJldmVudCBsZWFrcz9cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IHN0cnVjdHVyZXMgYXJlIGF0IHBsYXksIGFuZCB3aGF0IGtpbmQgb2YgbW9kaWZpY2F0aW9ucyBhcmUgZ29pbmcgb24/IEknbGwgcHJvYmFibHkgc2VlIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCwgYHN0cnVjdCBpZWVlODAyMTFfdmlmYCwgZXRjLiwgd2hpY2ggSSdsbCByZWxhdGUgdG8gbXkgbWVudGFsIG1vZGVsLlxuKiAgICoqQWJzdHJhY3Rpb24gTGVha3M6KiogQW0gSSBzZWVpbmcgdGhlIGNvZGUgbWFrZSBkaXJlY3QgY2FsbHMgdG8gaGFyZHdhcmUgb3IgbmV0d29yayBzdGFjayBlbGVtZW50cyBvciBpcyBpdCBhZGhlcmluZyB0byBhIG1vcmUgYWJzdHJhY3QgQVBJP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHdlbGwtZG9jdW1lbnRlZCBjb21tZW50cyBhbmQgdmFyaWFibGUgbmFtZXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIGNvZGUgZG9lcy4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIHNlY3Rpb24gZnJvbSBhIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHN0YWJpbGl0eSBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gaG93IHRoaXMgcGllY2Ugb2YgY29kZSBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoaXMgc3Vic3lzdGVtLiBJJ20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIGl0IGlzIGFuIG9wdGltaXphdGlvbiBvciBhIHdvcmthcm91bmQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDMwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MjEuMzI4NDg3MTQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDM1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDM1OlxcdFxcdHJldHVybiAwO1xcbjI0MzY6XFx0fVxcbjI0Mzc6XFx0XFxuMjQzODpcXHR2b2lkIGllZWU4MDIxMV9pZl9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuMjQzOTpcXHR7XFxuMjQ0MDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjI0NDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxuMjQ0MjpcXHRcXG4yNDQzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaWZsaXN0X210eCk7XFxuMjQ0NDpcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnNkYXRhLVxcdTAwM2VsaXN0KTtcXG4yNDQ1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4yNDQ2OlxcdFxcbjI0NDc6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHhxKVxcbjI0NDg6XFx0XFx0XFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cXHUwMDNlbG9jYWwsIHRvX3R4cV9pbmZvKHNkYXRhLVxcdTAwM2V2aWYudHhxKSk7XFxuMjQ0OTpcXHRcXG4yNDUwOlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR4cV9tZ210KVxcbjI0NTE6XFx0XFx0XFx0aWVlZTgwMjExX3R4cV9wdXJnZShzZGF0YS1cXHUwMDNlbG9jYWwsXFxuMjQ1MjpcXHRcXHRcXHRcXHRcXHQgICAgdG9fdHhxX2luZm8oc2RhdGEtXFx1MDAzZXZpZi50eHFfbWdtdCkpO1xcbjI0NTM6XFx0XFxuMjQ1NDpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4yNDU1OlxcdFxcbjI0NTY6XFx0XFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KFxcdTAwMjZzZGF0YS1cXHUwMDNld2Rldik7XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdFxcdGlmICghc2RhdGEtXFx1MDAzZWRldikge1xcbjI0NTk6XFx0XFx0XFx0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcXG4yNDYwOlxcdFxcdFxcdGtmcmVlKHNkYXRhKTtcXG4yNDYxOlxcdFxcdH1cXG4yNDYyOlxcdH1cXG4yNDYzOlxcdFxcbjI0NjQ6XFx0dm9pZCBpZWVlODAyMTFfc2RhdGFfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4yNDY1OlxcdHtcXG4yNDY2OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIXRlc3RfYml0KFNEQVRBX1NUQVRFX1JVTk5JTkcsIFxcdTAwMjZzZGF0YS1cXHUwMDNlc3RhdGUpKSlcXG4yNDY3OlxcdFxcdFxcdHJldHVybjtcXG4yNDY4OlxcdFxcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcXG4yNDY5OlxcdH1cXG4yNDcwOlxcdFxcbjI0NzE6XFx0dm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuMjQ3MjpcXHR7XFxuMjQ3MzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgKnRtcDtcXG4yNDc0OlxcdFxcdExJU1RfSEVBRCh1bnJlZ19saXN0KTtcXG4yNDc1OlxcdFxcbjI0NzY6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0LyogQmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGludGVyZmFjZXMsIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzdG9wcGVkIHNvXFxuMjQ3OTpcXHRcXHQgKiB0aGF0IHRoZSBoYXJkd2FyZSBpcyBzdG9wcGVkLiBPdGhlcndpc2UsIHRoZSBkcml2ZXIgbWlnaHQgc3RpbGwgYmVcXG4yNDgwOlxcdFxcdCAqIGl0ZXJhdGluZyB0aGUgaW50ZXJmYWNlcyBkdXJpbmcgdGhlIHNodXRkb3duLCBlLmcuIGZyb20gYSB3b3JrZXJcXG4yNDgxOlxcdFxcdCAqIG9yIGZyb20gUlggcHJvY2Vzc2luZyBvciBzaW1pbGFyLCBhbmQgaWYgaXQgZG9lcyBzbyAodXNpbmcgYXRvbWljXFxuMjQ4MjpcXHRcXHQgKiBpdGVyYXRpb24pIHdoaWxlIHdlJ3JlIG1hbmlwdWxhdGluZyB0aGUgbGlzdCwgdGhlIGl0ZXJhdGlvbiB3aWxsXFxuMjQ4MzpcXHRcXHQgKiBjcmFzaC5cXG4yNDg0OlxcdFxcdCAqXFxuMjQ4NTpcXHRcXHQgKiBBZnRlciB0aGlzLCB0aGUgaGFyZHdhcmUgc2hvdWxkIGJlIHN0b3BwZWQgYW5kIHRoZSBkcml2ZXIgc2hvdWxkXFxuMjQ4NjpcXHRcXHQgKiBoYXZlIHN0b3BwZWQgYWxsIG9mIGl0cyBhY3Rpdml0aWVzLCBzbyB0aGF0IHdlIGNhbiBkbyBSQ1UtdW5hd2FyZVxcbjI0ODc6XFx0XFx0ICogbWFuaXB1bGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIGxpc3QgYmVsb3cuXFxuMjQ4ODpcXHRcXHQgKi9cXG4yNDg5OlxcdFxcdGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKGxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxuMjQ5MDpcXHRcXG4yNDkxOlxcdFxcdGd1YXJkKHdpcGh5KShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRXQVJOKGxvY2FsLVxcdTAwM2VvcGVuX2NvdW50LCBcXFwiJXM6IG9wZW4gY291bnQgcmVtYWlucyAlZFxcXFxuXFxcIixcXG4yNDk0OlxcdFxcdCAgICAgd2lwaHlfbmFtZShsb2NhbC1cXHUwMDNlaHcud2lwaHkpLCBsb2NhbC1cXHUwMDNlb3Blbl9jb3VudCk7XFxuMjQ5NTpcXHRcXG4yNDk2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4yNDk3OlxcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBcXHUwMDI2dW5yZWdfbGlzdCk7XFxuMjQ5ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmxpc3RfbXR4KTtcXG4yNDk5OlxcdFxcbjI1MDA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsIFxcdTAwMjZ1bnJlZ19saXN0LCBsaXN0KSB7XFxuMjUwMTpcXHRcXHRcXHRib29sIG5ldGRldiA9IHNkYXRhLVxcdTAwM2VkZXY7XFxuMjUwMjpcXHRcXG4yNTAzOlxcdFxcdFxcdC8qXFxuMjUwNDpcXHRcXHRcXHQgKiBSZW1vdmUgSVAgYWRkcmVzc2VzIGV4cGxpY2l0bHksIHNpbmNlIHRoZSBub3RpZmllciB3aWxsXFxuMjUwNTpcXHRcXHRcXHQgKiBza2lwIHRoZSBjYWxsYmFja3MgaWYgd2Rldi1cXHUwMDNlcmVnaXN0ZXJlZCBpcyBmYWxzZSwgc2luY2VcXG4yNTA2OlxcdFxcdFxcdCAqIHdlIGNhbid0IGFjcXVpcmUgdGhlIHdpcGh5X2xvY2soKSBhZ2FpbiB0aGVyZSBpZiBhbHJlYWR5XFxuMjUwNzpcXHRcXHRcXHQgKiBpbnNpZGUgdGhpcyBsb2NrZWQgc2VjdGlvbi5cXG4yNTA4OlxcdFxcdFxcdCAqL1xcbjI1MDk6XFx0XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuYXJwX2FkZHJfY250ID0gMDtcXG4yNTEwOlxcdFxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbjI1MTE6XFx0XFx0XFx0ICAgIHNkYXRhLVxcdTAwM2V1Lm1nZC5hc3NvY2lhdGVkKVxcbjI1MTI6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3ZpZl9jZmdfY2hhbmdlX25vdGlmeShzZGF0YSxcXG4yNTEzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdEJTU19DSEFOR0VEX0FSUF9GSUxURVIpO1xcbjI1MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjIxLjMyODY0OTMzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzc5MzQxNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBVbmluaXRpYWxpemluZyBhIE5ldGRldiBXaXRob3V0IEV4cGxpY2l0IE1hYzgwMjExIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHBvdGVudGlhbCBmYWxsb3V0IHdoZW4gYSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIGlzIHVuaW5pdGlhbGl6ZWQgb3IgdW5yZWdpc3RlcmVkLCBidXQgd2l0aG91dCBgbWFjODAyMTFgIGV4cGxpY2l0bHkgY2FsbGluZyBgaWVlZTgwMjExX2lmX3JlbW92ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhhbWluaW5nIHRoZSBgaWVlZTgwMjExX3VuaW5pdGAgZnVuY3Rpb24uIEJlZm9yZSB0aGUgcmVjZW50IHBhdGNoLCB0aGlzIGZ1bmN0aW9uIHdhcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNhbGxpbmcgYGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YWAuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAuIFRoaXMgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBhIHN1Yi1pbnRlcmZhY2UgZGF0YSBzdHJ1Y3R1cmUgKGBzZGF0YWApIGZyb20gYSBsaW5rZWQgbGlzdCAoYGxvY2FsLVx1MDAzZWludGVyZmFjZXNgKS4gVGhlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IHRoZSBgaWZsaXN0X210eGAgbXV0ZXguIFRoZSBgbGlzdF9kZWxfcmN1YCBjYWxsIGhlcmUgaXMgaW1wb3J0YW50IGZvciB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20sIHdoaWNoIGlzIGludGVyZXN0aW5nIHRvIGNvbnNpZGVyIGZvciBjb25jdXJyZW5jeSBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5Ob3csIGFmdGVyIHRoZSBwYXRjaCwgYGllZWU4MDIxMV91bmluaXRgIG5vdyBjYWxscyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAgYW5kICp0aGVuKiBjYWxscyBgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhYC4gU28gdGhlIG9yZGVyIGlzIGNsZWFybHkgcmVsZXZhbnQ6IFVubGlzdCAqdGhlbiogdGVhcmRvd24uXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNsb3NlbHkgaW5zcGVjdCBsaW5lcyAxNTAtMjUwIGFuZCBsaW5lcyAxODgwLTE5MTAgd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgaG93IHRob3NlIHBhcnRzIHRpZSBpbnRvIHRoaXMgZmxvdywgYW5kIHdoYXQgb3RoZXIgYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQgZHVyaW5nIGRldmljZSB1bmluaXRpYWxpemF0aW9uLiBJJ2xsIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIG90aGVyIHN1YnRsZSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHRoZSBub3JtYWwgcmVtb3ZhbCBwcm9jZWR1cmUgaXNuJ3QgZm9sbG93ZWQuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIHdoYXQgaGFwcGVucyBpZiB0aGUgZHJpdmVyIG9yIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSB1bmxpc3RlZCBvciB0b3JuLWRvd24gc3ViLWludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDoyNS43MDc5OTMwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4gMTU4OlxcdHtcXG4gMTU5OlxcdFxcdGludCBlcnI7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbiAxNjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuIDE2NTpcXHRcXHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cXHUwMDNlbmV0ZGV2LCBuZXQsIFxcXCJ3bGFuJWRcXFwiKTtcXG4gMTY2OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTY5OlxcdH1cXG4gMTcwOlxcdFxcbiAxNzE6XFx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXFxuIDE3MzpcXHR7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpvbGRfbmV0ID0gd2lwaHlfbmV0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDE3NTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xcbiAxNzY6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4gMTc5OlxcdFxcdFxcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIWVycilcXG4gMTgxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxODI6XFx0XFx0XFx0aWYgKCFmb3JjZSlcXG4gMTgzOlxcdFxcdFxcdFxcdGdvdG8gdW5kbztcXG4gMTg0OlxcdFxcdFxcdC8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi9cXG4gMTg1OlxcdFxcdFxcdGRldl9jbG9zZSh3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiAxODY6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpXFxuIDE4NzpcXHRcXHRcXHRcXHRjZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7XFxuIDE4ODpcXHRcXHRcXHRlcnIgPSAwO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRzY29wZWRfZ3VhcmQod2lwaHksIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSkge1xcbiAxOTI6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuIDE5MzpcXHRcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4gMTk0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdFxcdHdpcGh5X25ldF9zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBuZXQpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRcXHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXFxuIDIwNDpcXHRcXHRcXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYsXFxuIDIwNTpcXHRcXHRcXHRcXHRcXHQgICAgZGV2X25hbWUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LmRldikpO1xcbiAyMDY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhZm9yY2UpXFxuIDIwNzpcXHRcXHRcXHRcXHR3aXBoeV9uZXRfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgb2xkX25ldCk7XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbiAyMTI6XFx0XFx0XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjE0OlxcdFxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXFxuIDIxNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbiAyMTY6XFx0XFx0XFx0fVxcbiAyMTc6XFx0XFx0fVxcbiAyMTg6XFx0XFxuIDIxOTpcXHRcXHRpZiAoIWVyciB8fCBmb3JjZSlcXG4gMjIwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xcbiAyMjM6XFx0XFx0d2RldiA9IGxpc3RfZW50cnkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XFxuIDIyNDpcXHR1bmRvOlxcbiAyMjU6XFx0XFx0LypcXG4gMjI2OlxcdFxcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxcbiAyMjc6XFx0XFx0ICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuIDIyODpcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KVxcbiAyMzE6XFx0XFx0XFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHJldHVybiBlcnI7XFxuIDIzNDpcXHR9XFxuIDIzNTpcXHRcXG4gMjM2OlxcdGludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAyMzc6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXFxuIDIzODpcXHR7XFxuIDIzOTpcXHRcXHRpZiAoIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxcbiAyNDA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XFxuIDI0MzpcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRhdGE7XFxuIDI0ODpcXHRcXG4gMjQ5OlxcdFxcdGd1YXJkKHdpcGh5KShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDoyNS43MDgxMzEzOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU1ODM1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBjZmc4MDIxMV9wZXJuZXRfZXhpdGAuIFRoaXMgZnVuY3Rpb24uLi4gaXQncyBjcnVjaWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBjbGVhbmluZyB1cCB0aGUgcGVyLW5ldCBkZXZpY2Ugc3RhdGUgd2l0aGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZGV2aWNlIHJlbW92YWwsIG1vZHVsZSB1bmxvYWQsIGFuZCBnZW5lcmFsbHksIGdyYWNlZnVsIHNodXRkb3duIG9mIG5ldHdvcmsgbmFtZXNwYWNlcy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY2xlYW5lZCB1cCBoZXJlPyBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBvciBhcmUgdGhlcmUgbW9yZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIG91dHN0YW5kaW5nIHdvcmtxdWV1ZXMgb3IgZGVmZXJyZWQgZXZlbnRzIHJlbGF0ZWQgdG8gd2lyZWxlc3Mgb3BlcmF0aW9ucz8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSB0ZWFyZG93biB0aGF0IG5lZWQgY2xvc2VyIHNjcnV0aW55PyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBjZmc4MDIxMSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBldmVudCBoYW5kbGluZyB3aXRoaW4gdGhhdCBuZXR3b3JrIG5hbWVzcGFjZSBjb250ZXh0LiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2UgZnJlZWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBkb3VibGUtZnJlZXMgbHVya2luZyBoZXJlPyBJJ20gaG9waW5nIHRoZSBjb2RlIGlzIGNsZWFuLCBidXQgeW91IG5ldmVyIGtub3cuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIGEgcm9idXN0IGFuZCBzdGFibGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjI3Ljk2Mzk2ODczNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODg1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODg1OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyID0ge1xcbjE4ODY6XFx0XFx0Lm5vdGlmaWVyX2NhbGwgPSBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbCxcXG4xODg3OlxcdH07XFxuMTg4ODpcXHRcXG4xODg5OlxcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbjE4OTA6XFx0e1xcbjE4OTE6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbjE4OTI6XFx0XFxuMTg5MzpcXHRcXHRydG5sX2xvY2soKTtcXG4xODk0OlxcdFxcdGZvcl9lYWNoX3JkZXYocmRldikge1xcbjE4OTU6XFx0XFx0XFx0aWYgKG5ldF9lcSh3aXBoeV9uZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSwgbmV0KSlcXG4xODk2OlxcdFxcdFxcdFxcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XFxuMTg5NzpcXHRcXHR9XFxuMTg5ODpcXHRcXHRydG5sX3VubG9jaygpO1xcbjE4OTk6XFx0fVxcbjE5MDA6XFx0XFxuMTkwMTpcXHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGNmZzgwMjExX3Blcm5ldF9vcHMgPSB7XFxuMTkwMjpcXHRcXHQuZXhpdCA9IGNmZzgwMjExX3Blcm5ldF9leGl0LFxcbjE5MDM6XFx0fTtcXG4xOTA0OlxcdFxcbjE5MDU6XFx0dm9pZCB3aXBoeV93b3JrX3F1ZXVlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbjE5MDY6XFx0e1xcbjE5MDc6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7XFxuMTkwODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHR0cmFjZV93aXBoeV93b3JrX3F1ZXVlKHdpcGh5LCB3b3JrKTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5X3dvcmtfbG9jaywgZmxhZ3MpO1xcbjE5MTM6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNndvcmstXFx1MDAzZWVudHJ5KSlcXG4xOTE0OlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNndvcmstXFx1MDAzZWVudHJ5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHlfd29ya19saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MjcuOTY0MTA3MTM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNzcxMjMwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBMaW51eCBXaXJlbGVzcyBOZXR3b3JrIE5hbWVzcGFjZSBUcmFuc2l0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgbmFtZXNwYWNlIHRyYW5zaXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbXMsIGBjZmc4MDIxMWAgYW5kIGBtYWM4MDIxMWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBzdWJzeXN0ZW1zIGFyZSByZWFjaGFibGUgYW5kIGhvdyBuYW1lc3BhY2Ugc3dpdGNoaW5nIGlzIGhhbmRsZWQuXG5cblJpZ2h0LCBJJ3ZlIGdvdCBpdC4gSSBjYW4gY3JlYXRlIGFuZCBtYW5hZ2UgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzLCBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZpcnRfd2lmaWAsIHVzaW5nIG5ldGxpbmsgKGBubDgwMjExYCkuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB0cmlnZ2VyIG5hbWVzcGFjZSBzd2l0Y2hpbmcuIEkgcmVtZW1iZXIgdGhhdCBuZXRsaW5rIG9mZmVycyBhIGZldyBtZXRob2RzLCBsaWtlIGBOTDgwMjExX0NNRF9TRVRfV0lQSFlgIGluIGNvbmp1bmN0aW9uIHdpdGggYE5MODAyMTFfQVRUUl9ORVROU19QSURgIG9yIGBOTDgwMjExX0FUVFJfTkVUTlNfRkRgLiBUaGF0IHNlZW1zIHByZXR0eSBzdGFuZGFyZC4gQWxzbywgbmFtZXNwYWNlIGV4aXQgdXNpbmcgYGNmZzgwMjExX3Blcm5ldF9leGl0YC5cblxuSSBhbHNvIHJlY2FsbCB0aGF0IGR1cmluZyBpbnRlcmZhY2UgdGVhcmRvd24gb3IgbmFtZXNwYWNlIGRlc3RydWN0aW9uLCB0aGluZ3MgbGlrZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBhcmUgZXhlY3V0ZWQsIHdoaWNoIGFyZSBjcnVjaWFsIGNsZWFudXAgb3BlcmF0aW9ucy5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IHdoZXJlIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBJIG5lZWQgdG8gc2VlIHRoZSBwcmFjdGljYWwgaW1wbGVtZW50YXRpb24uIExldCBtZSBkaWcgaW50byB0aGUgY29kZSB1bmRlciBgbmV0L3dpcmVsZXNzL2AgYW5kIGVsc2V3aGVyZS4gVGhhdCdsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM2OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjMzLjM0MTIzMzM5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI1MTc3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuYz0xNTY9c3RhdGljIGludCBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzAtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzE6c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzItXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMzUtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMzY6aW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMzctXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0MS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI0MjpcXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDMtfVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xODg5PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY2ZnODAyMTFfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xODk1LVxcdFxcdGlmIChuZXRfZXEod2lwaHlfbmV0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSksIG5ldCkpXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxODk2OlxcdFxcdFxcdFdBUk5fT04oX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgXFx1MDAyNmluaXRfbmV0LCB0cnVlKSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xODk3LVxcdH1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9MjQzPXN0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtMjQ0LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6MjQ1OmludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmgtMjQ2LVxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQzNTc9c3RhdGljIGludCBubDgwMjExX3dpcGh5X25ldG5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0Mzk0LVxcdGlmICghbmV0X2VxKHdpcGh5X25ldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpLCBuZXQpKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQzOTU6XFx0XFx0ZXJyID0gY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIG5ldCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDM5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6MzMuNDEzNzU3Njg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMzEyMDg3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG1hYzgwMjExIEludGVyZmFjZSBVbmluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaWVlZTgwMjExX3VuaW5pdGAgYW5kIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSAqZGVmaW5pdGVseSogcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuYGllZWU4MDIxMV91bmluaXRgIGlzIGVzc2VudGlhbGx5IHRoZSBgbmRvX3VuaW5pdGAgY2FsbGJhY2sgd2l0aGluIGBuZXRfZGV2aWNlX29wc2AsIHNwZWNpZmljYWxseSBkZWZpbmVkIHdpdGhpbiBgaWVlZTgwMjExX2RhdGFpZl9vcHNgLiBUaGlzIG1lYW5zIGl0IGdldHMgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQsIHRyaWdnZXJlZCBieSBhY3Rpb25zIGxpa2UgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlYCBvciBgcm9sbGJhY2tfcmVnaXN0ZXJlZF9tYW55YC4gV2l0aCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24sIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBjcnVjaWFsIGJlY2F1c2UgaXQgcmVtb3ZlcyB0aGUgYHNkYXRhYCBzdHJ1Y3R1cmUgZnJvbSBgbG9jYWwtXHUwMDNlaW50ZXJmYWNlc2Agd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCAqd2l0aG91dCogYSBwcmlvciBgaWVlZTgwMjExX2lmX3JlbW92ZWAgY2FsbC4gVGhpcyBzY2VuYXJpbyBhcmlzZXMsIGZvciBpbnN0YW5jZSwgd2hlbiBgY2ZnODAyMTFgIGZhaWxzIHRvIG1vdmUgdGhlIGRldmljZSBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0J3MgYmVpbmcgZGVzdHJveWVkLCBvciBkdXJpbmcgZm9yY2VkIHVucmVnaXN0ZXJzIChlLmcuLCB3aGVuIHVucmVnaXN0ZXJpbmcgYSB3aXJlbGVzcyBkZXZpY2Ugb3IgbmV0IGRldmljZSkgYW5kIG5hbWVzcGFjZSBpc3N1ZXMuXG5cblRoZSBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIGZ1bmN0aW9uIG5vdyBoYXMgYSBgZm9yY2VgIHBhcmFtZXRlci4gV2hlbiBzZXQgdG8gdHJ1ZSwgaXQgZm9yY2VzIHRoZSB1bnJlZ2lzdHJhdGlvbiBvZiB3aXJlbGVzcyBkZXZpY2VzIHRoYXQgZmFpbCB0byBzd2l0Y2ggbmFtZXNwYWNlcy4gVGhpcyBzZWVtcyBkaXJlY3RseSByZWxhdGVkIHRvIG5ldHdvcmsgbmFtZXNwYWNlIGV4aXQsIHdoaWNoIGlzIGFub3RoZXIgYXJlYSBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gcmVjZW50bHkuXG5cbkdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGludm9sdmVkIGluIGNvcmUgd2lyZWxlc3MgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCB0b3VjaGluZyBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAgYW5kIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSBoaWdoIHByaW9yaXR5LiBUaGUgY29kZSBwYXRoIGFwcGVhcnMgcmVhY2hhYmxlLCBhbmQgY29tcGxleCBlbm91Z2ggdG8gd2FycmFudCBleHRlbnNpdmUgZnV6emluZy4gYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JJ2xsIG5vdyBjYXJlZnVsbHkgdmVyaWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHByb3Blcmx5IHNldCB1cC4gSSdsbCBuZWVkIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCB0byBiZSBlbmFibGVkLCBhbmQgSSdsbCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgd2l0aGluIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2MjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDAuNzQ0OTY5NjQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkyNzQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjQxLjAxNDI1MjI5M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE1Mjk1Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipDaGVja2luZyBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZvciBgQ0ZHODAyMTFgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aWdodGx5IGBDRkc4MDIxMWAgaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbS4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3aXJlbGVzcywgaW5jbHVkaW5nIGxpa2VseSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ0ZHODAyMTFgLCBzaG91bGQgYmUgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIHJlbHkgb24sIG9yIGFyZSBhY3RpdmF0ZWQgYnksIGBDRkc4MDIxMWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaG93IGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgd291bGQgYWZmZWN0IHRoZSBvdmVyYWxsIHdpcmVsZXNzIGZ1bmN0aW9uYWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIG1hcCBvdXQgdGhlIFwiaW5mbHVlbmNlXCIgb2YgdGhpcyBjb3JlIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo0My40Mjk1NTA0MTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXSVJFTEVTU19FWFRcXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFdFWFRfQ09SRVxcbiAgIDY6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgV0VYVF9QUk9DXFxuICAxMDpcXHRcXHRkZWZfYm9vbCB5XFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gV0VYVF9DT1JFXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBXRVhUX1BSSVZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIENGRzgwMjExXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gIDIwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMjI6XFx0XFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXFxuICAyMzpcXHRcXHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4ndFxcbiAgMjQ6XFx0XFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXFxuICAyODpcXHRcXHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0aWYgQ0ZHODAyMTFcXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIm5sODAyMTEgdGVzdG1vZGUgY29tbWFuZFxcXCJcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDMuNDI5NjMyMDExWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDk0NjIxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jaWVzIC0gSW52ZXN0aWdhdGluZyB0aGUgTmV0d29yayBLZXJuZWwgTW9kdWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRyaXZpbmcgY2VydGFpbiBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IGl0cyBkZXBlbmRlbmNpZXMsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHdoaWNoIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIG9wdGlvbnMgYXJlIHJlcXVpcmVkIG9yIGltcGFjdGVkIGJ5IGl0cyBjb25maWd1cmF0aW9uLiBJdCdzIGNydWNpYWwgZm9yIG1lIHRvIGhhdmUgYSBzb2xpZCBncmFzcCBvbiB0aGVzZSByZWxhdGlvbnNoaXBzOyB0aGlzIHdpbGwgZW5hYmxlIG1lIHRvIHRyYWNrIGRvd24gdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaXNzdWUgYW5kIHRvIHByb3ZpZGUgYW4gZWZmZWN0aXZlIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODI0OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDUuNTM5MDk2NDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo0NS41MzkxODQwNDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM0OTE1OTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBOYW1lc3BhY2UgU3dpdGNoaW5nIGluIFdpcmVsZXNzIFN1YnN5c3RlbXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgaW1wbGVtZW50YXRpb24gZm9yIHdpcmVsZXNzLCBmb2N1c2luZyBvbiB0aGUgY29yZSBjb25maWd1cmF0aW9uczogYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYCwgYWxvbmdzaWRlIHRoZSBzdGFuZGFyZCBgTkVUYCBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdpbmcuIExldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgYWZmZWN0ZWQgYnkgdGhpcy5cblxuSW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgSSBzZWUgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGFuZCBgaWVlZTgwMjExX3VuaW5pdGAgYXJlIGJlaW5nIHRvdWNoZWQuIFRoZW4sIG92ZXIgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBJJ3ZlIGdvdCBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNgIGFuZCBgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnNgIOKAkyBib3RoIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIGRpc3RpbmN0IG9yIGlubGluZWQg4oCTIGFsb25nIHdpdGggdGhlIGdsb2JhbGx5IGV4cG9ydGVkIGBjZmc4MDIxMV9zd2l0Y2hfbmV0bnNgLCBhbmQgZmluYWxseSwgdGhlIHN0YXRpYyBwZXJuZXQgZXhpdCBjYWxsYmFjayBgY2ZnODAyMTFfcGVybmV0X2V4aXRgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgZGlzdGluY3RuZXNzIG9yIGlubGluaW5nIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIEknbGwgZmxhZyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAsIGBpZWVlODAyMTFfdW5pbml0YCwgYGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zYCwgYF9fY2ZnODAyMTFfc3dpdGNoX25ldG5zYCwgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AsIGFuZCBgY2ZnODAyMTFfcGVybmV0X2V4aXRgIGZvciB0aGF0IGNoZWNrLlxuXG5BbHNvLCBpdCdzIGNydWNpYWwgdG8gZmluZCB0aGUgZW50cnkgcG9pbnQsIHRoZSBjYWxsZXIuIEkgc2VlIGBubDgwMjExX3dpcGh5X25ldG5zYCBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgYXMgYSBkaXJlY3QgbmV0bGluayBoYW5kbGVyIGNhbGxpbmcgYGNmZzgwMjExX3N3aXRjaF9uZXRuc2AuIEkgd2lsbCBiZSBjaGVja2luZyBpbnRvIGBubDgwMjExX3dpcGh5X25ldG5zYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo0OS44ODgzNDc3NTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTg4ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfd2lwaHlfbmV0bnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0MzM0PXN0YXRpYyBpbnQgbmw4MDIxMV9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0MzU2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQzNTc6c3RhdGljIGludCBubDgwMjExX3dpcGh5X25ldG5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDM1OC17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNjYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAwNjc6XFx0XFx0LmRvaXQgPSBubDgwMjExX3dpcGh5X25ldG5zLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAwNjgtXFx0XFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NDkuOTQ3NTM4NTE0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMDE0MjUzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldE5TIFdpcmVsZXNzIEludGVyZmFjZSBTd2l0Y2hpbmcqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHZpZXcgaGVyZS4gSSdtIHNlZWluZyBhIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHdpcmVsZXNzIG5ldHdvcmsgbmFtZXNwYWNlIHN3aXRjaGluZy4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgY2ZnODAyMTFfc3dpdGNoX25ldG5zYFxuKiAgIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2BcbiogICBgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNgXG4qICAgYGNmZzgwMjExX3Blcm5ldF9leGl0YFxuKiAgIGBubDgwMjExX3dpcGh5X25ldG5zYFxuKiAgIGBpZWVlODAyMTFfdW5pbml0YFxuKiAgIGBpZWVlODAyMTFfdW5saXN0X3NkYXRhYFxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIOKAkyBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgb3IgY29uZmlndXJhdGlvbnMsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIGBDRkc4MDIxMWAgb3IgYE1BQzgwMjExYCBtb3JlIGdlbmVyYWxseS4gVGhlbiwgbGV0J3MgY29uZmlybSB0aGUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS5cblxuWXVwLCB0aGlzIGxvb2tzIHdvcnRod2hpbGUuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwgd2lyZWxlc3MgbmV0bnMgc3dpdGNoaW5nIGxvZ2ljIHdpdGhpbiBgY2ZnODAyMTFgIGFuZCBhbHNvIGRlYWxpbmcgd2l0aCBpbnRlcmZhY2UgdW5saXN0aW5nIGluIGBtYWM4MDIxMWAsIGFsbCBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb24gb3IgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uLiBUaGVzZSBwYXRocyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcyBvciB3aGVuIHRlYXJpbmcgZG93biBuZXR3b3JrIG5hbWVzcGFjZXMsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCdzIGFsbCBjbGVhciwgdGhlIGFuYWx5c2lzIHNlZW1zIHNvbGlkLiBPa2F5LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4ODksIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM0OjU2LjI0ODk2NzQ2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTEzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfbmV0bnNcIixcbiAgICBcIl9fY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gICAgXCJjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc1wiLFxuICAgIFwiY2ZnODAyMTFfcGVybmV0X2V4aXRcIixcbiAgICBcIm5sODAyMTFfd2lwaHlfbmV0bnNcIixcbiAgICBcImllZWU4MDIxMV91bmluaXRcIixcbiAgICBcImllZWU4MDIxMV91bmxpc3Rfc2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi91bmxpc3RpbmcgbG9naWMgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgaGFuZGxpbmcgb2YgaW50ZXJmYWNlcyBmYWlsaW5nIHRvIHN3aXRjaCBuYW1lc3BhY2VzIG9uIG5ldG5zIGV4aXQgYW5kIGVuc3VyZXMgbWFjODAyMTEgZHJvcHMgbmV0ZGV2cyBmcm9tIHRoZSBpbnRlcmZhY2UgbGlzdCB1cG9uIHVuaW5pdC4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIHdpdGggdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChlLmcuLCBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc3dpdGNoX25ldG5zXCIsXG4gICAgXCJfX2NmZzgwMjExX3N3aXRjaF9uZXRuc1wiLFxuICAgIFwiY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnNcIixcbiAgICBcImNmZzgwMjExX3Blcm5ldF9leGl0XCIsXG4gICAgXCJubDgwMjExX3dpcGh5X25ldG5zXCIsXG4gICAgXCJpZWVlODAyMTFfdW5pbml0XCIsXG4gICAgXCJpZWVlODAyMTFfdW5saXN0X3NkYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBuYW1lc3BhY2Ugc3dpdGNoaW5nIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24vdW5saXN0aW5nIGxvZ2ljIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIGhhbmRsaW5nIG9mIGludGVyZmFjZXMgZmFpbGluZyB0byBzd2l0Y2ggbmFtZXNwYWNlcyBvbiBuZXRucyBleGl0IGFuZCBlbnN1cmVzIG1hYzgwMjExIGRyb3BzIG5ldGRldnMgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgdXBvbiB1bmluaXQuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93biB3aXRoIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiwgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo1Ni4zMzI0ODkxNTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzIwMDUyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzQ6NTYuMzMzMDY1OTAzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYzMTk0Njk5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjNzZhMDRkNDUzNTk1ZTI1N2RiMjM2Mjg0ZWM5ZWM4MzdkODc1NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjMzOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuaW5kZXggZmRhYzcyOWNhNTgwZC4uNDkxYmJiNjk1ZDE3YiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuQEAgLTkyNCw5ICs5MjQsMzMgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFRoZSBuZXRkZXYgY2FuIGJlIHVucmVnaXN0ZXJlZCB3aXRob3V0IG1hYzgwMjExIGRvaW5nIGl0LCBlLmcuIGJ5IHRoZSBuZXRkZXZcbisgKiBjb3JlIHdoZW4gY2ZnODAyMTEgY291bGRuJ3QgbW92ZSBpdCBvdXQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZSB0aGF0J3MgYmVpbmdcbisgKiBkZXN0cm95ZWQuIERyb3AgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGxpc3QgZWl0aGVyIHdheS5cbisgKi9cbitzdGF0aWMgdm9pZCBpZWVlODAyMTFfdW5saXN0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICppdGVyO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuK1x0XHRpZiAoaXRlciAhPSBzZGF0YSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmxvY2FsLVx1MDAzZWlmbGlzdF9tdHgpO1xuK1x0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNlbGlzdCk7XG4rXHRcdHJldHVybjtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpKTtcbitcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbitcbitcdGllZWU4MDIxMV91bmxpc3Rfc2RhdGEoc2RhdGEpO1xuK1x0aWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjMxZDBmNzA4NjcwMTIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMTUzLDY4ICsxNTMsOTMgQEAgaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcbiB7XG4tXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2O1xuLVx0aW50IGVyciA9IDA7XG4rXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19ORVROU19PSykpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4rXHRcdHJldHVybiAwO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2KVxuK1x0d2Rldi1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XG4rXHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cdTAwM2VuZXRkZXYsIG5ldCwgXCJ3bGFuJWRcIik7XG4rXHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG4re1xuK1x0c3RydWN0IG5ldCAqb2xkX25ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbitcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsICp0bXA7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4rXHRcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XG4rXHRcdGlmICghZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSBmYWxzZTtcbi1cdFx0ZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtXHUwMDNlbmV0ZGV2LCBuZXQsIFwid2xhbiVkXCIpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHR3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xuK1x0XHRpZiAoIWZvcmNlKVxuK1x0XHRcdGdvdG8gdW5kbztcbitcdFx0LyogcmVtb3ZlIGludGVyZmFjZXMgdGhhdCBmYWlsIHRvIGFsbG93IHdpcGh5IHN3aXRjaGluZyAqL1xuK1x0XHRkZXZfY2xvc2Uod2Rldi1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzY29wZWRfZ3VhcmQod2lwaHksIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpXG4rXHRcdFx0Y2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHdkZXYpO1xuK1x0XHRlcnIgPSAwO1xuIFx0fVxuIFxuLVx0aWYgKGVycikge1xuLVx0XHQvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovXG4tXHRcdG5ldCA9IHdpcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHdkZXYsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCxcbi1cdFx0XHRcdFx0XHQgICAgIGxpc3QpIHtcbitcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeSkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IGZhbHNlO1xuLVx0XHRcdGVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZSh3ZGV2LVx1MDAzZW5ldGRldiwgbmV0LFxuLVx0XHRcdFx0XHRcdFx0XCJ3bGFuJWRcIik7XG4tXHRcdFx0V0FSTl9PTihlcnIpO1xuLVx0XHRcdHdkZXYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG4rXHRcdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcbitcdFx0XHRcdFx0ICAgICBOTDgwMjExX0NNRF9ERUxfSU5URVJGQUNFKTtcbiBcdFx0fVxuIFxuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuIFxuLVx0Z3VhcmQod2lwaHkpKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuK1x0XHR3aXBoeV9uZXRfc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIG5ldCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghd2Rldi1cdTAwM2VuZXRkZXYpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpO1xuLVx0fVxuK1x0XHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXG4rXHRcdGVyciA9IGRldmljZV9yZW5hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYsXG4rXHRcdFx0XHQgICAgZGV2X25hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYpKTtcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIWZvcmNlKVxuK1x0XHRcdHdpcGh5X25ldF9zZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgb2xkX25ldCk7XG4gXG4tXHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ERUxfV0lQSFkpO1xuK1x0XHRubDgwMjExX25vdGlmeV93aXBoeShyZGV2LCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpO1xuIFxuLVx0d2lwaHlfbmV0X3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBuZXQpO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4rXHRcdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXG4rXHRcdFx0XHRcdCAgICAgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4rXHRcdH1cbitcdH1cbiBcbi1cdGVyciA9IGRldmljZV9yZW5hbWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYsIGRldl9uYW1lKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkuZGV2KSk7XG4tXHRXQVJOX09OKGVycik7XG4rXHRpZiAoIWVyciB8fCBmb3JjZSlcbitcdFx0cmV0dXJuIGVycjtcbiBcbi1cdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XG4rXHQvKiBzZXQgdG8gdGhlIGxhc3Qgb25lIHRvIHVuZG8gYWxsIG9mIHRoZW0gKi9cbitcdHdkZXYgPSBsaXN0X2VudHJ5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCB0eXBlb2YoKndkZXYpLCBsaXN0KTtcbit1bmRvOlxuK1x0LypcbitcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxuK1x0ICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXG4rXHQgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCxcbitcdFx0XHRcdFx0ICAgICBsaXN0KVxuK1x0XHRXQVJOX09OKGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG9sZF9uZXQpKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSk7XG4tXHR9XG4rXHRyZXR1cm4gZXJyO1xuK31cbiBcbi1cdHJldHVybiAwO1xuK2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfTkVUTlNfT0spKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0LCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNmZzgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcbkBAIC0xODY4LDcgKzE4OTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGNmZzgwMjExX3Blcm5ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJ0bmxfbG9jaygpO1xuIFx0Zm9yX2VhY2hfcmRldihyZGV2KSB7XG4gXHRcdGlmIChuZXRfZXEod2lwaHlfbmV0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpLCBuZXQpKVxuLVx0XHRcdFdBUk5fT04oY2ZnODAyMTFfc3dpdGNoX25ldG5zKHJkZXYsIFx1MDAyNmluaXRfbmV0KSk7XG4rXHRcdFx0V0FSTl9PTihfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBcdTAwMjZpbml0X25ldCwgdHJ1ZSkpO1xuIFx0fVxuIFx0cnRubF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNDo1Ni4zMzMwNjcyMzNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNjcxMTcxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIE5lZWRzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGFza2VkIHRvIGRpZyBpbnRvIHRoaXMga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gRmlyc3QsIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHNjb3BlIG9mIHRoZSByZXF1ZXN0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBkZWZlbnNpdmUgc2VjdXJpdHkvY29kZSBxdWFsaXR5IHRhc2suIE5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFdlJ3JlIGxvb2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFc3NlbnRpYWxseSwgd2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIGJ1Z3MuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L21hYzgwMjExL2lmYWNlLmNgIGFuZCBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIEluIGBpZmFjZS5jYCwgdGhlIGtleSBhZGRpdGlvbiBpcyBgaWVlZTgwMjExX3VubGlzdF9zZGF0YWAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCwgcmVtb3ZlcyBhbiBlbnRyeSBpZiBpdCBmaW5kcyBhIG1hdGNoLCBhbGwgd2hpbGUgcHJvdGVjdGVkIGJ5IGEgbXV0ZXguIFRoZW4sIGl0J3MgY2FsbGVkIHdpdGhpbiBgaWVlZTgwMjExX3VuaW5pdGAgYmVmb3JlIGBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGFgLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9ucywgYnV0IGF0IGEgZ2xhbmNlLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBqdXN0IGZyb20gbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gY2FsbHMuXG5cblRoZW4gdGhlcmUncyB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGNoYW5nZXMuIFdlJ3JlIGxvb2tpbmcgYXQgYSByZWZhY3RvcmluZyBvZiBgY2ZnODAyMTFfc3dpdGNoX25ldG5zYC4gSXQncyBzcGxpdCBpbnRvIGBjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRuc2AgYW5kIGBfX2NmZzgwMjExX3N3aXRjaF9uZXRuc2AuIElmIGBmb3JjZWAgaXMgdHJ1ZSBhbmQgc3dpdGNoaW5nIHRoZSBuZXRucyBvZiBhIHdkZXYgZmFpbHMsIHRoZSBwYXRjaCBjYWxscyBgZGV2X2Nsb3NlYCBhbmQgYGNmZzgwMjExX3VucmVnaXN0ZXJfd2RldmAuIEkgY2FuIHNlZSB0aGVyZSBhcmUgY2hhbmdlcyB0byB3aXBoeSBsb2NrL2d1YXJkcyBhbmQgbm90aWZpY2F0aW9ucyB0b28uIEkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgdG8gZGF0YSBpZiBhIGB3ZGV2YCBuZXRucyBzd2l0Y2ggZmFpbHMuIERvZXMgaXQgbGVhaz8gSXMgZGF0YSBmcmVlZCBwcm9wZXJseT8gSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHVzZT9cblxuVGhlIHJlYWwgY3J1eCBvZiB0aGlzIGFuYWx5c2lzIGlzIGRpZ2dpbmcgaW4gdG8gaWRlbnRpZnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLiBJIG5lZWQgdG8gdXRpbGl6ZSBteSBjb2Rlc2VhcmNoIGFuZCBmaWxlIHJlYWRpbmcgdG9vbHMgdG8gdGhvcm91Z2hseSBpbnNwZWN0IHRoZXNlIHNlY3Rpb25zIG9mIHRoZSBjb2RlIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIFRoYXQgd2lsbCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgZ29vZCBkZXRlcm1pbmF0aW9uIG9uIEtNU0FOIGZ1enppbmcgbmVlZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNToxMC40MDAxODgyMzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTgzODQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfdW5pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuYz05MzI9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VubGlzdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0Ny1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5NDg6c3RhdGljIHZvaWQgaWVlZTgwMjExX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0OS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk2Ny1cXHQubmRvX3N0b3BcXHRcXHQ9IGllZWU4MDIxMV9zdG9wLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk2ODpcXHQubmRvX3VuaW5pdFxcdFxcdD0gaWVlZTgwMjExX3VuaW5pdCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NjktXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwMDUtXFx0Lm5kb19zdG9wXFx0XFx0PSBpZWVlODAyMTFfc3RvcCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMDA2OlxcdC5uZG9fdW5pbml0XFx0XFx0PSBpZWVlODAyMTFfdW5pbml0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwMDctXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfODAyM19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDczLVxcdC5uZG9fc3RvcFxcdFxcdD0gaWVlZTgwMjExX3N0b3AsXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA3NDpcXHQubmRvX3VuaW5pdFxcdFxcdD0gaWVlZTgwMjExX3VuaW5pdCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDc1LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzU6MTAuNTIwMDMzNjMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzY3NjM5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBOb3RpZmljYXRpb25zKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgaG93IHdlIGdldCBpbnRlcmZhY2UgYW5kIFdpLUZpIFBIWSB1cGRhdGVzIG91dCB0byB1c2Vyc3BhY2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgYW55IHJlY2VudCBpc3N1ZXMgYXJlIHByb2JhYmx5IGNlbnRlcmVkIGFyb3VuZCBlaXRoZXIgYG5sODAyMTFfbm90aWZ5X2lmYWNlYCBvciBgbmw4MDIxMV9ub3RpZnlfd2lwaHlgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBicm9hZGNhc3RpbmcgY2hhbmdlcyBpbiB0aGUgd2lyZWxlc3MgbmV0d29yayBjb25maWd1cmF0aW9uLiBUaGV5J3JlIG15IHByaW1hcnkgc3VzcGVjdHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkncmUgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgdGhleSBjYXJyeSwgYW5kIHdoYXQgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIG1pZ2h0IGV4aXN0IHdpdGhpbiB0aGVpciBleGVjdXRpb24gcGF0aHMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM1OjEyLjM1NjgwMDA4M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMjM2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9ub3RpZnlfaWZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9MTcxPXN0YXRpYyBpbnQgX19jZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xOTQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxOTU6XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yMTMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyMTQ6XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTIxNS1cXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNDMzPXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ0Mi1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0NDM6XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldiwgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQ0LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjczPXZvaWQgY2ZnODAyMTFfcmVnaXN0ZXJfd2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2OTYtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjk3OlxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTY5OC19XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTUwNTA9c3RhdGljIGludCBubDgwMjExX3NldF9pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTExOS1cXHRpZiAoY2hhbmdlIFxcdTAwMjZcXHUwMDI2ICFlcnIpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1MTIwOlxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsIE5MODAyMTFfQ01EX1NFVF9JTlRFUkZBQ0UpO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTEyMS1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjA2NDY9dm9pZCBubDgwMjExX25vdGlmeV93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjY3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2Njg6dm9pZCBubDgwMjExX25vdGlmeV9pZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY2OS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuaD0zMz12b2lkIG5sODAyMTFfbm90aWZ5X3dpcGh5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oLTM0LVxcdFxcdFxcdCAgZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuaDozNTp2b2lkIG5sODAyMTFfbm90aWZ5X2lmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oLTM2LVxcdFxcdFxcdCAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6MzU6MTIuNDA3MDI3NDQxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MjYxMzMzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgQ29yZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHdpcmVsZXNzIGNvcmUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBpbnRvIGBuZXQvd2lyZWxlc3MvY29yZS5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDE1MCB0byAyNDAuIFRoYXQgcmVnaW9uIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgaXNzdWUgSSdtIGludmVzdGlnYXRpbmcuIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgcHJvdmlkZSBzb21lIGNsYXJpdHkuIFRpbWUgdG8gZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNToxNC4xMzMxNjI1NjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0XFx0bmw4MDIxMV9ub3RpZnlfd2lwaHkocmRldiwgTkw4MDIxMV9DTURfTkVXX1dJUEhZKTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbnQgY2ZnODAyMTFfc3dpdGNoX3dkZXZfbmV0bnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4gMTU4OlxcdHtcXG4gMTU5OlxcdFxcdGludCBlcnI7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGlmICghd2Rldi1cXHUwMDNlbmV0ZGV2KVxcbiAxNjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gZmFsc2U7XFxuIDE2NTpcXHRcXHRlcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi1cXHUwMDNlbmV0ZGV2LCBuZXQsIFxcXCJ3bGFuJWRcXFwiKTtcXG4gMTY2OlxcdFxcdHdkZXYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTY5OlxcdH1cXG4gMTcwOlxcdFxcbiAxNzE6XFx0c3RhdGljIGludCBfX2NmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXFxuIDE3MzpcXHR7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpvbGRfbmV0ID0gd2lwaHlfbmV0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDE3NTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCAqdG1wO1xcbiAxNzY6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3ZGV2LCB0bXAsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4gMTc5OlxcdFxcdFxcdGVyciA9IGNmZzgwMjExX3N3aXRjaF93ZGV2X25ldG5zKHdkZXYsIG5ldCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIWVycilcXG4gMTgxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxODI6XFx0XFx0XFx0aWYgKCFmb3JjZSlcXG4gMTgzOlxcdFxcdFxcdFxcdGdvdG8gdW5kbztcXG4gMTg0OlxcdFxcdFxcdC8qIHJlbW92ZSBpbnRlcmZhY2VzIHRoYXQgZmFpbCB0byBhbGxvdyB3aXBoeSBzd2l0Y2hpbmcgKi9cXG4gMTg1OlxcdFxcdFxcdGRldl9jbG9zZSh3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiAxODY6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpXFxuIDE4NzpcXHRcXHRcXHRcXHRjZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYod2Rldik7XFxuIDE4ODpcXHRcXHRcXHRlcnIgPSAwO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRzY29wZWRfZ3VhcmQod2lwaHksIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSkge1xcbiAxOTI6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XFxuIDE5MzpcXHRcXHRcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldilcXG4gMTk0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0XFx0bmw4MDIxMV9ub3RpZnlfaWZhY2UocmRldiwgd2RldixcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSk7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX0RFTF9XSVBIWSk7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdFxcdHdpcGh5X25ldF9zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBuZXQpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRcXHQvKiB0aGlzIG9ubHkgZmFpbHMgb24gYWxsb2NhdGlvbiBmYWlsdXJlICovXFxuIDIwNDpcXHRcXHRcXHRlcnIgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYsXFxuIDIwNTpcXHRcXHRcXHRcXHRcXHQgICAgZGV2X25hbWUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LmRldikpO1xcbiAyMDY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhZm9yY2UpXFxuIDIwNzpcXHRcXHRcXHRcXHR3aXBoeV9uZXRfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgb2xkX25ldCk7XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X3dpcGh5KHJkZXYsIE5MODAyMTFfQ01EX05FV19XSVBIWSk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbiAyMTI6XFx0XFx0XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjE0OlxcdFxcdFxcdFxcdG5sODAyMTFfbm90aWZ5X2lmYWNlKHJkZXYsIHdkZXYsXFxuIDIxNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UpO1xcbiAyMTY6XFx0XFx0XFx0fVxcbiAyMTc6XFx0XFx0fVxcbiAyMTg6XFx0XFxuIDIxOTpcXHRcXHRpZiAoIWVyciB8fCBmb3JjZSlcXG4gMjIwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qIHNldCB0byB0aGUgbGFzdCBvbmUgdG8gdW5kbyBhbGwgb2YgdGhlbSAqL1xcbiAyMjM6XFx0XFx0d2RldiA9IGxpc3RfZW50cnkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgdHlwZW9mKCp3ZGV2KSwgbGlzdCk7XFxuIDIyNDpcXHR1bmRvOlxcbiAyMjU6XFx0XFx0LypcXG4gMjI2OlxcdFxcdCAqIE1vdmUgYmFjayBldmVyeXRoaW5nLCBpZiB0aGlzIGZhaWxzIGFnYWluIChhbGxvY2F0aW9uIGZhaWx1cmVzKVxcbiAyMjc6XFx0XFx0ICogdGhlbiB0aGluZ3MgZ2V0IHN0dWNrIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuIDIyODpcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkud2Rldl9saXN0LFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KVxcbiAyMzE6XFx0XFx0XFx0V0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfd2Rldl9uZXRucyh3ZGV2LCBvbGRfbmV0KSk7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHJldHVybiBlcnI7XFxuIDIzNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjM1OjE0LjEzMzI5OTYzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTE5MjEyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGluIHRoZXNlIGNoYW5nZXMsIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gcmVmaW5pbmcgaW50ZXJmYWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrIG5hbWVzcGFjZSBoYW5kbGluZyB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGluIGBuZXQvbWFjODAyMTFgIGFuZCBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuXG5cbkZpcnN0LCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLCB0aGUgYWRkaXRpb24gb2YgYGllZWU4MDIxMV91bmxpc3Rfc2RhdGFgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgdW5pbml0aWFsaXphdGlvbiBwcm9jZXNzIChgaWVlZTgwMjExX3VuaW5pdGAsIGNhbGxlZCBkdXJpbmcgYG5kb191bmluaXRgKSBzZWVtcyB0byBiZSBhYm91dCBlbnN1cmluZyBjbGVhbiBpbnRlcmZhY2UgcmVtb3ZhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyB0aGF0IG1pZ2h0IGZhaWwuIFRoaXMgaXMgYWJvdXQgbGlzdCBtYW5hZ2VtZW50IGZvciB0aGVzZSBpbnRlcmZhY2VzIGFuZCBtYWtpbmcgc3VyZSB3ZSdyZSBoYW5kbGluZyB0aGUgY2xlYW51cCBjb25zaXN0ZW50bHkuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCBvcmRlciBhbmQgaG93IHdlIGRlYWwgd2l0aCB0aGVzZSBzZGF0YSBhbmQgaW50ZXJmYWNlcy5cblxuVGhlbiwgdGhlIHNwbGl0dGluZyBvZiBgY2ZnODAyMTFfc3dpdGNoX25ldG5zYCBpbnRvIGhlbHBlciBmdW5jdGlvbnMgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgIGFuZCBwYXNzaW5nIGBmb3JjZSA9IHRydWVgIGR1cmluZyBwZXJuZXQgZXhpdCBjYXVnaHQgbXkgZXllLiBUaGlzIGxvb2tzIGxpa2Ugcm9idXN0aWZ5aW5nIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2guIElmIGEgd2RldiBjYW4ndCBiZSBtb3ZlZCB0byB0aGUgbmV3IG5ldG5zLCB0aGlzIHdpbGwgY2xvc2UgYW5kIHVucmVnaXN0ZXIgaXQgcmF0aGVyIHRoYW4gbGVhdmluZyBpdCBpbiBhIGJyb2tlbiBzdGF0ZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlJ3Mgc29tZSB1cGRhdGluZyBvZiBsb2NraW5nIGFuZCBub3RpZmljYXRpb24gc2NvcGVzIHdpdGggdGhlIGBzY29wZWRfZ3VhcmRgIG1hY3JvLiBUaGlzIGFsc28gcHJvdmlkZXMgYWRkaXRpb25hbCBzYWZldHkgd2l0aGluIHRoZSBzeXN0ZW0uXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBteSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IEkndmUgY2hlY2tlZCB0aGVzZSBhZ2FpbnN0IHRoZSBrbm93biBtZW1vcnkgc2FmZXR5IGlzc3VlczpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vLCB0aGUgbm90aWZpY2F0aW9ucyBiZWluZyBzZW50ICggYG5sODAyMTFfbm90aWZ5X2lmYWNlYCwgYG5sODAyMTFfbm90aWZ5X3dpcGh5YCkgYXJlIHN0YW5kYXJkIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCB3aXRoIGluaXRpYWxpemVkIGF0dHJpYnV0ZXMuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyoqOiBOb3BlLCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciByZWNlaXZlIGEgdmFsdWUgd2l0aCB0aGUgYXNzaWdubWVudHMgd2l0aGluIGEgbG9vcC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzKio6IE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaW52b2x2ZWQuXG40LiAgKipCb3VuZHMvbGVuZ3RocyoqOiBOb3RoaW5nJ3MgY2hhbmdpbmcgdGhlcmUuXG5cblNpbmNlIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZXNlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBwb3RlbnRpYWwgcmlza3MgYXJlIG1vcmUgcmVsYXRlZCB0byBsb2NraW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQuIExPQ0tERVAgc2hvdWxkIGNhdGNoIGFueSBkZWFkbG9ja3MsIGFuZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyB3aWxsIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gaW5jb3JyZWN0IHVucmVnaXN0cmF0aW9uL3VubGlzdGluZy90cmF2ZXJzYWwgb3JkZXJzLlxuXG5Mb29rcyBsaWtlIHdlJ3JlIGdvb2Qgd2l0aCB0aGVzZSB0b29scy4gTGV0J3MgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzOSwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTozNToyMi42NTI1MTQ1OTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIG5hbWVzcGFjZSBzd2l0Y2hpbmcgZm9yIHdpcmVsZXNzIGRldmljZXMgKGNmZzgwMjExKSBhbmQgaGFuZGxlcyBpbnRlcmZhY2UgdW5saXN0aW5nIGR1cmluZyBuZXRkZXYgdW5pbml0aWFsaXphdGlvbiAobWFjODAyMTEpLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxpc3QgbWFuYWdlbWVudCwgaW50ZXJmYWNlIHVucmVnaXN0cmF0aW9uIG9uIG5ldG5zIG1pZ3JhdGlvbiBmYWlsdXJlLCBhbmQgbG9ja2luZyBhZGp1c3RtZW50cyAobXV0ZXggZ3VhcmRzKS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGNvcGllcyB0by9mcm9tIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2FsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGludGVyZmFjZSBsaWZlY3ljbGUgb3IgbGlzdCBtYW5pcHVsYXRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWdpc3Rlciwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowpt7xf[1] Phase: Succeeded StartedAt: 2026-09-06 01:35:34 +0000 UTC FinishedAt: 2026-09-06 01:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 01:35:34 +0000 UTC FinishedAt: 2026-09-06 01:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2] Phase: Succeeded StartedAt: 2026-09-06 01:35:34 +0000 UTC FinishedAt: 2026-09-06 05:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:35:34 +0000 UTC FinishedAt: 2026-09-06 05:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:35:34 +0000 UTC FinishedAt: 2026-09-06 01:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:35:34 +0000 UTC FinishedAt: 2026-09-06 01:35:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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-workflowpt7xf/series-workflowpt7xf-convert-artifact-3559892300/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:35:44 +0000 UTC FinishedAt: 2026-09-06 01:52:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:35:44 +0000 UTC FinishedAt: 2026-09-06 01:52:10 +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:*4cd048c2-3898-459a-9b4e-2b3e307bbddc,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-workflowpt7xf/series-workflowpt7xf-convert-artifact-3559892300/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": "e82d6637-2a4d-44d5-82db-e29ff26717c3", "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-workflowpt7xf/series-workflowpt7xf-build-action-3388842874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:35:44 +0000 UTC FinishedAt: 2026-09-06 01:52:00 +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:*4cd048c2-3898-459a-9b4e-2b3e307bbddc,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-workflowpt7xf/series-workflowpt7xf-convert-artifact-3559892300/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": "e82d6637-2a4d-44d5-82db-e29ff26717c3", "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-workflowpt7xf/series-workflowpt7xf-build-action-3388842874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:52:10 +0000 UTC FinishedAt: 2026-09-06 01:52:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:52:10 +0000 UTC FinishedAt: 2026-09-06 01:52:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:52:10 +0000 UTC FinishedAt: 2026-09-06 01:52:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:52:10 +0000 UTC FinishedAt: 2026-09-06 01:52:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-workflowpt7xf/series-workflowpt7xf-convert-artifact-92126859/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:52:20 +0000 UTC FinishedAt: 2026-09-06 01:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:52:20 +0000 UTC FinishedAt: 2026-09-06 01:54:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e82d6637-2a4d-44d5-82db-e29ff26717c3,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-workflowpt7xf/series-workflowpt7xf-build-action-3388842874/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-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:54:15 +0000 UTC FinishedAt: 2026-09-06 01:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:54:15 +0000 UTC FinishedAt: 2026-09-06 01:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:54:15 +0000 UTC FinishedAt: 2026-09-06 02:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:54:15 +0000 UTC FinishedAt: 2026-09-06 02:10:49 +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:*4cd048c2-3898-459a-9b4e-2b3e307bbddc,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-workflowpt7xf/series-workflowpt7xf-convert-artifact-92126859/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": "41ccdae9-a0e5-4fed-8c21-f3d9835afaff", "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-workflowpt7xf/series-workflowpt7xf-build-action-2761448751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 01:54:15 +0000 UTC FinishedAt: 2026-09-06 02:10:39 +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:*4cd048c2-3898-459a-9b4e-2b3e307bbddc,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-workflowpt7xf/series-workflowpt7xf-convert-artifact-92126859/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": "41ccdae9-a0e5-4fed-8c21-f3d9835afaff", "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-workflowpt7xf/series-workflowpt7xf-build-action-2761448751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:10:49 +0000 UTC FinishedAt: 2026-09-06 02:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:10:49 +0000 UTC FinishedAt: 2026-09-06 02:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:10:49 +0000 UTC FinishedAt: 2026-09-06 02:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:10:49 +0000 UTC FinishedAt: 2026-09-06 02:12:33 +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:*41ccdae9-a0e5-4fed-8c21-f3d9835afaff,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-workflowpt7xf/series-workflowpt7xf-build-action-2761448751/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-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 05:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 05:15:26 +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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"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:*e82d6637-2a4d-44d5-82db-e29ff26717c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41ccdae9-a0e5-4fed-8c21-f3d9835afaff,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-workflowpt7xf/series-workflowpt7xf-build-action-3388842874/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-workflowpt7xf/series-workflowpt7xf-build-action-2761448751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 02:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 02:12:48 +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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"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-workflowpt7xf/series-workflowpt7xf-convert-artifact-2932751396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 02:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 02:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:43 +0000 UTC FinishedAt: 2026-09-06 02:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:53 +0000 UTC FinishedAt: 2026-09-06 05:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt7xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"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":["cfg80211_switch_netns","__cfg80211_switch_netns","cfg80211_switch_wdev_netns","cfg80211_pernet_exit","nl80211_wiphy_netns","ieee80211_uninit","ieee80211_unlist_sdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211"],"series_id":"bac2fd8e-ae3d-4cb2-a956-ba9690eb2a9b","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-06 02:12:53 +0000 UTC FinishedAt: 2026-09-06 05:15:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e82d6637-2a4d-44d5-82db-e29ff26717c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41ccdae9-a0e5-4fed-8c21-f3d9835afaff,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-workflowpt7xf/series-workflowpt7xf-build-action-3388842874/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-workflowpt7xf/series-workflowpt7xf-build-action-2761448751/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-workflowpt7xf/series-workflowpt7xf-convert-artifact-2932751396/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,}