Name: series-workflowj9tsw Phase: Succeeded StartedAt: 2026-08-15 12:49:18 +0000 UTC FinishedAt: 2026-08-15 14:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[0] Phase: Succeeded StartedAt: 2026-08-15 12:49:18 +0000 UTC FinishedAt: 2026-08-15 13:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 12:49:18 +0000 UTC FinishedAt: 2026-08-15 13:52:16 +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": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7601U", "MAC80211_MESH" ], "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": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7601U", "MAC80211_MESH" ], "series_id": "f72a29d8-3cbe-43c0-a55d-8fc618a8753b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7601u_mac_set_beacon", "mt7601u_mac_config_tsf", "mt7601u_start_ap", "mt7601u_stop_ap", "mt7601u_bss_info_changed" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzYwMVUmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzYwMXVfbWFjX3NldF9iZWFjb24mIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9tYWNfY29uZmlnX3RzZiYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0YXJ0X2FwJiMzNDssCiAgICAmIzM0O210NzYwMXVfc3RvcF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXG5cbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFQLCBNZXNoLCBQMlAsIGFuZCBBZC1Ib2MgbW9kZXMgdG8gdGhlIG10NzYwMXUgVVNCIHdpcmVsZXNzIGRyaXZlci4gSXQgbW9kaWZpZXMgbWFjODAyMTEgY2FsbGJhY2tzIHRvIGhhbmRsZSBiZWFjb24gc2V0dXAsIFRTRiBjb25maWd1cmF0aW9uLCBhbmQgQVAgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBTaW5jZSB0aGlzIGlzIGEgVVNCIGRyaXZlciwgaXQgY2FuIGJlIGZ1enplZCB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZGV2aWNlcyAodmhjaSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTM6NDk6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuY1xuaW5kZXggNWQ5ZTk1MmIyOTY2NC4uZTg3MWY3YjYzY2IzNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuY1xuQEAgLTEyLDYgJiM0MzsxMiwyNSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2luaXR2YWxzLmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7XG4mIzQzO1x0eyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB9LFxuJiM0MztcdHsgLm1heCA9IDgsXG4mIzQzO1x0ICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfFxuJiM0MzsjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbiYjNDM7XHRcdCAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8XG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxuJiM0MztcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gaWZfY29tYltdID0geyB7XG4mIzQzO1x0LmxpbWl0cyA9IGlmX2xpbWl0cyxcbiYjNDM7XHQubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlmX2xpbWl0cyksXG4mIzQzO1x0Lm1heF9pbnRlcmZhY2VzID0gMixcbiYjNDM7XHQubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsXG4mIzQzO1x0LmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLFxuJiM0Mzt9IH07XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gbXQ3NjAxdV9zZXRfd2xhbl9zdGF0ZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIHZhbCwgYm9vbCBlbmFibGUpXG4ge1xuQEAgLTU5OSw2ICYjNDM7NjE4LDcgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aWVlZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpO1xuJiM0MztcdGllZWU4MDIxMV9od19zZXQoaHcsIE5FRURTX1VOSVFVRV9TVEFfQUREUik7XG4gXHRody1cdTAwM2VtYXhfcmF0ZXMgPSAxO1xuIFx0aHctXHUwMDNlbWF4X3JlcG9ydF9yYXRlcyA9IDc7XG4gXHRody1cdTAwM2VtYXhfcmF0ZV90cmllcyA9IDE7XG5AQCAtNjA3LDkgJiM0Mzs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aHctXHUwMDNldmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpO1xuIFxuIFx0U0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi1cdTAwM2VtYWNhZGRyKTtcbi1cbiYjNDM7XHR3aXBoeS1cdTAwM2VpbnRlcmZhY2VfbW9kZXMgPVxuJiM0MztcdFx0QklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8XG4mIzQzOyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuJiM0MztcdFx0QklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8XG4mIzQzO1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpO1xuJiM0MztcdHdpcGh5LVx1MDAzZWlmYWNlX2NvbWJpbmF0aW9ucyA9IGlmX2NvbWI7XG4mIzQzO1x0d2lwaHktXHUwMDNlbl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpO1xuIFx0d2lwaHktXHUwMDNlZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SO1xuLVx0d2lwaHktXHUwMDNlaW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0d2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xuIFxuIFx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0NRTV9SU1NJX0xJU1QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXG5pbmRleCBjYTljZjYyOGViMTBkLi41ZTJkZWMxMzEzMzFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuQEAgLTExOCwxOSAmIzQzOzExOCwyNyBAQCB1MTYgbXQ3Nl9tYWNfdHhfcmF0ZV92YWwoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsXG4gXHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKVxuIFx0XHRcdGJ3ID0gMTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcjtcbi1cdFx0aW50IGJhbmQgPSBkZXYtXHUwMDNlY2hhbmRlZi5jaGFuLVx1MDAzZWJhbmQ7XG4tXHRcdHUxNiB2YWw7XG4tXG4tXHRcdHIgPSBcdTAwMjZkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHNbYmFuZF0tXHUwMDNlYml0cmF0ZXNbcmF0ZS1cdTAwM2VpZHhdO1xuLVx0XHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbi1cdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuLVx0XHRlbHNlXG4tXHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZTtcbiBcbi1cdFx0cGh5ID0gdmFsIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRyYXRlX2lkeCA9IHZhbCBcdTAwMjYgMHhmZjtcbi1cdFx0YncgPSAwO1xuJiM0MztcdFx0aW50IGJhbmQgPSBkZXYtXHUwMDNlY2hhbmRlZi5jaGFuLVx1MDAzZWJhbmQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9XG4mIzQzO1x0XHRcdGRldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tiYW5kXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgcmF0ZS1cdTAwM2VpZHggXHUwMDNlPSBzYmFuZC1cdTAwM2VuX2JpdHJhdGVzKSB7XG4mIzQzO1x0XHRcdHBoeSA9IE1UX1BIWV9UWVBFX0NDSztcbiYjNDM7XHRcdFx0cmF0ZV9pZHggPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID1cbiYjNDM7XHRcdFx0XHRcdTAwMjZzYmFuZC1cdTAwM2ViaXRyYXRlc1tyYXRlLVx1MDAzZWlkeF07XG4mIzQzO1x0XHRcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbiYjNDM7XHRcdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeSA9IHZhbCBcdTAwM2VcdTAwM2UgODtcbiYjNDM7XHRcdFx0cmF0ZV9pZHggPSB2YWwgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyYXRldmFsID0gRklFTERfUFJFUChNVF9SWFdJX1JBVEVfTUNTLCByYXRlX2lkeCk7XG5AQCAtMjY0LDEzICYjNDM7MjcyLDEzIEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYilcbiBcdFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0FVVE9fUlNQX0NGRywgTVRfQVVUT19SU1BfUFJFQU1CX1NIT1JUKTtcbiB9XG4gXG4tdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuJiM0Mzt2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4mIzQzO1x0XHRcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIHtcbiBcdHUzMiB2YWwgPSBtdDc2MDF1X3JyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHKTtcbiBcbi1cdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHxcbi1cdFx0IE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxuLVx0XHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4pO1xuJiM0MztcdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XG4mIzQzO1x0XHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcbiBcbiBcdGlmICghZW5hYmxlKSB7XG4gXHRcdG10NzYwMXVfd3IoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsIHZhbCk7XG5AQCAtMjc5LDkgJiM0MzsyODcsMjIgQEAgdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIFxuIFx0dmFsIFx1MDAyNj0gfk1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUw7XG4gXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMLCBpbnRlcnZhbCBcdTAwM2NcdTAwM2MgNCkgfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47XG4mIzQzO1x0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xuJiM0MztcbiYjNDM7XHQvKiBBUCBNb2RlICovXG4mIzQzO1x0aWYgKHZpZiBcdTAwMjZcdTAwMjYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4mIzQzO1x0XHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSlcbiYjNDM7XHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDMpIHxcbiYjNDM7XHRcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xuJiM0MztcdC8qIElCU1MgLyBBZC1Ib2MgTW9kZSAqL1xuJiM0MztcdGVsc2UgaWYgKHZpZiBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpXG4mIzQzO1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAyKSB8XG4mIzQzO1x0XHQgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWDtcbiYjNDM7XHQvKiBTdGF0aW9uIG1vZGUgKi9cbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAxKTtcbiYjNDM7XG4mIzQzO1x0bXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NjAxdV9jaGVja19tYWNfZXJyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuQEAgLTM5Myw2ICYjNDM7NDE0LDM4IEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbiBcdFx0ICAgRklFTERfUFJFUChNVF9NQVhfTEVOX0NGR19BTVBEVSwgbWluX2ZhY3RvcikpO1xuIH1cbiBcbiYjNDM7aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LVx1MDAzZWh3LCB2aWYsIDApO1xuJiM0MztcdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4mIzQzO1x0aW50IGVyciwgd29yZHM7XG4mIzQzO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovXG4mIzQzO1x0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHh3aSA9IChzdHJ1Y3QgbXQ3Nl90eHdpICopc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpO1xuJiM0MztcdG1lbXNldCh0eHdpLCAwLCBzaXplb2YoKnR4d2kpKTtcbiYjNDM7XG4mIzQzO1x0dHh3aS1cdTAwM2V3Y2lkID0gMDtcbiYjNDM7XHR0eHdpLVx1MDAzZWxlbl9jdGwgPSBjcHVfdG9fbGUxNihza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbiYjNDM7XHR0eHdpLVx1MDAzZXJhdGVfY3RsID0gY3B1X3RvX2xlMTYoMCk7XG4mIzQzO1xuJiM0MztcdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpO1xuJiM0MztcdGVyciA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX0JFQUNPTl9CQVNFLFxuJiM0MztcdFx0XHRcdCAgICAgICAoY29uc3QgdTMyICopc2tiLVx1MDAzZWRhdGEsIHdvcmRzKTtcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBtdDc2X21hY19wcm9jZXNzX3JhdGUoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywgdTE2IHJhdGUpXG4ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG5pbmRleCA1NGJkNGZhYzU0ZDgzLi41Mjg3NTZjY2Y0NzI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuQEAgLTE2Nyw1ICYjNDM7MTY3LDYgQEAgc3RydWN0IG10NzZfdHhfc3RhdHVzXG4gbXQ3NjAxdV9tYWNfZmV0Y2hfdHhfc3RhdHVzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcbiB2b2lkIG10NzZfc2VuZF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3R4X3N0YXR1cyAqc3RhdCk7XG4gdm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XG4tXG4mIzQzO2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5pbmRleCAwNWJhNDNlMTk4NWM4Li40Mzg5ZTMzMmRmZTE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5AQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdCAqXHQgcnQyeDAwIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYm90aGVyZWQgdGhvdWdoLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWJzc2lkKSlcbi1cdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgZmFsc2UsIDApO1xuJiM0MztcdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHtcbkBAIC0xNjEsNyAmIzQzOzE2MSwyMCBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVClcbi1cdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHRydWUsIGluZm8tXHUwMDNlYmVhY29uX2ludCk7XG4mIzQzO1x0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuJiM0MztcbiYjNDM7XHRpZiAoKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikgXHUwMDI2XHUwMDI2IHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxuJiM0MztcdFx0bXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihkZXYsIHZpZiwgaW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmICgoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkge1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlZW5hYmxlX2JlYWNvbilcbiYjNDM7XHRcdFx0bXQ3Nl9zZXQoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsXG4mIzQzO1x0XHRcdFx0IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRtdDc2X2NsZWFyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLFxuJiM0MztcdFx0XHRcdCAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuJiM0MztcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9IVCB8fCBjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpXG4gXHRcdG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKGRldiwgaW5mby1cdTAwM2V1c2VfY3RzX3Byb3QsXG5AQCAtMTgzLDYgJiM0MzsxOTYsNDMgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtdXRleCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYXIgdGhlIHdjaWQgVGFibGUgKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgMTI4OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHByZSBUQlRUIHRvIDZtcyAqL1xuJiM0MztcdG10NzZfcm13X2ZpZWxkKGRldiwgTVRfSU5UX1RJTUVSX0NGRywgTVRfSU5UX1RJTUVSX0NGR19QUkVfVEJUVCwgNik7XG4mIzQzO1x0bXQ3Nl9zZXQoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4mIzQzO1xuJiM0MztcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGxpbmtfY29uZi1cdTAwM2ViZWFjb25faW50KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2ID0gaHctXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XG4mIzQzO1xuJiM0MztcdG10NzZfY2xlYXIoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiBtdDc2X3djaWRfYWxsb2Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4ge1xuQEAgLTQxOSw2ICYjNDM7NDY5LDggQEAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XG4gXHQuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsXG4gXHQuY29uZmlndXJlX2ZpbHRlciA9IG10NzZfY29uZmlndXJlX2ZpbHRlcixcbiBcdC5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLFxuJiM0MztcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXG4mIzQzO1x0LnN0b3BfYXAgPSBtdDc2MDF1X3N0b3BfYXAsXG4gXHQuc3RhX2FkZCA9IG10NzYwMXVfc3RhX2FkZCxcbiBcdC5zdGFfcmVtb3ZlID0gbXQ3NjAxdV9zdGFfcmVtb3ZlLFxuIFx0LnN0YV9ub3RpZnkgPSBtdDc2MDF1X3N0YV9ub3RpZnksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaFxuaW5kZXggMTE4ZDQzNzA3ODUzNy4uNzM2NmUxYzQ3NjMzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaFxuQEAgLTM1OSw3ICYjNDM7MzU5LDggQEAgdm9pZCBtdDc2MDF1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfcHJvdGVjdGlvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBsZWdhY3lfcHJvdCxcbiBcdFx0XHRcdGludCBodF9tb2RlKTtcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4mIzQzO3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpO1xuIHZvaWRcbiBtdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpO1xuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXG5pbmRleCA1YWVlYWMwZGQ5ZmU3Li40N2M3OGM0ZmY1MTQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmNcbkBAIC0yNyw2ICYjNDM7MjcsMTQgQEAgc3RhdGljIHU4IHEyaHdxKHU4IHEpXG4gc3RhdGljIHU4IHNrYjJxKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHFpZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbiYjNDM7XHQgICAgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7XG4mIzQzO1x0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pO1xuJiM0MztcdFx0cmV0dXJuIHEyaHdxKE1UX1RYUV9WTyk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKFdBUk5fT04ocWlkIFx1MDAzZT0gTVRfVFhRX1BTRCkpIHtcbiBcdFx0cWlkID0gTVRfVFhRX0JFO1xuQEAgLTEzNCw2ICYjNDM7MTQyLDkgQEAgbXQ3NjAxdV9wdXNoX3R4d2koc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSBcdTAwMjZpbmZvLVx1MDAzZWNvbnRyb2wucmF0ZXNbMF07XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRib29sIGlzX21nbXQgPSBpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4mIzQzO1x0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cdTAwM2VhZGRyMSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBpc19wcm9iZTtcbiBcdHUzMiBwa3RfaWQ7XG5AQCAtMTQ4LDE0ICYjNDM7MTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIGluZm8tXHUwMDNlY29udHJvbC5yYXRlcywgMSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8ICFyYXRlLVx1MDAzZWNvdW50KVxuJiM0MztcdGlmICghaXNfbWdtdCBcdTAwMjZcdTAwMjYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8ICFyYXRlLVx1MDAzZWNvdW50KSlcbiBcdFx0cmF0ZV9jdGwgPSB3Y2lkLVx1MDAzZXR4X3JhdGU7XG4gXHRlbHNlXG4gXHRcdHJhdGVfY3RsID0gbXQ3Nl9tYWNfdHhfcmF0ZV92YWwoZGV2LCByYXRlLCBcdTAwMjZuc3MpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dHh3aS1cdTAwM2VyYXRlX2N0bCA9IGNwdV90b19sZTE2KHJhdGVfY3RsKTtcbiBcbi1cdGlmICghKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSlcbiYjNDM7XHRpZiAoIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgXHUwMDI2XHUwMDI2IHN0YSBcdTAwMjZcdTAwMjYgIWlzX21jYXN0KVxuIFx0XHR0eHdpLVx1MDAzZWFja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX1JFUTtcbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpXG4gXHRcdHR4d2ktXHUwMDNlYWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTtcbkBAIC0xOTcsNiAmIzQzOzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0c3RydWN0IG10NzZfc3RhICptc3RhID0gTlVMTDtcbiBcdHN0cnVjdCBtdDc2X3djaWQgKndjaWQgPSBkZXYtXHUwMDNlbW9uX3djaWQ7XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLVx1MDAzZWFkZHIxKTtcbiBcdGludCBwa3RfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGludCBod19xID0gc2tiMnEoc2tiKTtcbiBcbkBAIC0yMTEsNyAmIzQzOzIyNCw3IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0aWYgKHN0YSkge1xuIFx0XHRtc3RhID0gKHN0cnVjdCBtdDc2X3N0YSAqKSBzdGEtXHUwMDNlZHJ2X3ByaXY7XG4gXHRcdHdjaWQgPSBcdTAwMjZtc3RhLVx1MDAzZXdjaWQ7XG4tXHR9IGVsc2UgaWYgKHZpZikge1xuJiM0MztcdH0gZWxzZSBpZiAodmlmIFx1MDAyNlx1MDAyNiBpc19tY2FzdCkge1xuIFx0XHRzdHJ1Y3QgbXQ3Nl92aWYgKm12aWYgPSAoc3RydWN0IG10NzZfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuIFxuIFx0XHR3Y2lkID0gXHUwMDI2bXZpZi1cdTAwM2Vncm91cF93Y2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc2MDFVJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc2MDF1X21hY19zZXRfYmVhY29uJiMzNDssCiAgICAmIzM0O210NzYwMXVfbWFjX2NvbmZpZ190c2YmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9zdGFydF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0b3BfYXAmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyLiBJdCBtb2RpZmllcyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjNjM4MmEzNTllYjRlNDg2MmNiOGQ0MGFkNGM1MDU0Zjg4MDVhZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxMzo0OToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMKaW5kZXggNWQ5ZTk1MmIyOTY2NC4uZTg3MWY3YjYzY2IzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMKQEAgLTEyLDYgJiM0MzsxMiwyNSBAQAogCiAjaW5jbHVkZSAmIzM0O2luaXR2YWxzLmgmIzM0OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7CiYjNDM7CXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfSwKJiM0MzsJeyAubWF4ID0gOCwKJiM0MzsJICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAomIzQzOyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAomIzQzOwkJICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKJiM0MzsjZW5kaWYKJiM0MzsJCSAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHwKJiM0MzsJCSAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGlmX2NvbWJbXSA9IHsgewomIzQzOwkubGltaXRzID0gaWZfbGltaXRzLAomIzQzOwkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlmX2xpbWl0cyksCiYjNDM7CS5tYXhfaW50ZXJmYWNlcyA9IDIsCiYjNDM7CS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID0gMSwKJiM0MzsJLmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLAomIzQzO30gfTsKJiM0MzsKIHN0YXRpYyB2b2lkCiBtdDc2MDF1X3NldF93bGFuX3N0YXRlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgdmFsLCBib29sIGVuYWJsZSkKIHsKQEAgLTU5OSw2ICYjNDM7NjE4LDcgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogCWllZWU4MDIxMV9od19zZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTsKIAlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19SQ19UQUJMRSk7CiAJaWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpOwomIzQzOwlpZWVlODAyMTFfaHdfc2V0KGh3LCBORUVEU19VTklRVUVfU1RBX0FERFIpOwogCWh3LSZndDttYXhfcmF0ZXMgPSAxOwogCWh3LSZndDttYXhfcmVwb3J0X3JhdGVzID0gNzsKIAlody0mZ3Q7bWF4X3JhdGVfdHJpZXMgPSAxOwpAQCAtNjA3LDkgJiM0Mzs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogCWh3LSZndDt2aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtdDc2X3ZpZik7CiAKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgZGV2LSZndDttYWNhZGRyKTsKLQomIzQzOwl3aXBoeS0mZ3Q7aW50ZXJmYWNlX21vZGVzID0KJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAomIzQzOyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAomIzQzOwkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKJiM0MzsjZW5kaWYKJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHwKJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiYjNDM7CXdpcGh5LSZndDtpZmFjZV9jb21iaW5hdGlvbnMgPSBpZl9jb21iOwomIzQzOwl3aXBoeS0mZ3Q7bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpOwogCXdpcGh5LSZndDtmZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfQUNUSVZFX01PTklUT1I7Ci0Jd2lwaHktJmd0O2ludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKIAl3aXBoeS0mZ3Q7ZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTOwogCiAJd2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0NRTV9SU1NJX0xJU1QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMKaW5kZXggY2E5Y2Y2MjhlYjEwZC4uNWUyZGVjMTMxMzMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jCkBAIC0xMTgsMTkgJiM0MzsxMTgsMjcgQEAgdTE2IG10NzZfbWFjX3R4X3JhdGVfdmFsKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LAogCQlpZiAocmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkKIAkJCWJ3ID0gMTsKIAl9IGVsc2UgewotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnI7Ci0JCWludCBiYW5kID0gZGV2LSZndDtjaGFuZGVmLmNoYW4tJmd0O2JhbmQ7Ci0JCXUxNiB2YWw7Ci0KLQkJciA9ICZhbXA7ZGV2LSZndDtody0mZ3Q7d2lwaHktJmd0O2JhbmRzW2JhbmRdLSZndDtiaXRyYXRlc1tyYXRlLSZndDtpZHhdOwotCQlpZiAocmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKLQkJCXZhbCA9IHItJmd0O2h3X3ZhbHVlX3Nob3J0OwotCQllbHNlCi0JCQl2YWwgPSByLSZndDtod192YWx1ZTsKIAotCQlwaHkgPSB2YWwgJmd0OyZndDsgODsKLQkJcmF0ZV9pZHggPSB2YWwgJmFtcDsgMHhmZjsKLQkJYncgPSAwOwomIzQzOwkJaW50IGJhbmQgPSBkZXYtJmd0O2NoYW5kZWYuY2hhbi0mZ3Q7YmFuZDsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KJiM0MzsJCQlkZXYtJmd0O2h3LSZndDt3aXBoeS0mZ3Q7YmFuZHNbYmFuZF07CiYjNDM7CiYjNDM7CQlpZiAocmF0ZS0mZ3Q7aWR4ICZsdDsgMCB8fCByYXRlLSZndDtpZHggJmd0Oz0gc2JhbmQtJmd0O25fYml0cmF0ZXMpIHsKJiM0MzsJCQlwaHkgPSBNVF9QSFlfVFlQRV9DQ0s7CiYjNDM7CQkJcmF0ZV9pZHggPSAwOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPQomIzQzOwkJCQkmYW1wO3NiYW5kLSZndDtiaXRyYXRlc1tyYXRlLSZndDtpZHhdOwomIzQzOwkJCXUxNiB2YWw7CiYjNDM7CiYjNDM7CQkJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCiYjNDM7CQkJCXZhbCA9IHItJmd0O2h3X3ZhbHVlX3Nob3J0OwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJdmFsID0gci0mZ3Q7aHdfdmFsdWU7CiYjNDM7CiYjNDM7CQkJcGh5ID0gdmFsICZndDsmZ3Q7IDg7CiYjNDM7CQkJcmF0ZV9pZHggPSB2YWwgJmFtcDsgMHhmZjsKJiM0MzsJCX0KIAl9CiAKIAlyYXRldmFsID0gRklFTERfUFJFUChNVF9SWFdJX1JBVEVfTUNTLCByYXRlX2lkeCk7CkBAIC0yNjQsMTMgJiM0MzsyNzIsMTMgQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKQogCQltdDc2X2NsZWFyKGRldiwgTVRfQVVUT19SU1BfQ0ZHLCBNVF9BVVRPX1JTUF9QUkVBTUJfU0hPUlQpOwogfQogCi12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpCiYjNDM7dm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKQogewogCXUzMiB2YWwgPSBtdDc2MDF1X3JyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHKTsKIAotCXZhbCAmYW1wOz0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfAotCQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8Ci0JCSBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTik7CiYjNDM7CXZhbCAmYW1wOz0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHwKJiM0MzsJCSBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpOwogCiAJaWYgKCFlbmFibGUpIHsKIAkJbXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTsKQEAgLTI3OSw5ICYjNDM7Mjg3LDIyIEBAIHZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCkKIAogCXZhbCAmYW1wOz0gfk1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUw7CiAJdmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX0lOVFZBTCwgaW50ZXJ2YWwgJmx0OyZsdDsgNCkgfAotCQlNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfAotCQlNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHwKLQkJTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47CiYjNDM7CSAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTjsKJiM0MzsKJiM0MzsJLyogQVAgTW9kZSAqLwomIzQzOwlpZiAodmlmICZhbXA7JmFtcDsgKHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAomIzQzOwkJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9QMlBfR08pKQomIzQzOwkJdmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMykgfAomIzQzOwkJICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7CiYjNDM7CS8qIElCU1MgLyBBZC1Ib2MgTW9kZSAqLwomIzQzOwllbHNlIGlmICh2aWYgJmFtcDsmYW1wOyB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiYjNDM7CQl2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAyKSB8CiYjNDM7CQkgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWDsKJiM0MzsJLyogU3RhdGlvbiBtb2RlICovCiYjNDM7CWVsc2UKJiM0MzsJCXZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDEpOwomIzQzOwomIzQzOwltdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBtdDc2MDF1X2NoZWNrX21hY19lcnIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpCkBAIC0zOTMsNiAmIzQzOzQxNCwzOCBAQCB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpCiAJCSAgIEZJRUxEX1BSRVAoTVRfTUFYX0xFTl9DRkdfQU1QRFUsIG1pbl9mYWN0b3IpKTsKIH0KIAomIzQzO2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LSZndDtodywgdmlmLCAwKTsKJiM0MzsJc3RydWN0IG10NzZfdHh3aSAqdHh3aTsKJiM0MzsJaW50IGVyciwgd29yZHM7CiYjNDM7CiYjNDM7CWlmICghc2tiKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovCiYjNDM7CWVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHh3aSA9IChzdHJ1Y3QgbXQ3Nl90eHdpICopc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpOwomIzQzOwltZW1zZXQodHh3aSwgMCwgc2l6ZW9mKCp0eHdpKSk7CiYjNDM7CiYjNDM7CXR4d2ktJmd0O3djaWQgPSAwOwomIzQzOwl0eHdpLSZndDtsZW5fY3RsID0gY3B1X3RvX2xlMTYoc2tiLSZndDtsZW4gLSBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpOwomIzQzOwl0eHdpLSZndDtyYXRlX2N0bCA9IGNwdV90b19sZTE2KDApOwomIzQzOwomIzQzOwl3b3JkcyA9IERJVl9ST1VORF9VUChza2ItJmd0O2xlbiwgNCk7CiYjNDM7CWVyciA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX0JFQUNPTl9CQVNFLAomIzQzOwkJCQkgICAgICAgKGNvbnN0IHUzMiAqKXNrYi0mZ3Q7ZGF0YSwgd29yZHMpOwomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIG10NzZfbWFjX3Byb2Nlc3NfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLCB1MTYgcmF0ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oCmluZGV4IDU0YmQ0ZmFjNTRkODMuLjUyODc1NmNjZjQ3MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaApAQCAtMTY3LDUgJiM0MzsxNjcsNiBAQCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXMKIG10NzYwMXVfbWFjX2ZldGNoX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7CiB2b2lkIG10NzZfc2VuZF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3R4X3N0YXR1cyAqc3RhdCk7CiB2b2lkIG10NzYwMXVfc2V0X21hY2FkZHIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGNvbnN0IHU4ICphZGRyKTsKLQomIzQzO2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jCmluZGV4IDA1YmE0M2UxOTg1YzguLjQzODllMzMyZGZlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jCkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICoJIHJ0MngwMCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGJvdGhlcmVkIHRob3VnaC4KIAkJICovCiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby0mZ3Q7YnNzaWQpKQotCQkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIGZhbHNlLCAwKTsKJiM0MzsJCQltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7CiAJfQogCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKQEAgLTE2MSw3ICYjNDM7MTYxLDIwIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAl9CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKQotCQltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdHJ1ZSwgaW5mby0mZ3Q7YmVhY29uX2ludCk7CiYjNDM7CQltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLSZndDtiZWFjb25faW50KTsKJiM0MzsKJiM0MzsJaWYgKChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JFQUNPTikgJmFtcDsmYW1wOyB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiYjNDM7CQltdDc2MDF1X21hY19zZXRfYmVhY29uKGRldiwgdmlmLCBpbmZvKTsKJiM0MzsKJiM0MzsJaWYgKChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKJiM0MzsJCWlmIChpbmZvLSZndDtlbmFibGVfYmVhY29uKQomIzQzOwkJCW10NzZfc2V0KGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLAomIzQzOwkJCQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJbXQ3Nl9jbGVhcihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywKJiM0MzsJCQkJICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7CiYjNDM7CX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0hUIHx8IGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKQogCQltdDc2MDF1X21hY19zZXRfcHJvdGVjdGlvbihkZXYsIGluZm8tJmd0O3VzZV9jdHNfcHJvdCwKQEAgLTE4Myw2ICYjNDM7MTk2LDQzIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAltdXRleF91bmxvY2soJmFtcDtkZXYtJmd0O211dGV4KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody0mZ3Q7cHJpdjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtkZXYtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgdGhlIHdjaWQgVGFibGUgKi8KJiM0MzsJZm9yIChpbnQgaSA9IDE7IGkgJmx0OyAxMjg7IGkmIzQzOyYjNDM7KQomIzQzOwkJbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChkZXYsIGksIDAsIE5VTEwpOwomIzQzOwomIzQzOwkvKiBTZXQgcHJlIFRCVFQgdG8gNm1zICovCiYjNDM7CW10NzZfcm13X2ZpZWxkKGRldiwgTVRfSU5UX1RJTUVSX0NGRywgTVRfSU5UX1RJTUVSX0NGR19QUkVfVEJUVCwgNik7CiYjNDM7CW10NzZfc2V0KGRldiwgTVRfSU5UX1RJTUVSX0VOLCBNVF9JTlRfVElNRVJfRU5fUFJFX1RCVFRfRU4pOwomIzQzOwomIzQzOwltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBsaW5rX2NvbmYtJmd0O2JlYWNvbl9pbnQpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkZXYtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXQ3NjAxdV9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LSZndDtwcml2OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7CiYjNDM7CW10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTsKJiM0MzsKJiM0MzsJbXQ3Nl9jbGVhcihkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogbXQ3Nl93Y2lkX2FsbG9jKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogewpAQCAtNDE5LDYgJiM0Mzs0NjksOCBAQCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtdDc2MDF1X29wcyA9IHsKIAkuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIgPSBtdDc2X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQsCiYjNDM7CS5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsCiYjNDM7CS5zdG9wX2FwID0gbXQ3NjAxdV9zdG9wX2FwLAogCS5zdGFfYWRkID0gbXQ3NjAxdV9zdGFfYWRkLAogCS5zdGFfcmVtb3ZlID0gbXQ3NjAxdV9zdGFfcmVtb3ZlLAogCS5zdGFfbm90aWZ5ID0gbXQ3NjAxdV9zdGFfbm90aWZ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaAppbmRleCAxMThkNDM3MDc4NTM3Li43MzY2ZTFjNDc2MzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaApAQCAtMzU5LDcgJiM0MzszNTksOCBAQCB2b2lkIG10NzYwMXVfbWFjX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgbGVnYWN5X3Byb3QsCiAJCQkJaW50IGh0X21vZGUpOwogdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKTsKLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7CiYjNDM7dm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKTsKIHZvaWQKIG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7CiB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jCmluZGV4IDVhZWVhYzBkZDlmZTcuLjQ3Yzc4YzRmZjUxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmMKQEAgLTI3LDYgJiM0MzsyNywxNCBAQCBzdGF0aWMgdTggcTJod3EodTggcSkKIHN0YXRpYyB1OCBza2IycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwomIzQzOwomIzQzOwlpZiAoaWVlZTgwMjExX2lzX21nbXQoaGRyLSZndDtmcmFtZV9jb250cm9sKSB8fAomIzQzOwkgICAgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CiYjNDM7CQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pOwomIzQzOwkJcmV0dXJuIHEyaHdxKE1UX1RYUV9WTyk7CiYjNDM7CX0KIAogCWlmIChXQVJOX09OKHFpZCAmZ3Q7PSBNVF9UWFFfUFNEKSkgewogCQlxaWQgPSBNVF9UWFFfQkU7CkBAIC0xMzQsNiAmIzQzOzE0Miw5IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSAmYW1wO2luZm8tJmd0O2NvbnRyb2wucmF0ZXNbMF07CiAJc3RydWN0IG10NzZfdHh3aSAqdHh3aTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJYm9vbCBpc19tZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLSZndDtmcmFtZV9jb250cm9sKTsKJiM0MzsJYm9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0mZ3Q7YWRkcjEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBpc19wcm9iZTsKIAl1MzIgcGt0X2lkOwpAQCAtMTQ4LDE0ICYjNDM7MTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBpbmZvLSZndDtjb250cm9sLnJhdGVzLCAxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JaWYgKHJhdGUtJmd0O2lkeCAmbHQ7IDAgfHwgIXJhdGUtJmd0O2NvdW50KQomIzQzOwlpZiAoIWlzX21nbXQgJmFtcDsmYW1wOyAocmF0ZS0mZ3Q7aWR4ICZsdDsgMCB8fCAhcmF0ZS0mZ3Q7Y291bnQpKQogCQlyYXRlX2N0bCA9IHdjaWQtJmd0O3R4X3JhdGU7CiAJZWxzZQogCQlyYXRlX2N0bCA9IG10NzZfbWFjX3R4X3JhdGVfdmFsKGRldiwgcmF0ZSwgJmFtcDtuc3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAl0eHdpLSZndDtyYXRlX2N0bCA9IGNwdV90b19sZTE2KHJhdGVfY3RsKTsKIAotCWlmICghKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKJiM0MzsJaWYgKCEoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICZhbXA7JmFtcDsgc3RhICZhbXA7JmFtcDsgIWlzX21jYXN0KQogCQl0eHdpLSZndDthY2tfY3RsIHw9IE1UX1RYV0lfQUNLX0NUTF9SRVE7CiAJaWYgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKIAkJdHh3aS0mZ3Q7YWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTsKQEAgLTE5Nyw2ICYjNDM7MjA4LDggQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJc3RydWN0IG10NzZfc3RhICptc3RhID0gTlVMTDsKIAlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gZGV2LSZndDttb25fd2NpZDsKIAlzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwomIzQzOwlib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLSZndDthZGRyMSk7CiAJaW50IHBrdF9sZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgaHdfcSA9IHNrYjJxKHNrYik7CiAKQEAgLTIxMSw3ICYjNDM7MjI0LDcgQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJaWYgKHN0YSkgewogCQltc3RhID0gKHN0cnVjdCBtdDc2X3N0YSAqKSBzdGEtJmd0O2Rydl9wcml2OwogCQl3Y2lkID0gJmFtcDttc3RhLSZndDt3Y2lkOwotCX0gZWxzZSBpZiAodmlmKSB7CiYjNDM7CX0gZWxzZSBpZiAodmlmICZhbXA7JmFtcDsgaXNfbWNhc3QpIHsKIAkJc3RydWN0IG10NzZfdmlmICptdmlmID0gKHN0cnVjdCBtdDc2X3ZpZiAqKXZpZi0mZ3Q7ZHJ2X3ByaXY7CiAKIAkJd2NpZCA9ICZhbXA7bXZpZi0mZ3Q7Z3JvdXBfd2NpZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtdDc2MDF1YCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgdGhlIGBtdDc2MDF1YCBkcml2ZXIg4oCTIGEgTWVkaWFUZWsgTVQ3NjAxVSBVU0IgV2lyZWxlc3MgTEFOIGRyaXZlciwgc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyB0b3VjaGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgaW5pdC5jYCwgYG1hYy5jYCwgYG1hYy5oYCwgYG1haW4uY2AsIGBtdDc2MDF1LmhgLCBhbmQgYHR4LmNgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBhIHdob2xlIHNsZXcgb2Ygd2lyZWxlc3MgbW9kZXM6IEFQLCBNZXNoIFBvaW50LCBQMlAgQ2xpZW50LCBQMlAgR08sIGFuZCBBZC1Ib2MuIEl0JiMzOTtzIG1vZGlmeWluZyB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHRvIHNldCBpbnRlcmZhY2UgbW9kZXMgYW5kIGNvbWJpbmF0aW9ucy4gSXQgaGFzIG5ldyBmdW5jdGlvbnMgZm9yIGJlYWNvbiBzZXR0aW5nLCBzdGFydGluZyBhbmQgc3RvcHBpbmcgQVAgbW9kZSwgYW5kIGFsdGVycyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdCBmcmFtZXMuIFN0YW5kYXJkIHN0dWZmIGZvciBhZGRpbmcgd2lyZWxlc3MgbW9kZXMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gSSBldmVuIGZ1enogdGhpcyB0aGluZz8gVGhlIHByb21wdCBnaXZlcyBtZSBwYXVzZSwgaXQgc2F5cyBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuIE9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhpcyBtZXRob2RpY2FsbHkuIGBtdDc2MDF1YCBpcyBhIFVTQiBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgcmlnaHQ/IEkgY2FuIHByb2JhYmx5IHVzZSBgdmhjaWAgKFVTQiBnYWRnZXQvZHVtbXkgSENEKSwgb3IgU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB3aXRoIGB2aGNpYC4KCldhaXQgYSBtaW51dGUsIEkgaGF2ZSB0byByZWFkIHRoZSBwcm9tcHQgY2xvc2VseS4gSXQgc2F5cyBjb2RlIHBhdGhzICppbXBvc3NpYmxlKiB0byByZWFjaCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFRoYXQgbWVhbnMgaWYgSSAqY2FuKiByZWFjaCBpdCB3aXRoIGB2aGNpYCAob3Igc2ltaWxhciksIGl0JiMzOTtzIHdvcnRoIGZ1enppbmchIFllcywgaXQgc2F5cyAmIzM0O2V2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU28sIHNpbmNlIFVTQiBkcml2ZXJzICphcmUqIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKHN5emthbGxlci92aGNpKSwgdGhpcyBpcyBnb29kLiBUaGUgcHJvbXB0IGluZGljYXRlcyB0aGF0JiMzOTtzIGEgcG9zaXRpdmUgc2lnbmFsLiBBbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiwgU3l6a2FsbGVyIGhhcyB0aGUgVVNCIGZ1enppbmcgdG9vbHMuCgpSaWdodCwgc28gdG8gYmUgY29tcGxldGVseSBzdXJlLCBgbXQ3NjAxdWAgaXMgYSBVU0IgZHJpdmVyOyB0aGF0JiMzOTtzIHZlcmlmaWVkLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgZnV6emluZyBzaG90LiBMZXQgbWUgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1UNzYwMVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L0tjb25maWc6Mjpjb25maWcgTVQ3NjAxVVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc2MDFVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTU2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1UNzYwMVUgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBgTVQ3NjAxVWAgcHJvamVjdC4gQmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IHRvdWNoaW5nIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgYW55IG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lIGFuZCBlbnN1cmluZyBhIHNtb290aCBpbnRlZ3JhdGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBvdGhlciBsaWJyYXJpZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgdGhpcyBiZWFzdCByZWxpZXMgb24uIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbj8gRG9lcyBpdCBuZWVkIGFueSBjdXN0b20gZmlybXdhcmUgYmxvYnM/IEFyZSB0aGVyZSBhbnkgdGhpcmQtcGFydHkgbGlicmFyaWVzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoaWNoIHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eT8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBzdXNwZWN0cyAtIHRoZSBzdGFuZGFyZCB3aXJlbGVzcyBzdGFjayBjb21wb25lbnRzLCBhbnkgY3VzdG9tIEhBTCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGJvYXJkLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLgoKTmV4dCwgSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBXaGF0IGJ1aWxkIHRvb2xzIGFyZSB1c2VkPyBJcyBpdCBNYWtlLCBDTWFrZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYE1ha2VmaWxlYCBvciBgQ01ha2VMaXN0cy50eHRgIGZpbGVzLCBsb29raW5nIGZvciBpbmNsdWRlIHBhdGhzLCBsaWJyYXJ5IGxpbmtzLCBhbmQgYW55IHByZS0gb3IgcG9zdC1idWlsZCBzdGVwcy4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgaW5zaWdodC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxscy4gSXQmIzM5O3MgZWFzeSB0byBnZXQgbG9zdCBpbiBhIHdlYiBvZiBkZXBlbmRlbmNpZXMsIHNvIEkgbmVlZCB0byBiZSBzeXN0ZW1hdGljLiBJIHdpbGwgbG9vayBmb3IgYW55IGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGNhdXNlIGJ1aWxkIGVycm9ycy4gSSYjMzk7bGwgYWxzbyBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSB2ZXJzaW9uIGNvbnN0cmFpbnRzLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgY29uZmxpY3RzISBJIGNhbiBoYW5kbGUgdGhpcyBjYXJlZnVsbHkuCgpGaW5hbGx5LCBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gZG9jdW1lbnQgZXZlcnl0aGluZy4gQSBkZXBlbmRlbmN5IGdyYXBoLCBldmVuIGEgc2ltcGxlIG9uZSwgd2lsbCBiZSBpbnZhbHVhYmxlIGRvd24gdGhlIHJvYWQsIGVzcGVjaWFsbHkgaWYgSSBuZWVkIHRvIG1vZGlmeSBvciBkZWJ1ZyB0aGlzIG1vZHVsZSBsYXRlci4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGVzc2VudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNVDc2MDFVXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc2MDFVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDU6XHRcdGRlcGVuZHMgb24gVVNCXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MDFVLWJhc2VkIFVTQiB3aXJlbGVzcyBkb25nbGVzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTM0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNVDc2MDFVIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBNVDc2MDFVYCBkcml2ZXIsIGFuZCBteSBicmFpbiBpcyBpbW1lZGlhdGVseSBtYWtpbmcgY29ubmVjdGlvbnMuIEl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgYSB3aXJlbGVzcyBjaGlwc2V0LiBUaGUgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIEFQIG1vZGUgc3VwcG9ydCwgd2hpY2ggaW5zdGFudGx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBgTUFDODAyMTFfTUVTSGAgKGdvb2QgY2F0Y2ggb24gdGhhdCBgI2lmZGVmYCkuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEkgc2VlIHRoZXkmIzM5O3JlIGBpZWVlODAyMTFfb3BzYCBjYWxsYmFja3MsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiAgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IGEgZnV6emluZyBzdHJhdGVneS4gVGhlIHBsYW4gd2lsbCBiZSB0byBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlIGFuZCB0aGVuIHVzZSBuZXRsaW5rIGNvbW1hbmRzIHRvIHRyaWdnZXIgQVAgc3RhcnR1cCB2aWEgbWFjODAyMTEuICBUaGF0IHNob3VsZCBsZXQgbWUgaGl0IHRoZXNlIGZ1bmN0aW9ucy4KClNvLCB3aGVyZSBzaG91bGQgSSBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlc2UgZml2ZSBmdW5jdGlvbnMgYXMgdGFyZ2V0czogYG10NzYwMXVfc3RhcnRfYXBgLCBgbXQ3NjAxdV9zdG9wX2FwYCwgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3B1c2hfdHh3aWAsIGFuZCBgbXQ3NjAxdV90eGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBwcm9tcHQhIEl0JiMzOTtzIHRlbGxpbmcgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIHRvIGdldCBhIG1vcmUgZXZlbiBkaXN0cmlidXRpb24gb2YgdGVzdHMuICBgbXQ3NjAxdV90eGAgYW5kIGBtdDc2MDF1X3B1c2hfdHh3aWAgYXJlIGRlZmluaXRlbHkgaG90LXBhdGgsIHNvIHNjcmF0Y2ggdGhvc2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBsaXN0LgoKT2theSwgbGV0JiMzOTtzIHJlZm9jdXMuIE15IGNvcmUgdGFyZ2V0cyB3aWxsIGJlIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYW5kIGBtdDc2MDF1X21hY19jb25maWdfdHNmYC4gTGV0IG1lIGNoZWNrIGlmIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCBpcyBzdGF0aWMuIEl0JiMzOTtzIGluIGBtYWMuY2AgYW5kIGV4cG9zZWQgdmlhIGBtYWMuaGAsIHNvIGl0JiMzOTtzIG5vbi1zdGF0aWMuIEdvb2QuIE5vdywgd2hhdCBhYm91dCBgbXQ3NjAxdV9zdGFydF9hcGAgYW5kIGBtdDc2MDF1X3N0b3BfYXBgPyBUaGV5JiMzOTtyZSBpbiBgbWFpbi5jYCBhbmQgdGhleSBhcmUgZGVjbGFyZWQgc3RhdGljLiBCdXQsIHdhaXQuLi50aGV5IGFyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AuIFNpbmNlIHRoZXkgYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJiMzOTt0KiBpbmxpbmUgdGhlbS4gQnV0LCB0byBiZSBzYWZlLCBJJiMzOTtsbCBpbmNsdWRlIHRoZW0gaW4gbXkgbGlzdCBvZiBmdXp6aW5nIHRhcmdldHMuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYD8gSXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gZ29vZCB0byBnby4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGdvdCBtb2RpZmllZC4gYG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlYCBpcyBtb2RpZmllZCwgYnV0IHRoYXQmIzM5O3MganVzdCBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgSSYjMzk7bSBub3QgdGhhdCB3b3JyaWVkIGFib3V0IHRoYXQuIEhtbSwgYG10NzZfbWFjX3R4X3JhdGVfdmFsYCBpcyBhbHNvIG1vZGlmaWVkLCBhbmQgdGhhdCBpcyBpbiBgbWFjLmNgLiBJIHNob3VsZCBwcm9iYWJseSBpbnZlc3RpZ2F0ZSB0aGF0IG9uZSBhcyB3ZWxsLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIG9mIGBtdDc2MDF1X3N0YXJ0X2FwYCBhbmQgYG10NzYwMXVfc3RvcF9hcGAuIEdvdHRhIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGlucHV0IGFuZCBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9zdGFydF9hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTEzND1tdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTk5OnN0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIwMC1cdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTQ1OD1jb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtdDc2MDF1X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzEtXHQuYnNzX2luZm9fY2hhbmdlZCA9IG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjQ3MjpcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzMtXHQuc3RvcF9hcCA9IG10NzYwMXVfc3RvcF9hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGVtYmVkZGVkIHN5c3RlbXMgYW5kIDgwMi4xMSBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTEgT3BlcmF0aW9ucyBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyB0aGF0IHNvbWV0aGluZyBpcyBiZWluZyAmIzM0O2Fzc2lnbmVkIHRvIGBpZWVlODAyMTFfb3BzYCYjMzQ7LiBSaWdodCwgdGhvc2Ugb3BlcmF0aW9ucyBhcmUgcHJldHR5IG11Y2ggc3RhdGljLCBhcmVuJiMzOTt0IHRoZXk/IFRoZXkmIzM5O3JlIGRlZmluZWQgYXQgY29tcGlsZSB0aW1lIGFuZCBob29rZWQgaW50byB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIGRyaXZlciB3b3VsZCB0aGVuIHBvcHVsYXRlIHRoZSBgaWVlZTgwMjExX29wc2Agd2l0aCBpdCYjMzk7cyBzcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycy4KClNvLCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBhbmQgZmlndXJlIG91dCB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0LiBUaGUgbm90ZSBtZW50aW9ucyBhIGZ1bmN0aW9uLCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhhdCBmdW5jdGlvbiBkaXJlY3RseSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBhc3NpZ25lZCB0byB0aGlzIHNwZWNpZmljIG9wZXJhdGlvbmFsIHN0cnVjdHVyZSwgYW5kIGluIHRoaXMgY2FzZSwgaXQgYXBwZWFycyB3ZSBhcmUgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIGJlYWNvbiBmdW5jdGlvbmFsaXR5LiBXZSBtYXkgd2FudCB0byBhbHNvIGNoZWNrIGZvciByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBpbnZvbHZlIHRoZSBoYXJkd2FyZSBhbmQgbWVkaXVtIGFjY2VzcyBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MDF1X21hY19zZXRfYmVhY29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYz0zOTI9dm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYzo0MTc6aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxOC1cdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmg9MTY5PXZvaWQgbXQ3NjAxdV9zZXRfbWFjYWRkcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaDoxNzA6aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oLTE3MS1cdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2Ni1cdGlmICgoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoxNjc6XHRcdG10NzYwMXVfbWFjX3NldF9iZWFjb24oZGV2LCB2aWYsIGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBTdGF0ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIGlzc3VlLiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBXaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyB2YXJpYWJsZSBzdGF0ZT8gTGV0JiMzOTtzIHpvb20gaW4gb24gYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2Qgc3RhcnQuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IHRvIHNlZSBpZiB0aGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gdGltZSBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb24gKFRTRikgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1BQyBsYXllciwgb3IsIGluZGVlZCwgc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbC4gR290dGEgY2hlY2sgaXRzIHZhbHVlcywgaW50ZXJhY3Rpb25zLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBlbGVtZW50IGNoYW5nZXMgZHluYW1pY2FsbHkgaXMga2V5IHRvIHRyb3VibGVzaG9vdGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MDF1X21hY19jb25maWdfdHNmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYz0yNjc9dm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtMjc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYzoyNzU6dm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYy0yNzYtXHRcdFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MTM0PW10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0xNTEtXHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2Vic3NpZCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoxNTI6XHRcdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTUzLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2My1cdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTY0Olx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTY1LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTE5OT1zdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MjE1Olx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgbGlua19jb25mLVx1MDAzZWJlYWNvbl9pbnQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjE2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTIyMj1zdGF0aWMgdm9pZCBtdDc2MDF1X3N0b3BfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MjI5Olx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjMwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oPTM2MT12b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg6MzYyOnZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oLTM2My1cdFx0XHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjA2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgdGhlIG1vZGlmaWNhdGlvbnMuIExldCBtZSBzZWUuLi4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGluIHJlbGF0aW9uIHRvIHRoZSBNVDc2MDFVIGRyaXZlci4gRmlyc3QsIHRoZXJlJiMzOTtzIGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAsIGBtdDc2X21hY190eF9yYXRlX3ZhbGAsIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgLCBgbXQ3NjAxdV9zdGFydF9hcGAsIGBtdDc2MDF1X3N0b3BfYXBgLCBgbXQ3NjAxdV9wdXNoX3R4d2lgLCBhbmQgYG10NzYwMXVfdHhgLgoKQWxyaWdodCwgYSBmZXcgb2YgdGhlc2UgYXJlIGNsZWFybHkgaW1wb3J0YW50LiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBiZWluZyBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wcy5ic3NfaW5mb19jaGFuZ2VkYCwgd2hpY2ggaXMgYSBrZXkgY2FsbGJhY2suIGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIHVzZWQgYnkgYG10NzYwMXVfcHVzaF90eHdpYC4gU28gbGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHJlYWxseSBmb2N1cyBvbiB0aG9zZSBzeW1ib2xzOgoKYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYC4KCkhtbSwgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCBhcmUgc3RhdGljLiBJIHdpbGwgaW5jbHVkZSB0aGVtIGFueXdheSwganVzdCBpbiBjYXNlLgoKTm93IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQuIFRoZSBwYXRjaCByZWZlcmVuY2VzIGAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hgLiBTbywgYE1BQzgwMjExX01FU0hgIHNob3VsZCBiZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0IHdvdWxkIGJlIHdpc2UgdG8gYWRkIGBNVDc2MDFVYCB0byBgRW5hYmxlQ29uZmlnc2AgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmb3IgYE1BQzgwMjExX01FU0hgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfTUVTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnPTYwPWNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE1BQzgwMjExX01FU0hgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBsYW5kc2NhcGUgYXJvdW5kIGBNQUM4MDIxMV9NRVNIYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgbWVudGFsbHkgY2hlY2tpbmcgZm9yIGFueSBkZXBlbmRlbnQgbW9kdWxlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCwgZ2l2ZW4gaXRzIG5hdHVyZSwgdGhlcmUgKndpbGwqIGJlIGRlcGVuZGVuY2llcy4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGV5LCBhbmQgaG93IGRlZXBseSBpbnRlcnR3aW5lZCBpcyB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByZWxpYW5jZSBvbiBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHRoZSBicm9hZGVyIGtlcm5lbC4gSXMgaXQgdGlnaHRseSBjb3VwbGVkLCBvciBjYW4gSSBjb25zaWRlciBpdCBtb3JlIG1vZHVsYXI/IFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IHRyZWUgaXMgY3J1Y2lhbCBmb3IgYW55IGtpbmQgb2YgZGV2ZWxvcG1lbnQgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCBtYWM4MDIxMSBpbnRlcm5hbHMgd2l0aCBrdW5pdC5cbiAgNjc6XHRcbiAgNjg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgTUFDODAyMTFfTUVTSFxuICA3MTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSA4MDIuMTEgbWVzaCBvcGVyYXRpb24gaW4gbWFjODAyMTFcbiAgNzU6XHRcdCAgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQuICA4MDIuMTEgbWVzaCBjb25uZWN0cyBtdWx0aXBsZSBzdGF0aW9uc1xuICA3NjpcdFx0ICBvdmVyIChwb3NzaWJseSBtdWx0aS1ob3ApIHdpcmVsZXNzIGxpbmtzIHRvIGZvcm0gYSBzaW5nbGUgbG9naWNhbFxuICA3NzpcdFx0ICBMQU4uXG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnIE1BQzgwMjExX0xFRFNcbiAgODA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuICA4MTpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICA4MjpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuICA4MzpcdFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiAgODQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIGRlZXBseToKCioqRGVlcCBEaXZlIGludG8gTUFDODAyMTEgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoaW5nZXMgb24gYE1BQzgwMjExYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGVyZWZvcmUsIHRvIGdldCB0aGlzIHJpZ2h0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbmVlZHMgdG8gaW5jbHVkZSBgTVQ3NjAxVWAgYW5kIGBNQUM4MDIxMV9NRVNIYC4gVGhhdCBtYWtlcyBzZW5zZTsgYE1BQzgwMjExX01FU0hgIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVzaCBuZXR3b3JraW5nIGNhcGFiaWxpdGllcywgd2hpY2ggbGlrZWx5IHJlbHkgaGVhdmlseSBvbiBgTUFDODAyMTFgIGl0c2VsZi4KCk5vdywgaG9sZCBvbi4uLiBgTVQ3NjAxVWAgYWxzbyBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGJ1dCBhbHNvIG9uIGBVU0JgLiBUaGlzIGlzIHR5cGljYWwgZm9yIGEgVVNCIHdpcmVsZXNzIGRldmljZS4gVGhpcyBVU0IgZGVwZW5kZW5jeSBtYWtlcyBtZSB3b25kZXIgYWJvdXQgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIFVTQiBob3N0IGludGVyZmFjZS4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgc3R1ZmYsIHRob3VnaCBJIG5lZWQgdG8ga2VlcCBpdCBpbiBtaW5kIGFzIEkgYnVpbGQgdGhlIGNvbmZpZ3VyYXRpb24uCgpCZWZvcmUgSSBsb2NrIHRoaXMgZG93biwgSSBzaG91bGQgZG8gYSBxdWljayByZXZpZXcgb2YgdGhlIGBNVDc2MDFVYCBzZXR0aW5ncyBvbmNlIG1vcmUsIGp1c3QgdG8gZW5zdXJlIHRoYXQgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSBvdGhlciBkZXBlbmRlbmN5IGFuZCBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gQSBmaW5hbCBsb29rIHdpbGwgaGVscCBtZSBmZWVsIGNvbmZpZGVudCB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1UNzYwMVVcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzYwMVUgKFVTQikgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzYwMVUtYmFzZWQgVVNCIHdpcmVsZXNzIGRvbmdsZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTM0CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVQ3NjAxVSBNZXNoIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGJhc2VkIG9uIHRoZSBwcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uLCBpdCBsb29rcyBsaWtlIHRoZSBgTVQ3NjAxVWAgZHJpdmVyLCBjb21iaW5lZCB3aXRoIGBNQUM4MDIxMV9NRVNIYCBmdW5jdGlvbmFsaXR5LCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHRhc2suIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzLCB0aGUgb25lcyB0aGF0IHJlYWxseSBkcml2ZSB0aGUgYmVoYXZpb3I6IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLCBgbXQ3NjAxdV9zdGFydF9hcGAsIGBtdDc2MDF1X3N0b3BfYXBgLCBhbmQgYG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZGAuCgpBaCwgaGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQuIEl0IHNlZW1zIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIGNvcnJlY3QsIG5vdyBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZS4gSXQgYXBwZWFycyB0aGUgbW9kaWZpY2F0aW9uIGlzIHRvIGVuc3VyZSB0aGF0LCB3aGVuZXZlciBCU1MgaW5mbyBjaGFuZ2VzLCBpdCBub3cgY2FsbHMgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgIHdpdGggYm90aCBgdmlmYCBhbmQgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGNvbWJpbmF0aW9uIOKAkyBpdCBwcm9iYWJseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGltZSBzeW5jaHJvbml6YXRpb24gYW5kIGJlYWNvbiB1cGRhdGVzLCBhbGlnbmluZyB3aXRoIHdoYXQgSSBleHBlY3QgZnJvbSBhIG1lc2ggaW1wbGVtZW50YXRpb24uCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBpbXBvcnRhbnQgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgZHJpdmVyLiBJIG11c3QgY29uZmlybSBpZiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZSBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzYwMXVfYnNzX2luZm9fY2hhbmdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTEzMz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTM0Om10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTEzNS1cdFx0XHQgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTY0IGNoYW5nZWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9NDU4PWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzYwMXVfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTQ3MC1cdC5jb25maWd1cmVfZmlsdGVyID0gbXQ3Nl9jb25maWd1cmVfZmlsdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6NDcxOlx0LmJzc19pbmZvX2NoYW5nZWQgPSBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzItXHQuc3RhcnRfYXAgPSBtdDc2MDF1X3N0YXJ0X2FwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0MAoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiA1NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIG10NzYwMXUgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBpbml0aWFsIGFzc3VtcHRpb24gdGhhdCBldmVyeXRoaW5nIGlzIHN0YXRpYyBuZWVkcyByZXZpc2lvbi4gSSBzZWUgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGFuZCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAgYXJlIGRlZmluaXRlbHkgbm90IHN0YXRpYywgc28gdGhvc2UgYXJlIGtleSBlbnRyeSBwb2ludHMuIEkmIzM5O2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCBhbG9uZyB3aXRoIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCwgYXMgdGhleSBzZWVtIHJlbGV2YW50IHRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCkkgZ2xhbmNlZCBhdCBgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2VgLCBidXQgaXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCBJJiMzOTttIGdlbmVyYWxseSBub3QgYXMgaW50ZXJlc3RlZCBpbiB0aG9zZSBmb3IgZnV6emluZy4gU2ltaWxhcmx5LCBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyBkZWVwbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSB0cmFuc21pdCBwYXRoLCB3aGljaCBtYWtlcyBpdCBsZXNzIGNyaXRpY2FsIGhlcmUuIEkmIzM5O20gcHJpb3JpdGl6aW5nIGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBuZXcgQVAvTWVzaCBmdW5jdGlvbmFsaXR5LgoKSSByZWNoZWNrZWQgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCwgYW5kIHllcywgdGhleSAqYXJlKiBzdGF0aWMsIGJ1dCBzaW5jZSB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AsIHRoZXkmIzM5O3JlIGNhbGxlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5JiMzOTtyZSB2YWxpZCB0YXJnZXRzLiBUaGV5IGFyZSBpbXBvcnRhbnQuCgpOb3csIG9uIHRoZSBjb25maWcgc2lkZTogYE1BQzgwMjExYCBhbmQgYFVTQmAgYXJlIHN0YW5kYXJkLCBvYnZpb3VzbHkuIGBNVDc2MDFVYCBpcyB0aGUgZHJpdmVyLCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCBjcml0aWNhbGx5LCBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIGZvciB0aGUgbWVzaCBhc3BlY3QuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgYXMgYW4gZW5hYmxlciB0b28uCgpTbywgdGhlIHN1bW1hcnkgb2YgbXkgZGVjaXNpb25zIGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGUgbmV3IEFQLCBNZXNoLCBQMlAsIGFuZCBBZC1Ib2MgZnVuY3Rpb25hbGl0aWVzIG1ha2UgdGhpcyBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IFVTQiBkZXZpY2VzIGFyZSBlbXVsYXRhYmxlLgoqICAgKipGb2N1c1N5bWJvbHM6KioKICAgICogICBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAKICAgICogICBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAKICAgICogICBgbXQ3NjAxdV9zdGFydF9hcGAKICAgICogICBgbXQ3NjAxdV9zdG9wX2FwYAogICAgKiAgIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KioKICAgICogICBgTVQ3NjAxVWAKICAgICogICBgTUFDODAyMTFfTUVTSGAKCk15IHJlYXNvbmluZyBpcyB0aGUgYWRkaXRpb24gb2YgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyIGJ5IG1vZGlmeWluZyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzYwMVUmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzYwMXVfbWFjX3NldF9iZWFjb24mIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9tYWNfY29uZmlnX3RzZiYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0YXJ0X2FwJiMzNDssCiAgICAmIzM0O210NzYwMXVfc3RvcF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIG1vZGVzIHRvIHRoZSBtdDc2MDF1IFVTQiB3aXJlbGVzcyBkcml2ZXIuIEl0IG1vZGlmaWVzIG1hYzgwMjExIGNhbGxiYWNrcyB0byBoYW5kbGUgYmVhY29uIHNldHVwLCBUU0YgY29uZmlndXJhdGlvbiwgYW5kIEFQIHN0YXJ0L3N0b3Agb3BlcmF0aW9ucy4gU2luY2UgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGRldmljZXMgKHZoY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc2MDFVJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc2MDF1X21hY19zZXRfYmVhY29uJiMzNDssCiAgICAmIzM0O210NzYwMXVfbWFjX2NvbmZpZ190c2YmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9zdGFydF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0b3BfYXAmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyLiBJdCBtb2RpZmllcyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXG5cbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTM6NDk6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jCmluZGV4IDVkOWU5NTJiMjk2NjQuLmU4NzFmN2I2M2NiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jCkBAIC0xMiw2ICYjNDM7MTIsMjUgQEAKIAogI2luY2x1ZGUgJiMzNDtpbml0dmFscy5oJiMzNDsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IGlmX2xpbWl0c1tdID0gewomIzQzOwl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIH0sCiYjNDM7CXsgLm1heCA9IDgsCiYjNDM7CSAgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKJiM0MzsjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKJiM0MzsJCSAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CiYjNDM7I2VuZGlmCiYjNDM7CQkgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8CiYjNDM7CQkgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpZl9jb21iW10gPSB7IHsKJiM0MzsJLmxpbWl0cyA9IGlmX2xpbWl0cywKJiM0MzsJLm5fbGltaXRzID0gQVJSQVlfU0laRShpZl9saW1pdHMpLAomIzQzOwkubWF4X2ludGVyZmFjZXMgPSAyLAomIzQzOwkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsCiYjNDM7CS5iZWFjb25faW50X2luZnJhX21hdGNoID0gdHJ1ZSwKJiM0Mzt9IH07CiYjNDM7CiBzdGF0aWMgdm9pZAogbXQ3NjAxdV9zZXRfd2xhbl9zdGF0ZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIHZhbCwgYm9vbCBlbmFibGUpCiB7CkBAIC01OTksNiAmIzQzOzYxOCw3IEBAIGludCBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldikKIAlpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7CiAJaWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpOwogCWllZWU4MDIxMV9od19zZXQoaHcsIE1GUF9DQVBBQkxFKTsKJiM0MzsJaWVlZTgwMjExX2h3X3NldChodywgTkVFRFNfVU5JUVVFX1NUQV9BRERSKTsKIAlody0mZ3Q7bWF4X3JhdGVzID0gMTsKIAlody0mZ3Q7bWF4X3JlcG9ydF9yYXRlcyA9IDc7CiAJaHctJmd0O21heF9yYXRlX3RyaWVzID0gMTsKQEAgLTYwNyw5ICYjNDM7NjI3LDE2IEBAIGludCBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldikKIAlody0mZ3Q7dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpOwogCiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi0mZ3Q7bWFjYWRkcik7Ci0KJiM0MzsJd2lwaHktJmd0O2ludGVyZmFjZV9tb2RlcyA9CiYjNDM7CQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKJiM0MzsjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CiYjNDM7I2VuZGlmCiYjNDM7CQlCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8CiYjNDM7CQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwomIzQzOwl3aXBoeS0mZ3Q7aWZhY2VfY29tYmluYXRpb25zID0gaWZfY29tYjsKJiM0MzsJd2lwaHktJmd0O25faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRShpZl9jb21iKTsKIAl3aXBoeS0mZ3Q7ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SOwotCXdpcGh5LSZndDtpbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAJd2lwaHktJmd0O2ZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUzsKIAogCXdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9DUU1fUlNTSV9MSVNUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jCmluZGV4IGNhOWNmNjI4ZWIxMGQuLjVlMmRlYzEzMTMzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYwpAQCAtMTE4LDE5ICYjNDM7MTE4LDI3IEBAIHUxNiBtdDc2X21hY190eF9yYXRlX3ZhbChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwKIAkJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpCiAJCQlidyA9IDE7CiAJfSBlbHNlIHsKLQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyOwotCQlpbnQgYmFuZCA9IGRldi0mZ3Q7Y2hhbmRlZi5jaGFuLSZndDtiYW5kOwotCQl1MTYgdmFsOwotCi0JCXIgPSAmYW1wO2Rldi0mZ3Q7aHctJmd0O3dpcGh5LSZndDtiYW5kc1tiYW5kXS0mZ3Q7Yml0cmF0ZXNbcmF0ZS0mZ3Q7aWR4XTsKLQkJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCi0JCQl2YWwgPSByLSZndDtod192YWx1ZV9zaG9ydDsKLQkJZWxzZQotCQkJdmFsID0gci0mZ3Q7aHdfdmFsdWU7CiAKLQkJcGh5ID0gdmFsICZndDsmZ3Q7IDg7Ci0JCXJhdGVfaWR4ID0gdmFsICZhbXA7IDB4ZmY7Ci0JCWJ3ID0gMDsKJiM0MzsJCWludCBiYW5kID0gZGV2LSZndDtjaGFuZGVmLmNoYW4tJmd0O2JhbmQ7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiYjNDM7CQkJZGV2LSZndDtody0mZ3Q7d2lwaHktJmd0O2JhbmRzW2JhbmRdOwomIzQzOwomIzQzOwkJaWYgKHJhdGUtJmd0O2lkeCAmbHQ7IDAgfHwgcmF0ZS0mZ3Q7aWR4ICZndDs9IHNiYW5kLSZndDtuX2JpdHJhdGVzKSB7CiYjNDM7CQkJcGh5ID0gTVRfUEhZX1RZUEVfQ0NLOwomIzQzOwkJCXJhdGVfaWR4ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID0KJiM0MzsJCQkJJmFtcDtzYmFuZC0mZ3Q7Yml0cmF0ZXNbcmF0ZS0mZ3Q7aWR4XTsKJiM0MzsJCQl1MTYgdmFsOwomIzQzOwomIzQzOwkJCWlmIChyYXRlLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQomIzQzOwkJCQl2YWwgPSByLSZndDtod192YWx1ZV9zaG9ydDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXZhbCA9IHItJmd0O2h3X3ZhbHVlOwomIzQzOwomIzQzOwkJCXBoeSA9IHZhbCAmZ3Q7Jmd0OyA4OwomIzQzOwkJCXJhdGVfaWR4ID0gdmFsICZhbXA7IDB4ZmY7CiYjNDM7CQl9CiAJfQogCiAJcmF0ZXZhbCA9IEZJRUxEX1BSRVAoTVRfUlhXSV9SQVRFX01DUywgcmF0ZV9pZHgpOwpAQCAtMjY0LDEzICYjNDM7MjcyLDEzIEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYikKIAkJbXQ3Nl9jbGVhcihkZXYsIE1UX0FVVE9fUlNQX0NGRywgTVRfQVVUT19SU1BfUFJFQU1CX1NIT1JUKTsKIH0KIAotdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKQomIzQzO3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCkKIHsKIAl1MzIgdmFsID0gbXQ3NjAxdV9ycihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyk7CiAKLQl2YWwgJmFtcDs9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwKLQkJIE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfAotCQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4pOwomIzQzOwl2YWwgJmFtcDs9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8CiYjNDM7CQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTsKIAogCWlmICghZW5hYmxlKSB7CiAJCW10NzYwMXVfd3IoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsIHZhbCk7CkBAIC0yNzksOSAmIzQzOzI4NywyMiBAQCB2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpCiAKIAl2YWwgJmFtcDs9IH5NVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMOwogCXZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUwsIGludGVydmFsICZsdDsmbHQ7IDQpIHwKLQkJTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwKLQkJTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8Ci0JCU1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOOwomIzQzOwkgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47CiYjNDM7CiYjNDM7CS8qIEFQIE1vZGUgKi8KJiM0MzsJaWYgKHZpZiAmYW1wOyZhbXA7ICh2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKJiM0MzsJCSAgICB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSkKJiM0MzsJCXZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDMpIHwKJiM0MzsJCSAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYOwomIzQzOwkvKiBJQlNTIC8gQWQtSG9jIE1vZGUgKi8KJiM0MzsJZWxzZSBpZiAodmlmICZhbXA7JmFtcDsgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQomIzQzOwkJdmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMikgfAomIzQzOwkJICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7CiYjNDM7CS8qIFN0YXRpb24gbW9kZSAqLwomIzQzOwllbHNlCiYjNDM7CQl2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAxKTsKJiM0MzsKJiM0MzsJbXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTsKIH0KIAogc3RhdGljIHZvaWQgbXQ3NjAxdV9jaGVja19tYWNfZXJyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQpAQCAtMzkzLDYgJiM0Mzs0MTQsMzggQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogCQkgICBGSUVMRF9QUkVQKE1UX01BWF9MRU5fQ0ZHX0FNUERVLCBtaW5fZmFjdG9yKSk7CiB9CiAKJiM0MztpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldi0mZ3Q7aHcsIHZpZiwgMCk7CiYjNDM7CXN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7CiYjNDM7CWludCBlcnIsIHdvcmRzOwomIzQzOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBVU0IgZGV2aWNlcyBhbHJlYWR5IHJlc2VydmUgZW5vdWdoIHNrYiBoZWFkcm9vbSAqLwomIzQzOwllcnIgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXR4d2kgPSAoc3RydWN0IG10NzZfdHh3aSAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTsKJiM0MzsJbWVtc2V0KHR4d2ksIDAsIHNpemVvZigqdHh3aSkpOwomIzQzOwomIzQzOwl0eHdpLSZndDt3Y2lkID0gMDsKJiM0MzsJdHh3aS0mZ3Q7bGVuX2N0bCA9IGNwdV90b19sZTE2KHNrYi0mZ3Q7bGVuIC0gc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTsKJiM0MzsJdHh3aS0mZ3Q7cmF0ZV9jdGwgPSBjcHVfdG9fbGUxNigwKTsKJiM0MzsKJiM0MzsJd29yZHMgPSBESVZfUk9VTkRfVVAoc2tiLSZndDtsZW4sIDQpOwomIzQzOwllcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSwKJiM0MzsJCQkJICAgICAgIChjb25zdCB1MzIgKilza2ItJmd0O2RhdGEsIHdvcmRzKTsKJiM0MzsJZGV2X2tmcmVlX3NrYihza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBtdDc2X21hY19wcm9jZXNzX3JhdGUoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywgdTE2IHJhdGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaAppbmRleCA1NGJkNGZhYzU0ZDgzLi41Mjg3NTZjY2Y0NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmgKQEAgLTE2Nyw1ICYjNDM7MTY3LDYgQEAgc3RydWN0IG10NzZfdHhfc3RhdHVzCiBtdDc2MDF1X21hY19mZXRjaF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpOwogdm9pZCBtdDc2X3NlbmRfdHhfc3RhdHVzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXMgKnN0YXQpOwogdm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7Ci0KJiM0MztpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYwppbmRleCAwNWJhNDNlMTk4NWM4Li40Mzg5ZTMzMmRmZTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAqCSBydDJ4MDAgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBib3RoZXJlZCB0aG91Z2guCiAJCSAqLwogCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2Jzc2lkKSkKLQkJCW10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCBmYWxzZSwgMCk7CiYjNDM7CQkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApOwogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7CkBAIC0xNjEsNyAmIzQzOzE2MSwyMCBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJfQogCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkKLQkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHRydWUsIGluZm8tJmd0O2JlYWNvbl9pbnQpOwomIzQzOwkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgaW5mby0mZ3Q7YmVhY29uX2ludCk7CiYjNDM7CiYjNDM7CWlmICgoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9CRUFDT04pICZhbXA7JmFtcDsgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQomIzQzOwkJbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihkZXYsIHZpZiwgaW5mbyk7CiYjNDM7CiYjNDM7CWlmICgoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7ZW5hYmxlX2JlYWNvbikKJiM0MzsJCQltdDc2X3NldChkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywKJiM0MzsJCQkJIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpOwomIzQzOwkJZWxzZQomIzQzOwkJCW10NzZfY2xlYXIoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsCiYjNDM7CQkJCSAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpOwomIzQzOwl9CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9IVCB8fCBjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkKIAkJbXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oZGV2LCBpbmZvLSZndDt1c2VfY3RzX3Byb3QsCkBAIC0xODMsNiAmIzQzOzE5Niw0MyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiYjNDM7CQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc2MDF1X2RldiAqZGV2ID0gaHctJmd0O3ByaXY7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRoZSB3Y2lkIFRhYmxlICovCiYjNDM7CWZvciAoaW50IGkgPSAxOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCW10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogU2V0IHByZSBUQlRUIHRvIDZtcyAqLwomIzQzOwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0lOVF9USU1FUl9DRkcsIE1UX0lOVF9USU1FUl9DRkdfUFJFX1RCVFQsIDYpOwomIzQzOwltdDc2X3NldChkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTsKJiM0MzsKJiM0MzsJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgbGlua19jb25mLSZndDtiZWFjb25faW50KTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rldi0mZ3Q7bXV0ZXgpOwomIzQzOwomIzQzOwltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7CiYjNDM7CiYjNDM7CW10NzZfY2xlYXIoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rldi0mZ3Q7bXV0ZXgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQKIG10NzZfd2NpZF9hbGxvYyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldikKIHsKQEAgLTQxOSw2ICYjNDM7NDY5LDggQEAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7CiAJLmNvbmZpZyA9IG10NzYwMXVfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyID0gbXQ3Nl9jb25maWd1cmVfZmlsdGVyLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLAomIzQzOwkuc3RhcnRfYXAgPSBtdDc2MDF1X3N0YXJ0X2FwLAomIzQzOwkuc3RvcF9hcCA9IG10NzYwMXVfc3RvcF9hcCwKIAkuc3RhX2FkZCA9IG10NzYwMXVfc3RhX2FkZCwKIAkuc3RhX3JlbW92ZSA9IG10NzYwMXVfc3RhX3JlbW92ZSwKIAkuc3RhX25vdGlmeSA9IG10NzYwMXVfc3RhX25vdGlmeSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgKaW5kZXggMTE4ZDQzNzA3ODUzNy4uNzM2NmUxYzQ3NjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgKQEAgLTM1OSw3ICYjNDM7MzU5LDggQEAgdm9pZCBtdDc2MDF1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGxlZ2FjeV9wcm90LAogCQkJCWludCBodF9tb2RlKTsKIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYik7Ci12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpOwomIzQzO3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7CiB2b2lkCiBtdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpOwogdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYwppbmRleCA1YWVlYWMwZGQ5ZmU3Li40N2M3OGM0ZmY1MTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jCkBAIC0yNyw2ICYjNDM7MjcsMTQgQEAgc3RhdGljIHU4IHEyaHdxKHU4IHEpCiBzdGF0aWMgdTggc2tiMnEoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcWlkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsKJiM0MzsJaWYgKGllZWU4MDIxMV9pc19tZ210KGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgfHwKJiM0MzsJICAgIChpbmZvLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkgewomIzQzOwkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgTVRfVFhRX1ZPKTsKJiM0MzsJCXJldHVybiBxMmh3cShNVF9UWFFfVk8pOwomIzQzOwl9CiAKIAlpZiAoV0FSTl9PTihxaWQgJmd0Oz0gTVRfVFhRX1BTRCkpIHsKIAkJcWlkID0gTVRfVFhRX0JFOwpAQCAtMTM0LDYgJiM0MzsxNDIsOSBAQCBtdDc2MDF1X3B1c2hfdHh3aShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlID0gJmFtcDtpbmZvLSZndDtjb250cm9sLnJhdGVzWzBdOwogCXN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItJmd0O2RhdGE7CiYjNDM7CWJvb2wgaXNfbWdtdCA9IGllZWU4MDIxMV9pc19tZ210KGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiYjNDM7CWJvb2wgaXNfbWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItJmd0O2FkZHIxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgaXNfcHJvYmU7CiAJdTMyIHBrdF9pZDsKQEAgLTE0OCwxNCAmIzQzOzE1OSwxNCBAQCBtdDc2MDF1X3B1c2hfdHh3aShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICAgaW5mby0mZ3Q7Y29udHJvbC5yYXRlcywgMSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwotCWlmIChyYXRlLSZndDtpZHggJmx0OyAwIHx8ICFyYXRlLSZndDtjb3VudCkKJiM0MzsJaWYgKCFpc19tZ210ICZhbXA7JmFtcDsgKHJhdGUtJmd0O2lkeCAmbHQ7IDAgfHwgIXJhdGUtJmd0O2NvdW50KSkKIAkJcmF0ZV9jdGwgPSB3Y2lkLSZndDt0eF9yYXRlOwogCWVsc2UKIAkJcmF0ZV9jdGwgPSBtdDc2X21hY190eF9yYXRlX3ZhbChkZXYsIHJhdGUsICZhbXA7bnNzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJdHh3aS0mZ3Q7cmF0ZV9jdGwgPSBjcHVfdG9fbGUxNihyYXRlX2N0bCk7CiAKLQlpZiAoIShpbmZvLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCiYjNDM7CWlmICghKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmYW1wOyZhbXA7IHN0YSAmYW1wOyZhbXA7ICFpc19tY2FzdCkKIAkJdHh3aS0mZ3Q7YWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfUkVROwogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpCiAJCXR4d2ktJmd0O2Fja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX05TRVE7CkBAIC0xOTcsNiAmIzQzOzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAogCXN0cnVjdCBtdDc2X3N0YSAqbXN0YSA9IE5VTEw7CiAJc3RydWN0IG10NzZfd2NpZCAqd2NpZCA9IGRldi0mZ3Q7bW9uX3djaWQ7CiAJc3RydWN0IG10NzZfdHh3aSAqdHh3aTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJYm9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0mZ3Q7YWRkcjEpOwogCWludCBwa3RfbGVuID0gc2tiLSZndDtsZW47CiAJaW50IGh3X3EgPSBza2IycShza2IpOwogCkBAIC0yMTEsNyAmIzQzOzIyNCw3IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAogCWlmIChzdGEpIHsKIAkJbXN0YSA9IChzdHJ1Y3QgbXQ3Nl9zdGEgKikgc3RhLSZndDtkcnZfcHJpdjsKIAkJd2NpZCA9ICZhbXA7bXN0YS0mZ3Q7d2NpZDsKLQl9IGVsc2UgaWYgKHZpZikgewomIzQzOwl9IGVsc2UgaWYgKHZpZiAmYW1wOyZhbXA7IGlzX21jYXN0KSB7CiAJCXN0cnVjdCBtdDc2X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3Nl92aWYgKil2aWYtJmd0O2Rydl9wcml2OwogCiAJCXdjaWQgPSAmYW1wO212aWYtJmd0O2dyb3VwX3djaWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UNzYwMVUgRHJpdmVyIFBhdGNoIGZvciBNdWx0aS1JbnRlcmZhY2UgU3VwcG9ydCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGVuaGFuY2luZyB0aGUgYG10NzYwMXVgIGRyaXZlciB0byBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgbGlrZSBBUCwgTWVzaCwgUDJQLCBBZGhvYywgYW5kIFN0YXRpb24gbW9kZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCBzdGVwLCBleHBhbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRyaXZlciBjb25zaWRlcmFibHkuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOgoKRmlyc3QsIGluIGBpbml0LmNgLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBpZl9saW1pdHNgIGFuZCBgaWZfY29tYmAgaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZmxleGlibGUgYXJjaGl0ZWN0dXJlIGNhcGFibGUgb2YgbWFuYWdpbmcgbXVsdGlwbGUgY29uY3VycmVudCBpbnRlcmZhY2VzLCBhbmQgaXQmIzM5O3MgYWxzbyBzZXR0aW5nIG5lY2Vzc2FyeSBpbnRlcmZhY2UgbW9kZXMuIFNldHRpbmcgYE5FRURTX1VOSVFVRV9TVEFfQUREUmAgaW4gdGhlIGhhcmR3YXJlIGhpbnRzIGF0IHRoZSBkcml2ZXImIzM5O3MgY2FwYWJpbGl0eSB0byBoYW5kbGUgdW5pcXVlIE1BQyBhZGRyZXNzZXMgZm9yIHN0YXRpb25zIGluIGRpZmZlcmVudCBtb2Rlcy4KCk1vdmluZyB0byBgbWFjLmNgLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGFyZSBzdHJhaWdodGZvcndhcmQg4oCTIGFkZHJlc3NpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUga2V5IGhlcmUsIHRob3VnaCwgaXMgdGhlIGNoYW5nZSB0byBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAuIEl0JiMzOTtzIG5vdyB0YWtpbmcgYSBgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZmAgd2hpY2ggaXMgY3J1Y2lhbCwgYmVjYXVzZSB0aGlzIGNoYW5nZSwgY291cGxlZCB3aXRoIHRoZSBhZGRpdGlvbnMgaW4gYG1haW4uY2AgYWxsb3dzIG1lIHRvIGNvbmZpZ3VyZSBUU0YgKFRpbWVzdGFtcCBjb3VudGVyKSBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgaW50ZXJmYWNlIHR5cGUgKEFQLCBBZC1Ib2MsIG9yIFN0YXRpb24pLiBUaGUgbmV3IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZzsgaXQgYWxsb2NhdGVzIGFuIFNLQiBmb3IgdGhlIGJlYWNvbiwgcHVzaGVzIGEgYHN0cnVjdCBtdDc2X3R4d2lgIGhlYWRlciwgaW5pdGlhbGl6ZXMgaXQsIGFuZCB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgZGV2aWNlIHVzaW5nIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLgoKSW4gYG1haW4uY2AsIHRoZSB1cGRhdGVzIHRvIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgIGFyZSBjcml0aWNhbC4gQ2FsbGluZyBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAgd2l0aCBgdmlmYCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgbmV3IGhhbmRsaW5nIGZvciBgQlNTX0NIQU5HRURfQkVBQ09OYCBhbmQgYEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEYCBpcyBleHBlY3RlZCBhbmQgcmVxdWlyZWQgZm9yIG1hbmFnaW5nIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uLiBBZGRpbmcgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCB0byBgaWVlZTgwMjExX29wc2AgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBlbnRyeSBwb2ludHMgZm9yIEFQIG1hbmFnZW1lbnQsIHdoaWNoIHdpbGwgYmUgZXNzZW50aWFsLgoKRmluYWxseSwgYHR4LmNgIGhhcyBjaGFuZ2VzIGNlbnRlcmVkIGFyb3VuZCBmcmFtZSBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWUgbWFuYWdlbWVudC4gVGhlIG1vZGlmaWNhdGlvbiB0byBgc2tiMnFgIGZvciBtYW5hZ2VtZW50IGFuZCBpbmplY3RlZCBmcmFtZXMgbWFrZXMgc2Vuc2UgZm9yIFFvUy4gYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYG10NzYwMXVfdHhgIGhhdmUgdGhlIHJpZ2h0IGNoZWNrcyBmb3IgbXVsdGljYXN0cyBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIHdoaWNoIGlzIHNvbWV0aGluZyBJJiMzOTtkIGV4cGVjdCB0byBzZWUuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGFzIGl0IGNvbmNlcm5zIG1lIGhlcmUsIEkgd2FudCB0byBhc3Nlc3MgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgcHJldHR5IGNsZWFuLiBUaGUgYHR4d2lgIGlzIGRlZmluaXRlbHkgemVyb2VkLiBUaGUgZGF0YSB3cml0dGVuIHZpYSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBvcmlnaW5hdGVzIGZyb20gYHNrYmAuIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYCBpcyB1c2VkLCBhbmQgdGhlIGJlYWNvbiBpcyBidWlsdCBieSBtYWM4MDIxMS4gV2hhdCYjMzk7cyBjb25jZXJuaW5nIGlzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgdG8gVVNCIGRvZXNuJiMzOTt0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuIEtNU0FOIHdvdWxkbiYjMzk7dCBjb21wbGFpbiBhYm91dCBkYXRhIGJlaW5nIHNlbnQgdG8gaGFyZHdhcmUgdmlhIGEgVVNCIHNpbmNlIGl0IGNhbiYjMzk7dCBkZXRlY3QgaXQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2FmZS4gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2Agd3JpdGVzIHRvIFVTQiBkaXJlY3RseSwgc28gSSB3YW50IHRvIGtub3cgaWYgaXQgdXNlcyBETUEuIEkgc2hvdWxkIGNoZWNrIHRoYXQgZnVuY3Rpb24gdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jPTE5MT1zdGF0aWMgaW50IG10NzYwMXVfaW5pdF93Y2lkX21lbShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYzoyMDU6XHRyZXQgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9XQ0lEX0FERFJfQkFTRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jLTIwNi1cdFx0XHRcdCAgICAgICB2YWxzLCBOX1dDSURTICogMik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmM9MjEyPXN0YXRpYyBpbnQgbXQ3NjAxdV9pbml0X2tleV9tZW0oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjE1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmM6MjE2Olx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX1NLRVlfTU9ERV9CQVNFXzAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMTctXHRcdFx0XHRcdHZhbHMsIEFSUkFZX1NJWkUodmFscykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jPTIyMD1zdGF0aWMgaW50IG10NzYwMXVfaW5pdF93Y2lkX2F0dHJfbWVtKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jLTIzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jOjIzMjpcdHJldCA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX1dDSURfQVRUUl9CQVNFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjMzLVx0XHRcdFx0ICAgICAgIHZhbHMsIE5fV0NJRFMgKiAyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQ0MS1cdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYzo0NDI6XHRlcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDQzLVx0XHRcdFx0ICAgICAgIChjb25zdCB1MzIgKilza2ItXHUwMDNlZGF0YSwgd29yZHMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM9MjEwPWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjIzOTppbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNDAtXHRcdFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyNjQ6XHRyZXR1cm4gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgb2Zmc2V0ICYjNDM7IGNudCAqIDQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTI2NS1cdFx0XHRcdFx0ZGF0YSAmIzQzOyBjbnQsIG4gLSBjbnQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oPTMyNj1pbnQgbXQ3NjAxdV93cml0ZV9yZWdfcGFpcnMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBiYXNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI3LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3Nl9yZWdfcGFpciAqZGF0YSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaDozMjg6aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oLTMyOS1cdFx0XHQgICAgIGNvbnN0IHUzMiAqZGF0YSwgaW50IG4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdXNiLmM9MjEzPXZvaWQgbXQ3NjAxdV93cl9jb3B5KHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdXNiLmMtMjE4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYzoyMTk6XHRtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBvZmZzZXQsIGRhdGEsIGxlbiAvIDQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYy0yMjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGJ1cnN0IHdyaXRlIG9wZXJhdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCB3aXRoaW4gdGhlIGBtY3UuY2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgZnVuY3Rpb24uIFRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBmb3IgcGVyZm9ybWFuY2UsIG9yIHBlcmhhcHMgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgc29tZSBxdWlya3kgaGFyZHdhcmUgYmVoYXZpb3IgdGhhdCBuZWVkcyBhIGNsb3NlciBpbnNwZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHRoZSByZWdpc3RlciB3cml0ZXMuIElzIGl0IG9wdGltaXplZD8gQXJlIHRoZXkgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBvciBkYXRhIGJ1ZmZlciBpc3N1ZXM/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIHBvdGVudGlhbCBpbnRlcnJ1cHQgZGlzYWJsaW5nLCBjYWNoZSBmbHVzaGluZywgb3Igc3BlY2lmaWMgdGltaW5nIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJlIGNvbW1vbmx5IG5lZWRlZCB3aXRoIGJ1cnN0IHdyaXRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMTA9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTIzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjM5OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTI0MC1cdFx0XHQgICAgIGNvbnN0IHUzMiAqZGF0YSwgaW50IG4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg9MzI2PWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zMjctXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtdDc2X3JlZ19wYWlyICpkYXRhLCBpbnQgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oOjMyODppbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI5LVx0XHRcdCAgICAgY29uc3QgdTMyICpkYXRhLCBpbnQgbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzQ4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgY29kZSByZWZlcmVuY2U6CgoqKkRpdmluZyBpbnRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoYXQgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgZnVuY3Rpb24gd2l0aGluIGBtY3UuY2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgYnVyc3QgcmVnaXN0ZXIgd3JpdGluZyBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGNvbmZpZ3VyaW5nIGFuZCBjb250cm9sbGluZyB0aGUgZGV2aWNlLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYWRkcmVzc2luZyBzY2hlbWUsIHRoZSBkYXRhIGZvcm1hdCBpdCBleHBlY3RzLCBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBpdOKAmXMgdGFyZ2V0aW5nLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBvcHRpbWl6aW5nIHRoZSB3cml0ZSBwcm9jZXNzLCBtYXliZSBieSBncm91cGluZyB3cml0ZXMgdG8gcmVkdWNlIG92ZXJoZWFkLCB0byBlbnN1cmUgZWZmaWNpZW5jeS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBpdCYjMzk7cyB1c2luZyAobGlrZWx5IFVTQiBvciBTUEksIGdpdmVuIHRoZSBjb250ZXh0KSBhbmQgd2hldGhlciBpdCBtYW5hZ2VzIGFueSBkYXRhIGJ1ZmZlcmluZyBvciBlcnJvciBjaGVja2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBNVDc2MDFVIGRyaXZlciBhcmNoaXRlY3R1cmUgdG9vLCB3aGVyZSBkb2VzIHRoaXMgZml0PyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIG9mIGdldHRpbmcgdGhpcyBjaGlwc2V0IG9wZXJhdGluZywgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBhdCBhIHZlcnkgZ3JhbnVsYXIgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM5Olx0aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcbiAyNDA6XHRcdFx0XHQgICAgIGNvbnN0IHUzMiAqZGF0YSwgaW50IG4pXG4gMjQxOlx0e1xuIDI0MjpcdFx0Y29uc3QgaW50IG1heF9yZWdzX3Blcl9jbWQgPSBJTkJBTkRfUEFDS0VUX01BWF9MRU4gLyA0IC0gMTtcbiAyNDM6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMjQ0Olx0XHRpbnQgY250LCBpLCByZXQ7XG4gMjQ1Olx0XG4gMjQ2Olx0XHRpZiAoIW4pXG4gMjQ3Olx0XHRcdHJldHVybiAwO1xuIDI0ODpcdFxuIDI0OTpcdFx0Y250ID0gbWluKG1heF9yZWdzX3Blcl9jbWQsIG4pO1xuIDI1MDpcdFxuIDI1MTpcdFx0c2tiID0gYWxsb2Nfc2tiKGNudCAqIDQgJiM0MzsgTVRfRE1BX0hEUl9MRU4gJiM0MzsgNCwgR0ZQX0tFUk5FTCk7XG4gMjUyOlx0XHRpZiAoIXNrYilcbiAyNTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjU0Olx0XHRza2JfcmVzZXJ2ZShza2IsIE1UX0RNQV9IRFJfTEVOKTtcbiAyNTU6XHRcbiAyNTY6XHRcdHNrYl9wdXRfbGUzMihza2IsIE1UX01DVV9NRU1NQVBfV0xBTiAmIzQzOyBvZmZzZXQpO1xuIDI1NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOylcbiAyNTg6XHRcdFx0c2tiX3B1dF9sZTMyKHNrYiwgZGF0YVtpXSk7XG4gMjU5Olx0XG4gMjYwOlx0XHRyZXQgPSBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0JVUlNUX1dSSVRFLCBjbnQgPT0gbik7XG4gMjYxOlx0XHRpZiAocmV0KVxuIDI2MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDI2MzpcdFxuIDI2NDpcdFx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIG9mZnNldCAmIzQzOyBjbnQgKiA0LFxuIDI2NTpcdFx0XHRcdFx0XHRkYXRhICYjNDM7IGNudCwgbiAtIGNudCk7XG4gMjY2Olx0fVxuIDI2NzpcdFxuIDI2ODpcdHN0cnVjdCBtdDc2X2Z3X2hlYWRlciB7XG4gMjY5Olx0XHRfX2xlMzIgaWxtX2xlbjtcbiAyNzA6XHRcdF9fbGUzMiBkbG1fbGVuO1xuIDI3MTpcdFx0X19sZTE2IGJ1aWxkX3ZlcjtcbiAyNzI6XHRcdF9fbGUxNiBmd192ZXI7XG4gMjczOlx0XHR1OCBwYWRbNF07XG4gMjc0Olx0XHRjaGFyIGJ1aWxkX3RpbWVbMTZdO1xuIDI3NTpcdH07XG4gMjc2Olx0XG4gMjc3Olx0c3RydWN0IG10NzZfZncge1xuIDI3ODpcdFx0c3RydWN0IG10NzZfZndfaGVhZGVyIGhkcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQmVhY29uIEZyYW1lIEludGVncml0eSBpbiBNVDc2MDFVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBiZWFjb24gZnJhbWVzIGFyZSBoYW5kbGVkIGluIHRoZSBNVDc2MDFVIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgdGhlbSB0byB0aGUgaGFyZHdhcmUuIEl0IHNlZW1zIHRoYXQgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB0YWtpbmcgdGhlIGJlYWNvbiBkYXRhLCBjb3B5aW5nIGl0IGludG8gYSBuZXcgU0tCLCBhbmQgdGhlbiB0cmFuc21pdHRpbmcgaXQgdXNpbmcgYG10NzYwMXVfbWN1X21zZ19zZW5kYC4gVGhlIGRhdGEgaXRzZWxmIG9yaWdpbmF0ZXMgZnJvbSBgc2tiLSZndDtkYXRhYCB3aXRoaW4gdGhlIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbi4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgc3RhcnRpbmcgdG8gcmluZy4gIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgNC1ieXRlIHdvcmRzIHRvIGJlIHdyaXR0ZW4gdXNpbmcgYERJVl9ST1VORF9VUChza2ItJmd0O2xlbiwgNClgIGFuZCBJIGFtIHRoaW5raW5nIHRoYXQgaWYgYHNrYi0mZ3Q7bGVuYCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbGVuZ3RoIG9mIHRoZSBiZWFjb24gZGF0YSwgaXNuJiMzOTt0IGEgbXVsdGlwbGUgb2YgNCwgdGhpcyBkaXZpc2lvbiB3aWxsIHJlYWQgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHByb3ZpZGVkIGRhdGEsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBjb25jZXJuaW5nLCBzaW5jZSBpdCBtZWFucyB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2UgZGF0YSB0aGF0IGlzbiYjMzk7dCBwYXJ0IG9mIHRoZSBiZWFjb24uCgpJIHJlYWxseSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgYHNrYmAgdXNlZCBoZXJlIGlzIHJldHVybmVkIGJ5IGBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtJmd0O2h3LCB2aWYsIDApYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGF0KiBmdW5jdGlvbiBpcyBhbGxvY2F0aW5nIGFuZCBwb3B1bGF0aW5nIHRoZSBgc2tiYCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkaXR5IG9mIG91ciB3cml0ZSBvcGVyYXRpb24uIEkgbmVlZCB0byBrbm93IHRoZSBsZW5ndGggb2YgdGhpcyBgc2tiYCBhbmQgaG93IGl0cyBkYXRhIGZpZWxkIGlzIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBteSBhbnN3ZXIuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGllZWU4MDIxMV9iZWFjb25fZ2V0YCBhbmQgY2hlY2sgdGhhdCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGJlYWNvbiBkYXRhIGVuc3VyZSB0aGUgc2FmZXR5IG9mIHRoaXMgd3JpdGUgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfYmVhY29uX2dldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTY2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvODAyMTEvbWFjODAyMTEtYWR2YW5jZWQucnN0PTc1PXN1cHBvcnQgZm9yIHBvd2Vyc2F2aW5nIGNsaWVudHNcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvODAyMTEvbWFjODAyMTEtYWR2YW5jZWQucnN0LTgzLVx0aWVlZTgwMjExX2dldF9idWZmZXJlZF9iY1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpLzgwMjExL21hYzgwMjExLWFkdmFuY2VkLnJzdDo4NDpcdGllZWU4MDIxMV9iZWFjb25fZ2V0XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvODAyMTEvbWFjODAyMTEtYWR2YW5jZWQucnN0LTg1LVx0aWVlZTgwMjExX3N0YV9lb3NwXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYz0xNjQ4PXN0YXRpYyBpbnQgYXRoMTBrX21hY19zZXR1cF9iY25fdG1wbChzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy0xNjYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzoxNjY0Olx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXHUwMDI2b2ZmcywgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTE2NjUtXHRpZiAoIWJjbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmM9Mzg0MT12b2lkIGF0aDEwa193bWlfZXZlbnRfaG9zdF9zd2JhKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmMtMzkxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmM6MzkxOTpcdFx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoYXItXHUwMDNlaHcsIGFydmlmLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jLTM5MjAtXHRcdGlmICghYmNuKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYz0xNTQ2PXN0YXRpYyBpbnQgYXRoMTFrX21hY19zZXR1cF9iY25fdG1wbF9lbWEoc3RydWN0IGF0aDExa192aWYgKmFydmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTU1NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM6MTU1NTpcdGJlYWNvbnMgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCh0eF9hcnZpZi1cdTAwM2Vhci1cdTAwM2VodyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTU1Ni1cdFx0XHRcdFx0XHRcdCB0eF9hcnZpZi1cdTAwM2V2aWYsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM9MTYwMz1zdGF0aWMgaW50IGF0aDExa19tYWNfc2V0dXBfYmNuX3RtcGxfbWJzc2lkKHN0cnVjdCBhdGgxMWtfdmlmICphcnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE2MjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jOjE2MjE6XHRiY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcdTAwMjZvZmZzLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTYyMi1cdGlmICghYmNuKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNzUxPXN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9iY25fdG1wbF9lbWEoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNzYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNzYxOlx0YmVhY29ucyA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KGF0aDEya19hcl90b19odyh0eF9hcnZpZi1cdTAwM2VhciksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE3NjItXHRcdFx0XHRcdFx0XHQgdHhfYXJ2aWYtXHUwMDNlYWh2aWYtXHUwMDNldmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTgwMD1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfYmNuX3RtcGwoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xODM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxODM1Olx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoYXRoMTJrX2FyX3RvX2h3KHR4X2FydmlmLVx1MDAzZWFyKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTgzNi1cdFx0XHRcdFx0ICAgIHR4X2FydmlmLVx1MDAzZWFodmlmLVx1MDAzZXZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jPTE5Mzg9YXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jLTE5NDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jOjE5NTA6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMtMTk1MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmM9MTEyPXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoOWtfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYy0xMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmM6MTM4Olx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMtMTM5LVx0aWYgKHNrYiA9PSBOVUxMKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTE5MT1zdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTIxNy1cdC8qIEdldCBhIG5ldyBiZWFjb24gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjIxODpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yMTktXHRpZiAoIWJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jPTE2MTY9aW50IGNhcmw5MTcwX3VwZGF0ZV9iZWFjb24oc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IGJvb2wgc3VibWl0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jLTE2MjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYzoxNjMwOlx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFyLVx1MDAzZWh3LCBjYXJsOTE3MF9nZXRfdmlmKGN2aWYpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMtMTYzMS1cdFx0XHRcdCAgICAgICBOVUxMLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmM9Nzk5PXN0YXRpYyB2b2lkIHdjbjM2eHhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTM4LVx0XHRcdFx0XHQgICAgICAgdmlmLVx1MDAzZWFkZHIsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L21haW4uYzo5Mzk6XHRcdFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFx1MDAyNnRpbV9vZmYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTQwLVx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZ0aW1fbGVuLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jPTE4MjE9c3RhdGljIHZvaWQgYjQzX3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M193bCAqd2wpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL21haW4uYy0xODM1LVx0ICogU2ltcGx5IHJlcXVlc3QgYSBuZXcgYmVhY29uIGFuZCBsZXQgbWFjODAyMTEgZG8gdGhlIGhhcmQgd29yay4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9tYWluLmM6MTgzNjpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVx1MDAzZWh3LCB3bC1cdTAwM2V2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL21haW4uYy0xODM3LVx0aWYgKHVubGlrZWx5KCFiZWFjb24pKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9tYWluLmM9MTIzMj1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyhzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvbWFpbi5jLTEyNDMtXHQgKiBtYWM4MDIxMSBkbyB0aGUgaGFyZCB3b3JrLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYzoxMjQ0Olx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod2wtXHUwMDNlaHcsIHdsLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvbWFpbi5jLTEyNDUtXHRpZiAodW5saWtlbHkoIWJlYWNvbikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9NTg1PWJyY21zX29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTY4Mi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNndsLVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6NjgzOlx0XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHZpZiwgXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy02ODQtXHRcdGJyY21zX2Nfc2V0X25ld19iZWFjb24od2wtXHUwMDNld2xjLCBiZWFjb24sIHRpbV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9OTQ0PXN0YXRpYyBpbnQgYnJjbXNfb3BzX2JlYWNvbl9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTk1Mi1cdGlmICh3bC1cdTAwM2V3bGMtXHUwMDNldmlmKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6OTUzOlx0XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHdsLVx1MDAzZXdsYy1cdTAwM2V2aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy05NTQtXHRcdFx0XHRcdFx0ICBcdTAwMjZ0aW1fb2Zmc2V0LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2xlZ2FjeS9jb21tb24uYz01MjUyPWlsX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmMtNTI1Ni1cdF9fbGU2NCB0aW1lc3RhbXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2xlZ2FjeS9jb21tb24uYzo1MjU3Olx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmMtNTI1OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjY0PXN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjg2LVx0LyogUHVsbCB1cGRhdGVkIEFQIGJlYWNvbiBmcm9tIG1hYzgwMjExLiB3aWxsIGZhaWwgaWYgbm90IGluIEFQIG1vZGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoyODc6XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZWJlYWNvbl9jdHgtXHUwMDNldmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yODgtXHRpZiAoIWJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4b24uYz0xODA9c3RhdGljIGludCBpd2xhZ25fdXBkYXRlX2JlYWNvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jLTE4NS1cdGRldl9rZnJlZV9za2IocHJpdi1cdTAwM2ViZWFjb25fc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4b24uYzoxODY6XHRwcml2LVx1MDAzZWJlYWNvbl9za2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LVx1MDAzZWh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jLTE4Ny1cdGlmICghcHJpdi1cdTAwM2ViZWFjb25fc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FwLmM9MTU0PWludCBpd2xfbWxkX3VwZGF0ZV9iZWFjb25fdGVtcGxhdGUoc3RydWN0IGl3bF9tbGQgKm1sZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jLTE3OC0jZW5kaWZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FwLmM6MTc5Olx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobWxkLVx1MDAzZWh3LCB2aWYsIE5VTEwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jLTE4MC1cdFx0XHRcdFx0ICAgICAgIGxpbmtfY29uZi1cdTAwM2VsaW5rX2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmM9Njg3PV9pd2xfZGJnZnNfaW5qZWN0X2JlYWNvbl9pZShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2RlYnVnZnMuYy03MTctXHRcdHN0cnVjdCBza19idWZmICpiZWFjb24gPVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZGVidWdmcy5jOjcxODpcdFx0XHRpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtbGQtXHUwMDNlaHcsIHZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2RlYnVnZnMuYy03MTktXHRcdFx0XHRcdFx0ICAgICAgTlVMTCwgbGlua19pZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jPTEzMDk9c3RhdGljIGludCBfaXdsX2RiZ2ZzX2luamVjdF9iZWFjb25faWUoc3RydWN0IGl3bF9tdm0gKm12bSwgY2hhciAqYmluLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2RlYnVnZnMuYy0xMzQ5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jOjEzNTA6XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdm0tXHUwMDNlaHcsIHZpZiwgTlVMTCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kZWJ1Z2ZzLmMtMTM1MS1cdGlmICghYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM9MTE4MD1pbnQgaXdsX212bV9tYWNfY3R4dF9iZWFjb25fY2hhbmdlZChzdHJ1Y3QgaXdsX212bSAqbXZtLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMtMTE4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTE5MDpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKG12bS1cdTAwM2VodywgdmlmLCBOVUxMLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xMTkxLVx0XHRcdFx0XHQgICAgICAgbGlua19jb25mLVx1MDAzZWxpbmtfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9MTM1PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xNDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjE0MjpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0My1cdGlmICghYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jPTQxNz1zdGF0aWMgdm9pZCBsYnRmX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmMtNDI5LVx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYzo0MzA6XHRcdFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy00MzEtXHRcdFx0aWYgKGJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jPTY3OT12b2lkIGxidGZfYmNuX3NlbnQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy02OTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYzo2OTk6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy03MDAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2w4ay5jPTUxODI9bXdsOGtfYnNzX2luZm9fY2hhbmdlZF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmMtNTIyMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsOGsuYzo1MjIxOlx0XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsOGsuYy01MjIyLVx0XHRpZiAoc2tiICE9IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9iZWFjb24uYz0zMD1tdDc2MDNfdXBkYXRlX2JlYWNvbl9pdGVyKHZvaWQgKnByaXYsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MDMvYmVhY29uLmMtNDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9iZWFjb24uYzo0MjpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG10NzZfaHcoZGV2KSwgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jLTQzLVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9NjY3PW10NzYxNV9tY3VfYWRkX2JlYWNvbl9vZmZsb2FkKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtNzAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6NzAxOlx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXHUwMDI2b2ZmcywgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy03MDItXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0xMDM3PW10NzYxNV9tY3VfdW5pX2FkZF9iZWFjb25fb2ZmbG9hZChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEwODItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxMDgzOlx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobXQ3Nl9odyhkZXYpLCB2aWYsIFx1MDAyNm9mZnMsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTA4NC1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYz0xMzc9bXQ3NngwMl91cGRhdGVfYmVhY29uX2l0ZXIodm9pZCAqcHJpdiwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MDJfYmVhY29uLmMtMTQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDAyX2JlYWNvbi5jOjE0NzpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG10NzZfaHcoZGV2KSwgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYy0xNDgtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yMDU3PWludCBtdDc5MTVfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjA4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjIwODY6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcdTAwMjZvZmZzLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTIwODctXHRpZiAoIXNrYikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTEyNTA9bXQ3OTIxX21jdV91bmlfYWRkX2JlYWNvbl9vZmZsb2FkKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtMTI5OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjEyOTk6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdDc2X2h3KGRldiksIHZpZiwgXHUwMDI2b2ZmcywgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzAwLVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MjM4Mj1tdDc5MjVfbWN1X3VuaV9hZGRfYmVhY29uX29mZmxvYWQoc3RydWN0IG10NzkyeF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0yNDMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MjQzMjpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKG10NzZfaHcoZGV2KSwgdmlmLCBcdTAwMjZvZmZzLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTI0MzMtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYz0zMTYzPWludCBtdDc5OTZfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtMzE5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjMxOTE6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcdTAwMjZvZmZzLCBsaW5rX2NvbmYtXHUwMDNlbGlua19pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy0zMTkyLVx0aWYgKGVuYWJsZWQgXHUwMDI2XHUwMDI2ICFza2IpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxOS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQyMDpcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQyMS1cdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz00NDg9c3RhdGljIHZvaWQgbW04MXhfbWFjX2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTQ3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6NDcyOlx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobW9ycy1cdTAwM2VodywgdmlmLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTQ3My1cdGlmICghYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYz0xMTU9aW50IHBsZnhsY19yZXN0b3JlX3NldHRpbmdzKHN0cnVjdCBwbGZ4bGNfbWFjICptYWMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTEyOC1cdGlmIChtYWMtXHUwMDNldmlmKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6MTI5Olx0XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChtYWMtXHUwMDNlaHcsIG1hYy1cdTAwM2V2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTEzMC1cdFx0aWYgKGJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYz01ODA9c3RhdGljIHZvaWQgcGxmeGxjX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTU5Ni1cdGlmIChjaGFuZ2VzIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT04pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzo1OTc6XHRcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy01OTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jPTc0Mz1pbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JhbGluay9ydDJ4MDAvcnQyeDAwcXVldWUuYy03NTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvcnQyeDAwL3J0MngwMHF1ZXVlLmM6NzU4Olx0aW50Zi1cdTAwM2ViZWFjb24tXHUwMDNlc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocnQyeDAwZGV2LVx1MDAzZWh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jLTc1OS1cdGlmICghaW50Zi1cdTAwM2ViZWFjb24tXHUwMDNlc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTgwL2Rldi5jPTEyODM9c3RhdGljIHZvaWQgcnRsODE4MF9iZWFjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmMtMTI5Ny1cdC8qIGdyYWIgYSBmcmVzaCBiZWFjb24gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTgwL2Rldi5jOjEyOTg6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4MC9kZXYuYy0xMjk5LVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmM9MTA3NT1zdGF0aWMgdm9pZCBydGw4MTg3X2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYy0xMDg5LVx0LyogZ3JhYiBhIGZyZXNoIGJlYWNvbiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmM6MTA5MDpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldiwgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jLTEwOTEtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYz01NjEwPXN0YXRpYyB2b2lkIHJ0bDh4eHh1X3NlbmRfYmVhY29uX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsOHh4eHUvY29yZS5jLTU2MTMtXHRzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAqcHJpdiA9IGh3LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYzo1NjE0Olx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4eHh4dS9jb3JlLmMtNTYxNS1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNldWRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2NvcmUuYz05NzY9c3RhdGljIHZvaWQgc2VuZF9iZWFjb25fZnJhbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2NvcmUuYy05NzktXHRzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvY29yZS5jOjk4MDpcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9jb3JlLmMtOTgxLVx0c3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcGNpLmM9MTAyMT1zdGF0aWMgdm9pZCBfcnRsX3BjaV9wcmVwYXJlX2Jjbl90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcGNpLmMtMTA1NC1cdC8qTkI6IHRoZSBiZWFjb24gZGF0YSBidWZmZXIgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYzoxMDU1Olx0cHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCBtYWMtXHUwMDNldmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYy0xMDU2LVx0aWYgKCFwc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYz0xMjI2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnR3X2dldF9yc3ZkX3BhZ2Vfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYy0xMjUxLVx0Y2FzZSBSU1ZEX0JFQUNPTjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYzoxMjUyOlx0XHRza2JfbmV3ID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFx1MDAyNnRpbV9vZmZzZXQsIE5VTEwsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jLTEyNTMtXHRcdHJzdmRfcGt0LVx1MDAzZXRpbV9vZmZzZXQgPSB0aW1fb2Zmc2V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYz00Njk5PWludCBydHc4OV9md19oMmNfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jLTQ3MjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmM6NDcyNDpcdHNrYl9iZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0ocnR3ZGV2LVx1MDAzZWh3LCB2aWYsIFx1MDAyNnRpbV9vZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmMtNDcyNS1cdFx0XHRcdFx0ICAgICAgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jPTQ3Nzk9aW50IHJ0dzg5X2Z3X2gyY191cGRhdGVfYmVhY29uX2JlKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2Rldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmMtNDgwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYzo0ODAzOlx0c2tiX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShydHdkZXYtXHUwMDNlaHcsIHZpZiwgXHUwMDI2dGltX29mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYy00ODA0LVx0XHRcdFx0XHQgICAgICBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz00MjU9aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ0Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0NDc6XHRtYWNfYmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFkYXB0ZXItXHUwMDNlaHcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NDgtXHRcdFx0XHRcdCAgIHZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jPTMyMT1zdGF0aWMgaW50IHdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHN0cnVjdCB3ZnhfdmlmICp3dmlmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtMzI1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYzozMjY6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLVx1MDAzZXdkZXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTMyNy1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9MzQwPXN0YXRpYyBpbnQgd2Z4X3NldF9tZnBfYXAoc3RydWN0IHdmeF92aWYgKnd2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYy0zNDItXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd3ZpZl90b192aWYod3ZpZik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jOjM0MzpcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLVx1MDAzZXdkZXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTM0NC1cdGNvbnN0IGludCBpZW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9NTg4PXN0YXRpYyBpbnQgd2Z4X3VwZGF0ZV90aW0oc3RydWN0IHdmeF92aWYgKnd2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYy01OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jOjU5NTpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSh3dmlmLVx1MDAzZXdkZXYtXHUwMDNlaHcsIHZpZiwgXHUwMDI2dGltX29mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtNTk2LVx0XHRcdFx0ICAgICAgIFx1MDAyNnRpbV9sZW5ndGgsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYz0xNjY0PXN0YXRpYyBpbnQgY3cxMjAwX3NldF90aW1faW1wbChzdHJ1Y3QgY3cxMjAwX2NvbW1vbiAqcHJpdiwgYm9vbCBhaWQwX2JpdF9zZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jLTE2NzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvc3RhLmM6MTY3NTpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZXZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0xNjc2LVx0XHRcdFx0ICAgICAgIFx1MDAyNnRpbV9vZmZzZXQsIFx1MDAyNnRpbV9sZW5ndGgsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYz0yMTg5PXN0YXRpYyBpbnQgY3cxMjAwX3VwbG9hZF9iZWFjb24oc3RydWN0IGN3MTIwMF9jb21tb24gKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jLTIyMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvc3RhLmM6MjIwODpcdGZyYW1lLnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZXZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0yMjA5LVx0XHRcdFx0XHQgICAgIFx1MDAyNnRpbV9vZmZzZXQsIFx1MDAyNnRpbV9sZW4sIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmM9MTA3OD1zdGF0aWMgdm9pZCB3bDEyNTFfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jLTExODktXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jOjExOTA6XHRcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxMjUxL21haW4uYy0xMTkxLVx0XHRpZiAoIWJlYWNvbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jPTQxMTc9c3RhdGljIGludCB3bGNvcmVfc2V0X2JlYWNvbl90ZW1wbGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTQxMjUtXHRpbnQgaWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmM6NDEyNjpcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldCh3bC1cdTAwM2VodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMtNDEyNy1cdHUxNiB0bXBsX2lkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmM9NTU2Mz1zdGF0aWMgY29uc3Qgdm9pZCAqd2xjb3JlX2dldF9iZWFjb25faWUoc3RydWN0IHdsMTI3MSAqd2wsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL21haW4uYy01NTY4LVx0c3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jOjU1Njk6XHRcdGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVx1MDAzZWh3LCB3bDEyeHhfd2x2aWZfdG9fdmlmKHdsdmlmKSwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTU1NzAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MjQ1Nz1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9iZWFjb25fdHgodm9pZCAqYXJnLCB1OCAqbWFjLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTI0ODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoyNDg5Olx0XHRlbWEgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdChodywgdmlmLCBsaW5rX2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTI0OTAtXHRcdGlmICghZW1hIHx8ICFlbWEtXHUwMDNlY250KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTI0OTktXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MjUwMDpcdFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgbGlua19pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNTAxLVx0XHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYz0zNTc9aW50IHpkX3Jlc3RvcmVfc2V0dGluZ3Moc3RydWN0IHpkX21hYyAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTQwMC1cdFx0aWYgKG1hYy1cdTAwM2V2aWYgIT0gTlVMTCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM6NDAxOlx0XHRcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1hYy1cdTAwM2VodywgbWFjLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy00MDItXHRcdFx0aWYgKGJlYWNvbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYz0xMTUxPXN0YXRpYyB2b2lkIHpkX2JlYWNvbl9kb25lKHN0cnVjdCB6ZF9tYWMgKm1hYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xMTcyLVx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYzoxMTczOlx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobWFjLVx1MDAzZWh3LCBtYWMtXHUwMDNldmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTExNzQtXHRpZiAoYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jPTEyODE9c3RhdGljIHZvaWQgemRfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xMjk1LVx0XHRpZiAoY2hhbmdlcyBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYzoxMjk2Olx0XHRcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTI5Ny1cdFx0XHRcdFx0XHRcdFx0ICAgICAgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM9MTQzMT1zdGF0aWMgdm9pZCBiZWFjb25fd2F0Y2hkb2dfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTQ1OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jOjE0NTk6XHRcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1hYy1cdTAwM2VodywgbWFjLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xNDYwLVx0XHRpZiAoYmVhY29uKSB7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD00MDY4PXN0cnVjdCBpZWVlODAyMTFfcHJlcF90eF9pbmZvIHtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTQ1OTQtICpcdGRlY3JlbWVudGVkLCBhbmQgd2hlbiB0aGV5IHJlYWNoIDEgdGhlIGRyaXZlciBtdXN0IGNhbGxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NDU5NTogKlx0aWVlZTgwMjExX2NzYV9maW5pc2goKS4gRHJpdmVycyB3aGljaCB1c2UgaWVlZTgwMjExX2JlYWNvbl9nZXQoKVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC00NTk2LSAqXHRnZXQgdGhlIGNzYSBjb3VudGVyIGRlY3JlbWVudGVkIGJ5IG1hYzgwMjExLCBidXQgbXVzdCBjaGVjayBpZiBpdCBpc1xuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NTc1NT1zdHJ1Y3QgaWVlZTgwMjExX211dGFibGVfb2Zmc2V0cyB7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzYzLS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NzY0OiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlIC0gYmVhY29uIHRlbXBsYXRlIGdlbmVyYXRpb24gZnVuY3Rpb25cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc2NS0gKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS5cbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU3ODQ9c3RydWN0IHNrX2J1ZmYgKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1Nzg1OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01Nzg2LVx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzkwLS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NzkxOiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9pbmRleCAtIEVNQSBiZWFjb24gdGVtcGxhdGUgZ2VuZXJhdGlvblxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzkyLSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc5OC0gKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1Nzk5OiAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgc2FtZSBydWxlcyBhcyBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZSgpXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4MDAtICogYnV0IHJldHVybnMgYSBiZWFjb24gdGVtcGxhdGUgd2hpY2ggaW5jbHVkZXMgbXVsdGlwbGUgQlNTSUQgZWxlbWVudCBhdCB0aGVcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4MDU9c3RydWN0IHNrX2J1ZmYgKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODA2OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgwNy1cdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4MjA9c3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyB7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODI4LS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODI5OiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0IC0gRU1BIGJlYWNvbiB0ZW1wbGF0ZSBnZW5lcmF0aW9uXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4MzAtICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODMzLSAqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4MzQ6ICogVGhpcyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKClcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzNS0gKiBidXQgYWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBsaXN0IG9mIGFsbCBiZWFjb24gdGVtcGxhdGVzIHJlcXVpcmVkXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODQ0PXN0cnVjdCBpZWVlODAyMTFfZW1hX2JlYWNvbnMgKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODQ1OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODQ2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODUzLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmcmVlIGEgbGlzdCBwcmV2aW91c2x5IGFjcXVpcmVkIGJ5IGNhbGxpbmdcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg1NDogKiBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCgpXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4NTUtICovXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4NTY9dm9pZCBpZWVlODAyMTFfYmVhY29uX2ZyZWVfZW1hX2xpc3Qoc3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqZW1hX2JlYWNvbnMpO1xuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg1OC0vKipcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg1OTogKiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0gLSBiZWFjb24gZ2VuZXJhdGlvbiBmdW5jdGlvblxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODYwLSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg4MS0gKi9cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg4MjpzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODgzLVx0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4ODctLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4ODg6ICogaWVlZTgwMjExX2JlYWNvbl9nZXQgLSBiZWFjb24gZ2VuZXJhdGlvbiBmdW5jdGlvblxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODg5LSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg5My0gKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk0OiAqIFNlZSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oKS5cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg5NS0gKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk2OiAqIFJldHVybjogU2VlIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSgpLlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODk3LSAqL1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk4OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9iZWFjb25fZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODk5LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01OTAxLXtcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTkwMjpcdHJldHVybiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHZpZiwgTlVMTCwgTlVMTCwgbGlua19pZCk7XG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU5MDMtfVxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkxMS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbXBsaWNpdGx5IHdoZW5cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTkxMjogKiBpZWVlODAyMTFfYmVhY29uX2dldC9pZWVlODAyMTFfYmVhY29uX2dldF90aW0gYXJlIGNhbGxlZCwgaG93ZXZlciBpZiB0aGVcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkxMy0gKiBiZWFjb24gZnJhbWVzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGRldmljZSwgdGhlIGRyaXZlciBzaG91bGQgY2FsbCB0aGlzXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD02MTI5PV9fbGUxNiBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTYxNDktICogTm90ZTogYnVmZmVyZWQgZnJhbWVzIGFyZSByZXR1cm5lZCBvbmx5IGFmdGVyIERUSU0gYmVhY29uIGZyYW1lIHdhc1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo2MTUwOiAqIGdlbmVyYXRlZCB3aXRoIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgYW5kIHRoZSBsb3ctbGV2ZWwgZHJpdmVyIG11c3QgdGh1c1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo2MTUxOiAqIGNhbGwgaWVlZTgwMjExX2JlYWNvbl9nZXQoKSBmaXJzdC4gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYygpIHJldHVybnNcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNjE1Mi0gKiBOVUxMIGlmIHRoZSBwcmV2aW91cyBnZW5lcmF0ZWQgYmVhY29uIHdhcyBub3QgRFRJTSwgc28gdGhlIGxvdy1sZXZlbCBkcml2ZXJcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0xNDQ4PXN0cnVjdCBpZWVlODAyMTFfbG9jYWwge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE1MDgtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNTA5Olx0Ym9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTEwLVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTUyMDk9c3RhdGljIGludCBpZWVlODAyMTFfYmVhY29uX2FkZF90aW0oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNTIxNy1cdCAqIE5vdCB2ZXJ5IG5pY2UsIGJ1dCB3ZSB3YW50IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gY2FsbFxubmV0L21hYzgwMjExL3R4LmM6NTIxODpcdCAqIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgYXMgYSByZXNwb25zZSB0byB0aGUgc2V0X3RpbSgpXG5uZXQvbWFjODAyMTEvdHguYy01MjE5LVx0ICogY2FsbGJhY2suIFRoYXQsIGhvd2V2ZXIsIGlzIGFscmVhZHkgaW52b2tlZCB1bmRlciB0aGVcbi0tXG5uZXQvbWFjODAyMTEvdHguYz01NTA5PXN0YXRpYyB2b2lkXG5uZXQvbWFjODAyMTEvdHguYzo1NTEwOmllZWU4MDIxMV9iZWFjb25fZ2V0X2ZpbmlzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbm5ldC9tYWM4MDIxMS90eC5jLTU1MTEtXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NTU5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L21hYzgwMjExL3R4LmM6NTU5NjpfX2llZWU4MDIxMV9iZWFjb25fZ2V0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL3R4LmMtNTU5Ny1cdFx0XHQgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNTY1OC1cbm5ldC9tYWM4MDIxMS90eC5jOjU2NTk6XHRpZWVlODAyMTFfYmVhY29uX2dldF9maW5pc2goaHcsIHZpZiwgbGluaywgb2ZmcywgYmVhY29uLCBza2IsXG5uZXQvbWFjODAyMTEvdHguYy01NjYwLVx0XHRcdFx0ICAgIGNoYW5jdHhfY29uZiwgY3NhX29mZl9iYXNlKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz01Njc4PWllZWU4MDIxMV9zMWdfc2hvcnRfYmVhY29uX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy01NzAzLVxubmV0L21hYzgwMjExL3R4LmM6NTcwNDpcdGllZWU4MDIxMV9iZWFjb25fZ2V0X2ZpbmlzaChodywgdmlmLCBsaW5rLCBOVUxMLCBOVUxMLCBza2IsXG5uZXQvbWFjODAyMTEvdHguYy01NzA1LVx0XHRcdFx0ICAgIGNoYW5jdHhfY29uZiwgMCk7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NTcwOT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L21hYzgwMjExL3R4LmM6NTcxMDppZWVlODAyMTFfYmVhY29uX2dldF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbm5ldC9tYWM4MDIxMS90eC5jLTU3MTEtXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNTcyMC1cdCAgICBpZWVlODAyMTFfczFnX25lZWRfbG9uZ19iZWFjb24oc2RhdGEsIGxpbmspKVxubmV0L21hYzgwMjExL3R4LmM6NTcyMTpcdFx0cmV0dXJuIF9faWVlZTgwMjExX2JlYWNvbl9nZXRfYXAoaHcsIHZpZiwgbGluaywgb2Zmcyxcbm5ldC9tYWM4MDIxMS90eC5jLTU3MjItXHRcdFx0XHRcdFx0IGlzX3RlbXBsYXRlLCBiZWFjb24sXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NTcyOT1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqXG5uZXQvbWFjODAyMTEvdHguYzo1NzMwOmllZWU4MDIxMV9iZWFjb25fZ2V0X2FwX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL3R4LmMtNTczMS1cdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI4MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCZWFjb24gRnJhbWUgVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbiwgd2hpY2ggc2VlbXMgdG8gaGFuZGxlIHNldHRpbmcgdXAgdGhlIGJlYWNvbiBmcmFtZSBmb3IgdGhpcyBVU0IgV2ktRmkgZG9uZ2xlLiAgSSBjYW4gc2VlIHRoYXQgaXQgdXNlcyBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIHRvIGdyYWIgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIGNvbnRhaW5pbmcgdGhlIGJlYWNvbiBkYXRhLiBUaGUgZ29vZCBuZXdzIGlzLCBhY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnRzLCBtYWM4MDIxMSBmdWxseSBpbml0aWFsaXplcyB0aGF0IGBza2JgLCB3aGljaCBpcyBhIHBsdXMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBJIHNlZSBhIHNlY3Rpb24gd2hlcmUgaXQgc2VlbXMgdG8gYWRkIGEgaGVhZGVyLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBlbm91Z2ggaGVhZHJvb20gaXMgYXZhaWxhYmxlLCB0aGVuIGBza2JfcHVzaGAgdG8gbW92ZSB0aGUgZGF0YSBwb2ludGVyIGJhY2ssIGFuZCBgbWVtc2V0YCB0byBpbml0aWFsaXplIHRoaXMgbmV3IGBtdDc2X3R4d2lgIGhlYWRlci4gVGhhdCBhbGwgc2VlbXMgc3RhbmRhcmQsIHB1c2hpbmcgdGhlIHRyYW5zbWl0IFdpLUZpIGluZm9ybWF0aW9uIGludG8gdGhlIGBza2JgLiBUaGVuLCBpdCBjYWxjdWxhdGVzIGhvdyBtYW55IDMyLWJpdCB3b3JkcyBhcmUgaW4gdGhlIGBza2JgIHVzaW5nIGBESVZfUk9VTkRfVVBgLiBUaGF0IGNhbGN1bGF0aW9uIGlzIHdoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogaWYgdGhlIG9yaWdpbmFsIGJlYWNvbiBkYXRhIChwbHVzIHRoZSBoZWFkZXIpIGRvZXNuJiMzOTt0IHJlc3VsdCBpbiBhIGxlbmd0aCB0aGF0JiMzOTtzIGEgbXVsdGlwbGUgb2YgNCBieXRlcywgYERJVl9ST1VORF9VUGAgd2lsbCByb3VuZCB1cC4gVGhpcyBtZWFucyB0aGUgYnVyc3Qgd3JpdGUsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLCB3aWxsIHJlYWQgKnBhc3QqIHRoZSBpbnRlbmRlZCBkYXRhIGFuZCBwb3RlbnRpYWxseSBpbnRvIHRoZSBgc2tiYCYjMzk7cyB0YWlscm9vbS4gTXkgZ3V0IGlzIHRlbGxpbmcgbWUgdGhpcyBpcyBhbiBpc3N1ZS4KClRoZSBgc2tiYCBkYXRhIGlzIGFuIGFycmF5IG9mIGJ5dGVzLiBgc2tiLSZndDtsZW5gIHRlbGxzIHVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGluaXRpYWxpemVkIGRhdGEuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYHNrYmAgaGF2ZSB0YWlscm9vbT8gQW5kLCBpZiBzbywgYXJlIHRob3NlIHRhaWxyb29tIGJ5dGVzIGluaXRpYWxpemVkPyBMaWtlbHksIHRoZSB0YWlscm9vbSBleGlzdHMsIGJ1dCB0aGUgYnl0ZXMgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4KCklmIGl0IHJlYWRzIHBhc3QgYHNrYi0mZ3Q7bGVuYCwgdGhpcyBtZWFucyBpdCYjMzk7cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAodGhlIGBza2JgIHRhaWxyb29tKSBhbmQgc2VuZGluZyBpdCBvdmVyIFVTQiB0byB0aGUgV2ktRmkgZG9uZ2xlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBpbmZvLWxlYWsuIFRoaXMgaXMgYSBwb3RlbnRpYWwga2VybmVsIG1lbW9yeSBsZWFrLCBhbiBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHZ1bG5lcmFiaWxpdHkhCgpCdXQgdGhlbiBJIHJlY2FsbCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBLTVNBTiBzaG91bGQgZGV0ZWN0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHJlYWRzIHBhc3QgdGhlIGluaXRpYWxpemVkIGRhdGEsIEtNU0FOICpzaG91bGQqIGZsYWcgaXQgYXMgYSB1c2Utb2YtdW5pbml0aWFsaXplZC1tZW1vcnkgZXJyb3IuCgpPa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGtub3cgaG93IGl0IGhhbmRsZXMgdGhlIHdvcmQgY291bnQgYW5kIHRoZSBkYXRhIHBvaW50ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XHRcdFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxuIDI0MTpcdHtcbiAyNDI6XHRcdGNvbnN0IGludCBtYXhfcmVnc19wZXJfY21kID0gSU5CQU5EX1BBQ0tFVF9NQVhfTEVOIC8gNCAtIDE7XG4gMjQzOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDI0NDpcdFx0aW50IGNudCwgaSwgcmV0O1xuIDI0NTpcdFxuIDI0NjpcdFx0aWYgKCFuKVxuIDI0NzpcdFx0XHRyZXR1cm4gMDtcbiAyNDg6XHRcbiAyNDk6XHRcdGNudCA9IG1pbihtYXhfcmVnc19wZXJfY21kLCBuKTtcbiAyNTA6XHRcbiAyNTE6XHRcdHNrYiA9IGFsbG9jX3NrYihjbnQgKiA0ICYjNDM7IE1UX0RNQV9IRFJfTEVOICYjNDM7IDQsIEdGUF9LRVJORUwpO1xuIDI1MjpcdFx0aWYgKCFza2IpXG4gMjUzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI1NDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBNVF9ETUFfSERSX0xFTik7XG4gMjU1Olx0XG4gMjU2Olx0XHRza2JfcHV0X2xlMzIoc2tiLCBNVF9NQ1VfTUVNTUFQX1dMQU4gJiM0Mzsgb2Zmc2V0KTtcbiAyNTc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspXG4gMjU4Olx0XHRcdHNrYl9wdXRfbGUzMihza2IsIGRhdGFbaV0pO1xuIDI1OTpcdFxuIDI2MDpcdFx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xuIDI2MTpcdFx0aWYgKHJldClcbiAyNjI6XHRcdFx0cmV0dXJuIHJldDtcbiAyNjM6XHRcbiAyNjQ6XHRcdHJldHVybiBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBvZmZzZXQgJiM0MzsgY250ICogNCxcbiAyNjU6XHRcdFx0XHRcdFx0ZGF0YSAmIzQzOyBjbnQsIG4gLSBjbnQpO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHRzdHJ1Y3QgbXQ3Nl9md19oZWFkZXIge1xuIDI2OTpcdFx0X19sZTMyIGlsbV9sZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTI5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFZ1bG5lcmFiaWxpdHkgaW4gQmVhY29uIEZyYW1lIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzYwMXVgIGRyaXZlciBjb2RlIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZvdW5kIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlLiBJdCYjMzk7cyBpbiB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBiZWFjb24gZnJhbWUgc2V0dXAgaW4gYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLgoKV2hhdCYjMzk7cyBoYXBwZW5pbmcgaXMgdGhpczogdGhlIGNvZGUgaXMgaXRlcmF0aW5nIHRocm91Z2ggYSBkYXRhIGJ1ZmZlciAoYGRhdGFgKSBhbmQgd3JpdGluZyAzMi1iaXQgdmFsdWVzIHRvIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApIHVzaW5nIGBza2JfcHV0X2xlMzJgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBkYXRhYCBpcyBlc3NlbnRpYWxseSBhIHBvaW50ZXIgdG8gdGhlIGBza2ItJmd0O2RhdGFgLCBhbmQgaWYgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgYmVhY29uIGZyYW1lIChgc2tiLSZndDtsZW5gKSBpc24mIzM5O3QgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLCB0aGVuIHRoZSBsYXN0IHJlYWQgb2YgYGRhdGFbaV1gIHdpbGwgYmUgcmVhZGluZyBieXRlcyBiZXlvbmQgdGhlIGluaXRpYWxpemVkIHNlY3Rpb24gb2YgdGhlIGJ1ZmZlci4KCk5vdywgYHNrYmBzIGFsbG9jYXRlZCBieSBtYWM4MDIxMSB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tLCB0aGF0IGlzLCBleHRyYSBidWZmZXIgc3BhY2UgYWxsb2NhdGVkIGFmdGVyIHRoZSAmIzM0O3ZhbGlkJiMzNDsgZGF0YS4gU28sIHdoaWxlIHRoZSByZWFkcyB3b3VsZCBmYWxsIHdpdGhpbiBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29udGVudHMgb2YgdGhhdCB0YWlscm9vbSBhcmUgdW5pbml0aWFsaXplZCBieXRlcy4gV2hlbiBgc2tiX3B1dF9sZTMyYCByZWFkcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGFuZCB3cml0ZXMgdGhlbSB0byB0aGUgbmV3IGBza2JgLCB0aGUgbmV3IGBza2JgIGlzIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UgdmlhIGBtdDc2MDF1X21jdV9tc2dfc2VuZGAuIFRoaXMgY3JlYXRlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGNvbmRpdGlvbi4KCkluaXRpYWxseSwgSSB3b25kZXJlZCBpZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB3b3VsZCBjYXRjaCB0aGlzLiBLQVNBTiBjYXRjaGVzIG91dC1vZi1ib3VuZHMgcmVhZHMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIHJlYWQgc3RheXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIChpbmNsdWRpbmcgdGFpbHJvb20pLCBLQVNBTiB3b24mIzM5O3QgZmxhZyBpdC4gQnV0LCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIHRyYWNrcyBieXRlLWxldmVsIGluaXRpYWxpemF0aW9uLiBTaW5jZSB0aGUgYnl0ZXMgaW4gdGhlIHRhaWxyb29tIGFyZSB1bmluaXRpYWxpemVkLCBLTVNBTiB3aWxsIGFic29sdXRlbHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZmluZC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBza2ItJmd0O2xlbmAgaXNuJiMzOTt0IGFsd2F5cyBhIG11bHRpcGxlIG9mIDQ7IHRoZSBiZWFjb24gZnJhbWUmIzM5O3MgbGVuZ3RoIGRlcGVuZHMgb24gSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgc28gaXQmIzM5O3Mgbm90IGd1YXJhbnRlZWQuIFRoZW4sIEkgbG9va2VkIGF0IGhvdyBgc2tiYCBpcyBhbGxvY2F0ZWQgd2l0aCBgc2tiX2Nvd19oZWFkYC4gSSBzZWUgbm93IHRoYXQgYHNrYl9jb3dfaGVhZGAgbWlnaHQgcmVhbGxvY2F0ZSB0aGUgc2tiIGlmIHRoZXJlIGlzbiYjMzk7dCBlbm91Z2ggaGVhZHJvb20uIElmIGl0IHJlYWxsb2NhdGVzLCB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ5dGVzIGFyZSB1bmluaXRpYWxpemVkLiBJZiBpdCBkb2VzbiYjMzk7dCByZWFsbG9jYXRlLCB0aGVuIHRoZSB0YWlscm9vbSBpcyBhbHNvIHVuaW5pdGlhbGl6ZWQuIFNvLCByZWFkaW5nIHVwIHRvIGBESVZfUk9VTkRfVVAoc2tiLSZndDtsZW4sIDQpICogNGAgYnl0ZXMgd2lsbCByZWFkIDEtMyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKSSBhbHNvIGNoZWNrZWQgb3RoZXIgZnVuY3Rpb25zLiBJbiBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIGl0IGFwcGVhcnMgdGhhdCB0aGUgYHR4d2lgIHN0cnVjdCBpcyBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXRgLCBzbyB0aGF0JiMzOTtzIG5vdCBhIHByb2JsZW0uCgpGaW5hbGx5LCBJIGNoZWNrZWQgYG10NzYwMXVfc3RhcnRfYXBgLiBJIG5vdGljZWQgYG10NzYwMXVfbWFjX3djaWRfc2V0dXBgIHRha2VzIGBOVUxMYCBmb3IgYG1hY2AuIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCBpcyBoYW5kbGVkIHRvIHNlZSBpZiBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBpc3N1ZXMgbWlnaHQgc3VyZmFjZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTM3NT12b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjM3NjptdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTM3Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MTk5PXN0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0yMDgtXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgMTI4OyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjIwOTpcdFx0bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChkZXYsIGksIDAsIE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTI1OT1tdDc2MDF1X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjc3LVx0bXN0YS1cdTAwM2V3Y2lkLmh3X2tleV9pZHggPSAtMTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjI3ODpcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpZHgsIG12aWYtXHUwMDNlaWR4LCBzdGEtXHUwMDNlYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0yNzktXHRtdDc2X2NsZWFyKGRldiwgTVRfV0NJRF9EUk9QKGlkeCksIE1UX1dDSURfRFJPUF9NQVNLKGlkeCkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTI5MD1tdDc2MDF1X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMzAwLVx0ZGV2LVx1MDAzZXdjaWRfbWFza1tpZHggLyBCSVRTX1BFUl9MT05HXSBcdTAwMjY9IH5CSVQoaWR4ICUgQklUU19QRVJfTE9ORyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzozMDE6XHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaWR4LCAwLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTMwMi1cdG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3IoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaD0zNjQ9dm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg6MzY1Om10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zNjYtdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MTUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBtdDc2MDF1X21hY193Y2lkX3NldHVwYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2xsZXIpIHNldHVwIGlzIGhhbmRsZWQgZm9yIHRoZSBNVDc2MDFVIGNoaXBzZXQsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSB3Y2lkIChXaXJlbGVzcyBDbGllbnQgSUQpIGNvbnRleHQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgYXNzb2NpYXRpb25zIGJldHdlZW4gYSBzdGF0aW9uIGFuZCB0aGUgZHJpdmVyIGFyZSBtYW5hZ2VkIGFuZCBob3cgdGhlIE1BQyBpcyBjb25maWd1cmVkLCBwcm9iYWJseSB3aXRoIHNvbWUgcmVnaXN0ZXIgd3JpdGVzIHRvIHNldCB1cCBrZXkgc2VjdXJpdHkgcGFyYW1ldGVycywgYWRkcmVzcyBmaWx0ZXJzLCBhbmQgdHJhbnNtaXQvcmVjZWl2ZSBxdWV1ZSBtYXBwaW5ncyBiYXNlZCBvbiB0aGUgd2NpZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG51YW5jZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBhcyB0aGUgTVQ3NjAxVSBpcyBhIHNvbWV3aGF0IG9sZGVyIGNoaXBzZXQsIGFuZCBob3cgdGhpcyBjb2RlIGFjY291bnRzIGZvciBwb3RlbnRpYWwgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB0YWtpbmcgYSBkaXJlY3QgYXBwcm9hY2ggb3IgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlcm5lc3MgaW4gaGFuZGxpbmcgdGhlIHZhcmlvdXMgc3RhdGVzIG9mIHRoZSB3Y2lkLCBsaWtlIGluaXRpYWxpemluZyBpdCwgaGFuZGxpbmcgYXV0aGVudGljYXRpb24sIGFzc29jaWF0aW9uLCBhbmQgZGF0YSB0cmFuc2Zlci4gSSB3YW50IHRvIHNlZSB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMgYXJlIGJlaW5nIHRvdWNoZWQgYW5kIHdoYXQgdGhlIHJhdGlvbmFsZSBpcyBiZWhpbmQgZWFjaCBvZiB0aGUgdmFsdWVzLiBBbHNvLCBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFzIGNsZWFyIGVudHJ5IHBvaW50cyBhbmQgZXhpdHMsIGFuZCB0aGF0IGl0JiMzOTtzIHJvYnVzdCBpbiBoYW5kbGluZyBlcnJvciBjb25kaXRpb25zLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGlzIGlzIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24gd2l0aCBwbGVudHkgb2Ygb3Bwb3J0dW5pdHkgZm9yIHN1YnRsZSBidWdzLiBJJiMzOTtsbCBtZW50YWxseSBjb21wYXJlIHRoaXMgd2l0aCBzaW1pbGFyIGZ1bmN0aW9ucyBJJiMzOTt2ZSBsb29rZWQgYXQgaW4gb3RoZXIgZHJpdmVycyBhbmQgc2VlIGhvdyB0aGlzIG1lYXN1cmVzIHVwIGluIHRlcm1zIG9mIGNsYXJpdHkgYW5kIGVmZmljaWVuY3kuIEZpbmFsbHksIEkmIzM5O2xsIGFsc28gbG9vayBmb3IgY29tbWVudHMsIGFzIHRoZXkgd2lsbCB1bmRvdWJ0ZWRseSBiZSB1c2VmdWwgdG8gZ2V0IGEgcHJvcGVyIGNvbnRleHQgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc1Olx0dm9pZFxuIDM3NjpcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYylcbiAzNzc6XHR7XG4gMzc4Olx0XHR1OCB6bWFjW0VUSF9BTEVOXSA9IHt9O1xuIDM3OTpcdFx0dTMyIGF0dHI7XG4gMzgwOlx0XG4gMzgxOlx0XHRhdHRyID0gRklFTERfUFJFUChNVF9XQ0lEX0FUVFJfQlNTX0lEWCwgdmlmX2lkeCBcdTAwMjYgNykgfFxuIDM4MjpcdFx0ICAgICAgIEZJRUxEX1BSRVAoTVRfV0NJRF9BVFRSX0JTU19JRFhfRVhULCAhISh2aWZfaWR4IFx1MDAyNiA4KSk7XG4gMzgzOlx0XG4gMzg0Olx0XHRtdDc2X3dyKGRldiwgTVRfV0NJRF9BVFRSKGlkeCksIGF0dHIpO1xuIDM4NTpcdFxuIDM4NjpcdFx0aWYgKG1hYylcbiAzODc6XHRcdFx0bWVtY3B5KHptYWMsIG1hYywgc2l6ZW9mKHptYWMpKTtcbiAzODg6XHRcbiAzODk6XHRcdG10NzYwMXVfYWRkcl93cihkZXYsIE1UX1dDSURfQUREUihpZHgpLCB6bWFjKTtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0dm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIDM5MzpcdHtcbiAzOTQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTA0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrIGluIEJlYWNvbiBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cGAgZnVuY3Rpb24gaGFuZGxlcyBgbWFjID09IE5VTExgIGNhc2VzIGdyYWNlZnVsbHkgdXNpbmcgYSB6ZXJvLWluaXRpYWxpemVkIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uLiBMZXQmIzM5O3MgcmV2aXNpdCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuCgpUaGUgY29yZSBpc3N1ZSBpcyBpbiBob3cgdGhlIGJlYWNvbiBmcmFtZSBpcyB3cml0dGVuIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLiBUaGUgY2FsY3VsYXRpb24gYHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi0mZ3Q7bGVuLCA0KWAgaXMga2V5LiBXZSYjMzk7cmUgZGl2aWRpbmcgdGhlIGxlbmd0aCBvZiB0aGUgKmVudGlyZSogYHNrYmAgKGluY2x1ZGluZyB0aGUgYHN0cnVjdCBtdDc2X3R4d2lgIGhlYWRlciwgd2hpY2ggd2Uga25vdyBpcyAyNCBieXRlcyBhbmQgYSBtdWx0aXBsZSBvZiA0KSBieSA0IGFuZCByb3VuZGluZyB1cC4gVGhlIGJlYWNvbiBmcmFtZSBpdHNlbGYgaXMgY29uc3RydWN0ZWQgYnkgbWFjODAyMTEuIENydWNpYWxseSwgdGhlIGxlbmd0aCBvZiA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMsIGVzcGVjaWFsbHkgYmVhY29ucywgY2FuIGJlICphcmJpdHJhcnkqLCBiZWNhdXNlIG9mIHRoZSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgZnJhbWUuCgpUaGVyZWZvcmUsIGBza2ItJmd0O2xlbmAgaXMgKm5vdCogZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gSWYgaXQmIzM5O3MgKm5vdCogYSBtdWx0aXBsZSBvZiA0LCB0aGVuIGB3b3JkcyAqIDRgIHdpbGwgYmUgdXAgdG8gYHNrYi0mZ3Q7bGVuICYjNDM7IDNgLiBUaGlzIG1lYW5zIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHJlYWRzIHVwIHRvIDMgYnl0ZXMgYmV5b25kIHRoZSAmIzM5O2VuZCYjMzk7IG9mIHRoZSBhY3R1YWwgYmVhY29uIGRhdGEsIHdoaWNoIGFyZSBieXRlcyBmcm9tIHRoZSB0YWlscm9vbSBvZiB0aGUgYHNrYmAuIFRoZSBgc2tiYCBpcyBhbGxvY2F0ZWQgYnkgYGllZWU4MDIxMV9iZWFjb25fZ2V0YCBhbmQgdXN1YWxseSBjb250YWlucyB0YWlscm9vbS4KClRoZSBmdW5jdGlvbiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCByZWFkcyAzMi1iaXQgaW50ZWdlcnMgZnJvbSB0aGUgYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlci4gSWYgYHNrYi0mZ3Q7bGVuYCBpc24mIzM5O3QgYSBtdWx0aXBsZSBvZiA0LCB0aGUgbGFzdCAzMi1iaXQgcmVhZCB3aWxsIGluY2x1ZGUgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIHRoZSB0YWlscm9vbS4gVGhpcyB1bmluaXRpYWxpemVkIGRhdGEgaXMgdGhlbiBzZW50IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLiBUaGlzIGlzIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgbWVtb3J5IHRvIGEgaGFyZHdhcmUgZGV2aWNlIQoKS01TQU4gKnNob3VsZCogY2F0Y2ggdGhpcywgYmVjYXVzZSBpdCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtBU0FOICp3b24mIzM5O3QqIGRldGVjdCB0aGlzLCBiZWNhdXNlIHRoZSByZWFkIGlzIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGBza2JgIGJ1ZmZlci4KClRoZXJlJiMzOTtzIG5vIHBhZGRpbmcgYWRkZWQgdG8gdGhlIGRhdGEgYmV0d2VlbiB0aGUgdHh3aSBhbmQgdGhlIGJlYWNvbiBmcmFtZS4gYHNrYl9wdXRfbGUzMmAgcmVhZHMgZGlyZWN0bHkgZnJvbSB0aGUgYGRhdGFbaV1gLiBTbyBgc2tiLSZndDtkYXRhYCBpcyByZWFkIHVwIHRvIGB3b3JkcyAqIDRgIGJ5dGVzLgoKU28sIHRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBidWcgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0OiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgYHNrYmAgdGFpbHJvb20pIGFuZCB0cmFuc21pdHRpbmcgaXQgdG8gYSBoYXJkd2FyZSBkZXZpY2UgKHZpYSBVU0IpLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IEtNU0FOIGhhbmRsZXMgVVNCIHRyYW5zZmVycy4gWWVzLCBLTVNBTiBob29rcyBpbnRvIGB1c2Jfc3VibWl0X3VyYmAgdmlhIGBrbXNhbl9oYW5kbGVfdXJiYCBhbmQgY2FuIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyISBBbmQgYG10NzYwMXVfbWN1X21zZ19zZW5kYCBzZW5kcyB0aGUgYHNrYmAgdmlhIFVTQi4gVGhpcyBjb25maXJtcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4gV2UmIzM5O3ZlIGdvdCBpdC4gVGhpcyBpcyBhIHNvbGlkIHVzZSBjYXNlIGZvciBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9tY3VfbXNnX3NlbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xMDk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoxMTA6bXQ3NjAxdV9tY3VfbXNnX3NlbmQoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTExMS1cdFx0ICAgICBlbnVtIG1jdV9jbWQgY21kLCBib29sIHdhaXRfcmVzcClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jPTE1NT1zdGF0aWMgaW50IG10NzYwMXVfbWN1X2Z1bmN0aW9uX3NlbGVjdChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTE2OS1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjE3MDpcdHJldHVybiBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0ZVTl9TRVRfT1AsIGZ1bmMgPT0gNSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTE3MS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xOTM9bXQ3NjAxdV9tY3VfY2FsaWJyYXRlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBlbnVtIG1jdV9jYWxpYnJhdGUgY2FsLCB1MzIgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjA2LVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjA3Olx0cmV0dXJuIG10NzYwMXVfbWN1X21zZ19zZW5kKGRldiwgc2tiLCBDTURfQ0FMSUJSQVRJT05fT1AsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMDgtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM9MjEwPWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjIzMjpcdHJldCA9IG10NzYwMXVfbWN1X21zZ19zZW5kKGRldiwgc2tiLCBDTURfUkFORE9NX1dSSVRFLCBjbnQgPT0gbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTIzMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMzk9aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTI1OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjYwOlx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNjEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjExNwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYwMVUgTUNVIE1lc3NhZ2UgU2VuZGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZXNzYWdlcyBhcmUgZ2V0dGluZyBzZW50IHRvIHRoZSBNQ1Ugb24gdGhlIE1UNzYwMVUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBtdDc2MDF1X21jdV9tc2dfc2VuZGAuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbWN1LmNgIGZpbGUgYW5kIHBpbnBvaW50IHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLCBoYW5kbGluZyBhbnkgYnVmZmVyaW5nLCBhbmQsIGNydWNpYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0Igb3Igd2hhdGV2ZXIgaW50ZXJmYWNlIGlzIHVzZWQgdG8gYWN0dWFsbHkgdHJhbnNtaXQgdGhpcyBkYXRhLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleGVzIG9yIHNlbWFwaG9yZXMgZm9yIHN5bmNocm9uaXphdGlvbiwgYW55IGVycm9yIGhhbmRsaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlcyBvciBVU0IgY2FsbHMgdGhhdCBpbml0aWF0ZSB0aGUgdHJhbnNmZXIuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBtZXNzYWdlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA5Olx0c3RhdGljIGludFxuIDExMDpcdG10NzYwMXVfbWN1X21zZ19zZW5kKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDExMTpcdFx0XHQgICAgIGVudW0gbWN1X2NtZCBjbWQsIGJvb2wgd2FpdF9yZXNwKVxuIDExMjpcdHtcbiAxMTM6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gbXQ3NjAxdV90b191c2JfZGV2KGRldik7XG4gMTE0Olx0XHR1bnNpZ25lZCBjbWRfcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LFxuIDExNTpcdFx0XHRcdFx0XHQgICAgZGV2LVx1MDAzZW91dF9lcHNbTVRfRVBfT1VUX0lOQkFORF9DTURdKTtcbiAxMTY6XHRcdGludCBzZW50LCByZXQ7XG4gMTE3Olx0XHR1OCBzZXEgPSAwO1xuIDExODpcdFxuIDExOTpcdFx0aWYgKHRlc3RfYml0KE1UNzYwMVVfU1RBVEVfUkVNT1ZFRCwgXHUwMDI2ZGV2LVx1MDAzZXN0YXRlKSkge1xuIDEyMDpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIDEyMTpcdFx0XHRyZXR1cm4gMDtcbiAxMjI6XHRcdH1cbiAxMjM6XHRcbiAxMjQ6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1jdS5tdXRleCk7XG4gMTI1Olx0XG4gMTI2Olx0XHRpZiAod2FpdF9yZXNwKVxuIDEyNzpcdFx0XHR3aGlsZSAoIXNlcSlcbiAxMjg6XHRcdFx0XHRzZXEgPSAmIzQzOyYjNDM7ZGV2LVx1MDAzZW1jdS5tc2dfc2VxIFx1MDAyNiAweGY7XG4gMTI5Olx0XG4gMTMwOlx0XHRtdDc2MDF1X2RtYV9za2Jfd3JhcF9jbWQoc2tiLCBzZXEsIGNtZCk7XG4gMTMxOlx0XG4gMTMyOlx0XHRpZiAoZGV2LVx1MDAzZW1jdS5yZXNwX2NtcGwuZG9uZSlcbiAxMzM6XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtFcnJvcjogTUNVIHJlc3BvbnNlIHByZS1jb21wbGV0ZWQhXFxuXCYjMzQ7KTtcbiAxMzQ6XHRcbiAxMzU6XHRcdHRyYWNlX210X21jdV9tc2dfc2VuZF9jcyhkZXYsIHNrYiwgd2FpdF9yZXNwKTtcbiAxMzY6XHRcdHRyYWNlX210X3N1Ym1pdF91cmJfc3luYyhkZXYsIGNtZF9waXBlLCBza2ItXHUwMDNlbGVuKTtcbiAxMzc6XHRcdHJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCBjbWRfcGlwZSwgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4sIFx1MDAyNnNlbnQsIDUwMCk7XG4gMTM4Olx0XHRpZiAocmV0KSB7XG4gMTM5Olx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RXJyb3I6IHNlbmQgTUNVIGNtZCBmYWlsZWQ6JWRcXG5cJiMzNDssIHJldCk7XG4gMTQwOlx0XHRcdGdvdG8gb3V0O1xuIDE0MTpcdFx0fVxuIDE0MjpcdFx0aWYgKHNlbnQgIT0gc2tiLVx1MDAzZWxlbilcbiAxNDM6XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtFcnJvcjogJXMgc2VudCAhPSBza2ItXHUwMDNlbGVuXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAod2FpdF9yZXNwKVxuIDE0NjpcdFx0XHRyZXQgPSBtdDc2MDF1X21jdV93YWl0X3Jlc3AoZGV2LCBzZXEpO1xuIDE0NzpcdG91dDpcbiAxNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbWN1Lm11dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMDkKCQkJCQkJCW91dHB1dDogMzQ0CgkJCQkJCQl0aG91Z2h0czogMTk4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTi1EZXRlY3RhYmxlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsgaW4gQmVhY29uIFRyYW5zbWlzc2lvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTt2ZSBmb3VuZC4gVGhlIHByaW1hcnkgY29uY2VybiBsaWVzIHdpdGhpbiBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLCBzcGVjaWZpY2FsbHkgaG93IGl0IHV0aWxpemVzIGB1c2JfYnVsa19tc2dgIHRvIHRyYW5zbWl0IGRhdGEgZnJvbSBhbiBgc2tiYCB0byB0aGUgVVNCIGRldmljZS4gSSBzZWUgdGhhdCBgdXNiX2J1bGtfbXNnYCB0YWtlcyBgc2tiLSZndDtkYXRhYCBhbmQgYHNrYi0mZ3Q7bGVuYC4gVGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGVtZXJnZXMgZHVyaW5nIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBjYWxsIHdpdGhpbiB0aGUgYmVhY29uIHNldHRpbmcgbWVjaGFuaXNtLgoKVGhlIGNvZGUgaXRlcmF0ZXMsIGNvcHlpbmcgZGF0YSBpbnRvIGEgbmV3IGBza2JgIHZpYSBgc2tiX3B1dF9sZTMyYCwgcmVhZGluZyBmcm9tIGBkYXRhW2ldYCwgd2hlcmUgYGRhdGFgIHBvaW50cyB0byB0aGUgYmVhY29uIGBza2ItJmd0O2RhdGFgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBgRElWX1JPVU5EX1VQKHNrYi0mZ3Q7bGVuLCA0KWAgY2FsY3VsYXRpb24uIElmIGBza2ItJmd0O2xlbmAgaXNuJiMzOTt0IGEgbXVsdGlwbGUgb2YgNCwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgYWN0dWFsIGluaXRpYWxpemVkIGRhdGEgaW4gdGhlIGBza2JgLCBwb3RlbnRpYWxseSBpbnRvIHRoZSB1bmluaXRpYWxpemVkIHRhaWxyb29tLiBgS01TQU5gIGlzIGNyaXRpY2FsIGhlcmU7IGl0IHdpbGwgdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSB0YWlscm9vbSBtZW1vcnksIGFuZCB0aHVzIHdpbGwgZGV0ZWN0IHRoZSBwcm9ibGVtLiBgS0FTQU5gIGlzIHVubGlrZWx5IHRvIGNhdGNoIHRoaXMgc2luY2UgdGhlIHJlYWQgaXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlZ2lvbiwgdGh1cyBubyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4mIzM5O3MgaW5zdHJ1bWVudGF0aW9uIG9mIGB1c2JfYnVsa19tc2dgIHdpbGwgdHJpZ2dlciBhbiBpbmZvLWxlYWsgcmVwb3J0LgoKSSBkb3VibGUtY2hlY2tlZCBvdGhlciBwb3RlbnRpYWwgYXJlYXMgbGlrZSBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCwgYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYHNrYjJxYCwgdG8gYmUgc3VyZS4gTm9uZSBvZiB0aGVtIHNob3cgYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgdnVsbmVyYWJpbGl0eS4gVGhleSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIG9yIHRoZXJlIGFyZSBjbGVhciBib3VuZHMsIGVuc3VyaW5nIGBLQVNBTmAgd291bGQgY2F0Y2ggYW55IE9PQiByZWFkcy4KClNvLCB0aGUgY3J1eCBpcyBpbiBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEEgYmVhY29uIHNrYiBpcyBhbGxvY2F0ZWQgKHRocm91Z2ggYGllZWU4MDIxMV9iZWFjb25fZ2V0YCksIGFuZCBpdHMgbGVuZ3RoIGlzIHVzZWQgaW4gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIHJvdW5kIHVwIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGF0IGFyZSB0byBiZSB3cml0dGVuLiBUaGlzIGxlbmd0aCBtaWdodCBub3QgYmUgYSBtdWx0aXBsZSBvZiA0LgoKVGhlIGNvbmNsdXNpb24gaXMgdGhhdCB3ZSYjMzk7cmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBgc2tiYCB0YWlscm9vbSBhbmQgc2VuZGluZyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZ2AuIFRoaXMgbWVtb3J5IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSB0YWlscm9vbSwgd2hpY2ggaXMgdW5pbml0aWFsaXplZCB3aGVuIGFsbG9jYXRlZC4gS01TQU4gZXhjZWxzIGF0IGNhdGNoaW5nIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gYmVjYXVzZSBpdCB0cmFja3MgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIG1lbW9yeSBhbmQgaG9va3MgYHVzYl9idWxrX21zZ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIGRvZXNuJiMzOTt0IGd1YXJhbnRlZSBhIG11bHRpcGxlLW9mLTQgbGVuZ3RoLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBhIHJlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHNrYiBkb2VzIG5vdCB6ZXJvIHRoZSB0YWlscm9vbSwgY29uZmlybWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBwb3RlbnRpYWxseSByZWFkLiBUaGlzIGluZGljYXRlcyBhIHN0cm9uZyBjYXNlIGZvciBhIEtNU0FOLWZvY3VzZWQgZnV6emluZyBzZXNzaW9uLiBUaGUgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIHB1c2hlcyBhIGBzdHJ1Y3QgbXQ3Nl90eHdpYCB0byB0aGUgc2tiIGFuZCB6ZXJvZXMgaXQgdmlhIGBtZW1zZXRgLCBhdm9pZGluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB0aGVyZS4KClRoZSBpc3N1ZSBib2lscyBkb3duIHRvIHRoZSBgRElWX1JPVU5EX1VQKHNrYi0mZ3Q7bGVuLCA0KWAgcmVhZCwgYW5kIEkgd2lsbCBiZSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgIGFuZCBzdXBwbHlpbmcgdGhpcyByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYG10NzYwMXVfbWFjX3NldF9iZWFjb24oKWAsIHdoaWNoIHJldHJpZXZlcyBhIGJlYWNvbiBza2IgdXNpbmcgYGllZWU4MDIxMV9iZWFjb25fZ2V0KClgLiBJdCB0aGVuIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdG8gd3JpdGUgdG8gdGhlIGRldmljZSB1c2luZyBgRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpYCBhbmQgcGFzc2VzIGBza2ItXHUwMDNlZGF0YWAgdG8gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYC5cblxuQmVjYXVzZSA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMgY2FuIGhhdmUgYXJiaXRyYXJ5IGxlbmd0aHMsIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdoZW4gYHNrYi1cdTAwM2VsZW5gIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAgd2lsbCByZWFkIHVwIHRvIDMgYnl0ZXMgcGFzdCBgc2tiLVx1MDAzZWxlbmAuIFNpbmNlIHNrYiBidWZmZXJzIHR5cGljYWxseSBoYXZlIHNvbWUgdGFpbHJvb20gKG1lbW9yeSB0aGF0IGlzIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCksIHRoaXMgcmVhZCB3aWxsIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIGFsbG9jYXRpb24uIEFzIGEgcmVzdWx0LCBLQVNBTiB3aWxsIE5PVCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXG5cbkhvd2V2ZXIsIHRoaXMgb3BlcmF0aW9uIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIHNrYiB0YWlscm9vbSBhbmQgc3Vic2VxdWVudGx5IHNlbmRzIGl0IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgdXNiX2J1bGtfbXNnKClgIChjYWxsZWQgYnkgYG10NzYwMXVfbWN1X21zZ19zZW5kKClgKS4gS01TQU4gdHJhY2tzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhdCB0aGUgYnl0ZSBsZXZlbCBhbmQgaG9va3MgaW50byBVU0IgVVJCIHN1Ym1pc3Npb25zLCBtYWtpbmcgaXQgdW5pcXVlbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBrZXJuZWwgbWVtb3J5IGluZm8tbGVhayB0byB0aGUgaGFyZHdhcmUgZGV2aWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXG5cbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OToyMi43MjgyOTEwMTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzMzY5ODY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3NjAxVVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzYwMXVfbWFjX3NldF9iZWFjb25cIixcbiAgICBcIm10NzYwMXVfbWFjX2NvbmZpZ190c2ZcIixcbiAgICBcIm10NzYwMXVfc3RhcnRfYXBcIixcbiAgICBcIm10NzYwMXVfc3RvcF9hcFwiLFxuICAgIFwibXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXFx1MDAzZWxlbiwgNClgIGFuZCBwYXNzZXMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYC5cXG5cXG5CZWNhdXNlIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyBjYW4gaGF2ZSBhcmJpdHJhcnkgbGVuZ3RocywgYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdoZW4gYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cXHUwMDNlbGVuYC4gU2luY2Ugc2tiIGJ1ZmZlcnMgdHlwaWNhbGx5IGhhdmUgc29tZSB0YWlscm9vbSAobWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkKSwgdGhpcyByZWFkIHdpbGwgc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGlvbi4gQXMgYSByZXN1bHQsIEtBU0FOIHdpbGwgTk9UIGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cXG5cXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWUsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyLiBJdCBtb2RpZmllcyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6MjIuNzI4Mjk5MjQxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE2MzQ0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDE1IDEzOjQ5OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcXG5pbmRleCA1ZDllOTUyYjI5NjY0Li5lODcxZjdiNjNjYjM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcXG5AQCAtMTIsNiArMTIsMjUgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJpbml0dmFscy5oXFxcIlxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7XFxuK1xcdHsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfSxcXG4rXFx0eyAubWF4ID0gOCxcXG4rXFx0ICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfFxcbisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG4rXFx0XFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcXG4rI2VuZGlmXFxuK1xcdFxcdCAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHxcXG4rXFx0XFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gaWZfY29tYltdID0geyB7XFxuK1xcdC5saW1pdHMgPSBpZl9saW1pdHMsXFxuK1xcdC5uX2xpbWl0cyA9IEFSUkFZX1NJWkUoaWZfbGltaXRzKSxcXG4rXFx0Lm1heF9pbnRlcmZhY2VzID0gMixcXG4rXFx0Lm51bV9kaWZmZXJlbnRfY2hhbm5lbHMgPSAxLFxcbitcXHQuYmVhY29uX2ludF9pbmZyYV9tYXRjaCA9IHRydWUsXFxuK30gfTtcXG4rXFxuIHN0YXRpYyB2b2lkXFxuIG10NzYwMXVfc2V0X3dsYW5fc3RhdGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiB2YWwsIGJvb2wgZW5hYmxlKVxcbiB7XFxuQEAgLTU5OSw2ICs2MTgsNyBAQCBpbnQgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuIFxcdGllZWU4MDIxMV9od19zZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTtcXG4gXFx0aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpO1xcbiBcXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBNRlBfQ0FQQUJMRSk7XFxuK1xcdGllZWU4MDIxMV9od19zZXQoaHcsIE5FRURTX1VOSVFVRV9TVEFfQUREUik7XFxuIFxcdGh3LVxcdTAwM2VtYXhfcmF0ZXMgPSAxO1xcbiBcXHRody1cXHUwMDNlbWF4X3JlcG9ydF9yYXRlcyA9IDc7XFxuIFxcdGh3LVxcdTAwM2VtYXhfcmF0ZV90cmllcyA9IDE7XFxuQEAgLTYwNyw5ICs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbiBcXHRody1cXHUwMDNldmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpO1xcbiBcXG4gXFx0U0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi1cXHUwMDNlbWFjYWRkcik7XFxuLVxcbitcXHR3aXBoeS1cXHUwMDNlaW50ZXJmYWNlX21vZGVzID1cXG4rXFx0XFx0QklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8XFxuKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbitcXHRcXHRCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfFxcbisjZW5kaWZcXG4rXFx0XFx0QklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxcbitcXHRcXHRCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpO1xcbitcXHR3aXBoeS1cXHUwMDNlaWZhY2VfY29tYmluYXRpb25zID0gaWZfY29tYjtcXG4rXFx0d2lwaHktXFx1MDAzZW5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRShpZl9jb21iKTtcXG4gXFx0d2lwaHktXFx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9BQ1RJVkVfTU9OSVRPUjtcXG4tXFx0d2lwaHktXFx1MDAzZWludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTtcXG4gXFx0d2lwaHktXFx1MDAzZWZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUztcXG4gXFxuIFxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9DUU1fUlNTSV9MSVNUKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcXG5pbmRleCBjYTljZjYyOGViMTBkLi41ZTJkZWMxMzEzMzFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXFxuQEAgLTExOCwxOSArMTE4LDI3IEBAIHUxNiBtdDc2X21hY190eF9yYXRlX3ZhbChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcXG4gXFx0XFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSClcXG4gXFx0XFx0XFx0YncgPSAxO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnI7XFxuLVxcdFxcdGludCBiYW5kID0gZGV2LVxcdTAwM2VjaGFuZGVmLmNoYW4tXFx1MDAzZWJhbmQ7XFxuLVxcdFxcdHUxNiB2YWw7XFxuLVxcbi1cXHRcXHRyID0gXFx1MDAyNmRldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2ViYW5kc1tiYW5kXS1cXHUwMDNlYml0cmF0ZXNbcmF0ZS1cXHUwMDNlaWR4XTtcXG4tXFx0XFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcXG4tXFx0XFx0XFx0dmFsID0gci1cXHUwMDNlaHdfdmFsdWVfc2hvcnQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0dmFsID0gci1cXHUwMDNlaHdfdmFsdWU7XFxuIFxcbi1cXHRcXHRwaHkgPSB2YWwgXFx1MDAzZVxcdTAwM2UgODtcXG4tXFx0XFx0cmF0ZV9pZHggPSB2YWwgXFx1MDAyNiAweGZmO1xcbi1cXHRcXHRidyA9IDA7XFxuK1xcdFxcdGludCBiYW5kID0gZGV2LVxcdTAwM2VjaGFuZGVmLmNoYW4tXFx1MDAzZWJhbmQ7XFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID1cXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWJhbmRzW2JhbmRdO1xcbitcXG4rXFx0XFx0aWYgKHJhdGUtXFx1MDAzZWlkeCBcXHUwMDNjIDAgfHwgcmF0ZS1cXHUwMDNlaWR4IFxcdTAwM2U9IHNiYW5kLVxcdTAwM2VuX2JpdHJhdGVzKSB7XFxuK1xcdFxcdFxcdHBoeSA9IE1UX1BIWV9UWVBFX0NDSztcXG4rXFx0XFx0XFx0cmF0ZV9pZHggPSAwO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPVxcbitcXHRcXHRcXHRcXHRcXHUwMDI2c2JhbmQtXFx1MDAzZWJpdHJhdGVzW3JhdGUtXFx1MDAzZWlkeF07XFxuK1xcdFxcdFxcdHUxNiB2YWw7XFxuK1xcbitcXHRcXHRcXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxcbitcXHRcXHRcXHRcXHR2YWwgPSByLVxcdTAwM2Vod192YWx1ZV9zaG9ydDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHR2YWwgPSByLVxcdTAwM2Vod192YWx1ZTtcXG4rXFxuK1xcdFxcdFxcdHBoeSA9IHZhbCBcXHUwMDNlXFx1MDAzZSA4O1xcbitcXHRcXHRcXHRyYXRlX2lkeCA9IHZhbCBcXHUwMDI2IDB4ZmY7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmF0ZXZhbCA9IEZJRUxEX1BSRVAoTVRfUlhXSV9SQVRFX01DUywgcmF0ZV9pZHgpO1xcbkBAIC0yNjQsMTMgKzI3MiwxMyBAQCB2b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpXFxuIFxcdFxcdG10NzZfY2xlYXIoZGV2LCBNVF9BVVRPX1JTUF9DRkcsIE1UX0FVVE9fUlNQX1BSRUFNQl9TSE9SVCk7XFxuIH1cXG4gXFxuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcXG4rdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbitcXHRcXHRcXHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcXG4ge1xcbiBcXHR1MzIgdmFsID0gbXQ3NjAxdV9ycihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyk7XFxuIFxcbi1cXHR2YWwgXFx1MDAyNj0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfFxcbi1cXHRcXHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XFxuLVxcdFxcdCBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTik7XFxuK1xcdHZhbCBcXHUwMDI2PSB+KE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxcbitcXHRcXHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcXG4gXFxuIFxcdGlmICghZW5hYmxlKSB7XFxuIFxcdFxcdG10NzYwMXVfd3IoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsIHZhbCk7XFxuQEAgLTI3OSw5ICsyODcsMjIgQEAgdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxcbiBcXG4gXFx0dmFsIFxcdTAwMjY9IH5NVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMO1xcbiBcXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMLCBpbnRlcnZhbCBcXHUwMDNjXFx1MDAzYyA0KSB8XFxuLVxcdFxcdE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8XFxuLVxcdFxcdE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxcbi1cXHRcXHRNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTjtcXG4rXFx0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xcbitcXG4rXFx0LyogQVAgTW9kZSAqL1xcbitcXHRpZiAodmlmIFxcdTAwMjZcXHUwMDI2ICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcXG4rXFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9QMlBfR08pKVxcbitcXHRcXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAzKSB8XFxuK1xcdFxcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xcbitcXHQvKiBJQlNTIC8gQWQtSG9jIE1vZGUgKi9cXG4rXFx0ZWxzZSBpZiAodmlmIFxcdTAwMjZcXHUwMDI2IHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQylcXG4rXFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMikgfFxcbitcXHRcXHQgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWDtcXG4rXFx0LyogU3RhdGlvbiBtb2RlICovXFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMSk7XFxuK1xcbitcXHRtdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtdDc2MDF1X2NoZWNrX21hY19lcnIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuQEAgLTM5Myw2ICs0MTQsMzggQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbiBcXHRcXHQgICBGSUVMRF9QUkVQKE1UX01BWF9MRU5fQ0ZHX0FNUERVLCBtaW5fZmFjdG9yKSk7XFxuIH1cXG4gXFxuK2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtXFx1MDAzZWh3LCB2aWYsIDApO1xcbitcXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xcbitcXHRpbnQgZXJyLCB3b3JkcztcXG4rXFxuK1xcdGlmICghc2tiKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovXFxuK1xcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHR0eHdpID0gKHN0cnVjdCBtdDc2X3R4d2kgKilza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XFxuK1xcdG1lbXNldCh0eHdpLCAwLCBzaXplb2YoKnR4d2kpKTtcXG4rXFxuK1xcdHR4d2ktXFx1MDAzZXdjaWQgPSAwO1xcbitcXHR0eHdpLVxcdTAwM2VsZW5fY3RsID0gY3B1X3RvX2xlMTYoc2tiLVxcdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpO1xcbitcXHR0eHdpLVxcdTAwM2VyYXRlX2N0bCA9IGNwdV90b19sZTE2KDApO1xcbitcXG4rXFx0d29yZHMgPSBESVZfUk9VTkRfVVAoc2tiLVxcdTAwM2VsZW4sIDQpO1xcbitcXHRlcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIChjb25zdCB1MzIgKilza2ItXFx1MDAzZWRhdGEsIHdvcmRzKTtcXG4rXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gbXQ3Nl9tYWNfcHJvY2Vzc19yYXRlKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsIHUxNiByYXRlKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXFxuaW5kZXggNTRiZDRmYWM1NGQ4My4uNTI4NzU2Y2NmNDcyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxcbkBAIC0xNjcsNSArMTY3LDYgQEAgc3RydWN0IG10NzZfdHhfc3RhdHVzXFxuIG10NzYwMXVfbWFjX2ZldGNoX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XFxuIHZvaWQgbXQ3Nl9zZW5kX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IG10NzZfdHhfc3RhdHVzICpzdGF0KTtcXG4gdm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XFxuLVxcbitpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXFxuaW5kZXggMDViYTQzZTE5ODVjOC4uNDM4OWUzMzJkZmUxOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXFxuQEAgLTE0OSw3ICsxNDksNyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdCAqXFx0IHJ0MngwMCBkb2Vzbid0IHNlZW0gdG8gYmUgYm90aGVyZWQgdGhvdWdoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVxcdTAwM2Vic3NpZCkpXFxuLVxcdFxcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCBmYWxzZSwgMCk7XFxuK1xcdFxcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykge1xcbkBAIC0xNjEsNyArMTYxLDIwIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKVxcbi1cXHRcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdHJ1ZSwgaW5mby1cXHUwMDNlYmVhY29uX2ludCk7XFxuK1xcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGluZm8tXFx1MDAzZWJlYWNvbl9pbnQpO1xcbitcXG4rXFx0aWYgKChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSBcXHUwMDI2XFx1MDAyNiB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXFxuK1xcdFxcdG10NzYwMXVfbWFjX3NldF9iZWFjb24oZGV2LCB2aWYsIGluZm8pO1xcbitcXG4rXFx0aWYgKChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWVuYWJsZV9iZWFjb24pXFxuK1xcdFxcdFxcdG10NzZfc2V0KGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLFxcbitcXHRcXHRcXHRcXHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyxcXG4rXFx0XFx0XFx0XFx0ICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfSFQgfHwgY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVClcXG4gXFx0XFx0bXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oZGV2LCBpbmZvLVxcdTAwM2V1c2VfY3RzX3Byb3QsXFxuQEAgLTE4Myw2ICsxOTYsNDMgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbXV0ZXgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4rXFxuK1xcdC8qIENsZWFyIHRoZSB3Y2lkIFRhYmxlICovXFxuK1xcdGZvciAoaW50IGkgPSAxOyBpIFxcdTAwM2MgMTI4OyBpKyspXFxuK1xcdFxcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTtcXG4rXFxuK1xcdC8qIFNldCBwcmUgVEJUVCB0byA2bXMgKi9cXG4rXFx0bXQ3Nl9ybXdfZmllbGQoZGV2LCBNVF9JTlRfVElNRVJfQ0ZHLCBNVF9JTlRfVElNRVJfQ0ZHX1BSRV9UQlRULCA2KTtcXG4rXFx0bXQ3Nl9zZXQoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XFxuK1xcbitcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBsaW5rX2NvbmYtXFx1MDAzZWJlYWNvbl9pbnQpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZilcXG4re1xcbitcXHRzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtdXRleCk7XFxuK1xcbitcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XFxuK1xcbitcXHRtdDc2X2NsZWFyKGRldiwgTVRfSU5UX1RJTUVSX0VOLCBNVF9JTlRfVElNRVJfRU5fUFJFX1RCVFRfRU4pO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiBtdDc2X3djaWRfYWxsb2Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuIHtcXG5AQCAtNDE5LDYgKzQ2OSw4IEBAIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzYwMXVfb3BzID0ge1xcbiBcXHQuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsXFxuIFxcdC5jb25maWd1cmVfZmlsdGVyID0gbXQ3Nl9jb25maWd1cmVfZmlsdGVyLFxcbiBcXHQuYnNzX2luZm9fY2hhbmdlZCA9IG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZCxcXG4rXFx0LnN0YXJ0X2FwID0gbXQ3NjAxdV9zdGFydF9hcCxcXG4rXFx0LnN0b3BfYXAgPSBtdDc2MDF1X3N0b3BfYXAsXFxuIFxcdC5zdGFfYWRkID0gbXQ3NjAxdV9zdGFfYWRkLFxcbiBcXHQuc3RhX3JlbW92ZSA9IG10NzYwMXVfc3RhX3JlbW92ZSxcXG4gXFx0LnN0YV9ub3RpZnkgPSBtdDc2MDF1X3N0YV9ub3RpZnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcXG5pbmRleCAxMThkNDM3MDc4NTM3Li43MzY2ZTFjNDc2MzM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcXG5AQCAtMzU5LDcgKzM1OSw4IEBAIHZvaWQgbXQ3NjAxdV9tYWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGxlZ2FjeV9wcm90LFxcbiBcXHRcXHRcXHRcXHRpbnQgaHRfbW9kZSk7XFxuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYik7XFxuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XFxuK3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpO1xcbiB2b2lkXFxuIG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7XFxuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xcbmluZGV4IDVhZWVhYzBkZDlmZTcuLjQ3Yzc4YzRmZjUxNDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXFxuQEAgLTI3LDYgKzI3LDE0IEBAIHN0YXRpYyB1OCBxMmh3cSh1OCBxKVxcbiBzdGF0aWMgdTggc2tiMnEoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRpbnQgcWlkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuK1xcdCAgICAoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkge1xcbitcXHRcXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pO1xcbitcXHRcXHRyZXR1cm4gcTJod3EoTVRfVFhRX1ZPKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKFdBUk5fT04ocWlkIFxcdTAwM2U9IE1UX1RYUV9QU0QpKSB7XFxuIFxcdFxcdHFpZCA9IE1UX1RYUV9CRTtcXG5AQCAtMTM0LDYgKzE0Miw5IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSA9IFxcdTAwMjZpbmZvLVxcdTAwM2Vjb250cm9sLnJhdGVzWzBdO1xcbiBcXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXHRib29sIGlzX21nbXQgPSBpZWVlODAyMTFfaXNfbWdtdChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbitcXHRib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLVxcdTAwM2VhZGRyMSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGJvb2wgaXNfcHJvYmU7XFxuIFxcdHUzMiBwa3RfaWQ7XFxuQEAgLTE0OCwxNCArMTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlY29udHJvbC5yYXRlcywgMSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdGlmIChyYXRlLVxcdTAwM2VpZHggXFx1MDAzYyAwIHx8ICFyYXRlLVxcdTAwM2Vjb3VudClcXG4rXFx0aWYgKCFpc19tZ210IFxcdTAwMjZcXHUwMDI2IChyYXRlLVxcdTAwM2VpZHggXFx1MDAzYyAwIHx8ICFyYXRlLVxcdTAwM2Vjb3VudCkpXFxuIFxcdFxcdHJhdGVfY3RsID0gd2NpZC1cXHUwMDNldHhfcmF0ZTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyYXRlX2N0bCA9IG10NzZfbWFjX3R4X3JhdGVfdmFsKGRldiwgcmF0ZSwgXFx1MDAyNm5zcyk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHR0eHdpLVxcdTAwM2VyYXRlX2N0bCA9IGNwdV90b19sZTE2KHJhdGVfY3RsKTtcXG4gXFxuLVxcdGlmICghKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKVxcbitcXHRpZiAoIShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSBcXHUwMDI2XFx1MDAyNiBzdGEgXFx1MDAyNlxcdTAwMjYgIWlzX21jYXN0KVxcbiBcXHRcXHR0eHdpLVxcdTAwM2VhY2tfY3RsIHw9IE1UX1RYV0lfQUNLX0NUTF9SRVE7XFxuIFxcdGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSlcXG4gXFx0XFx0dHh3aS1cXHUwMDNlYWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTtcXG5AQCAtMTk3LDYgKzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxcbiBcXHRzdHJ1Y3QgbXQ3Nl9zdGEgKm1zdGEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gZGV2LVxcdTAwM2Vtb25fd2NpZDtcXG4gXFx0c3RydWN0IG10NzZfdHh3aSAqdHh3aTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlYWRkcjEpO1xcbiBcXHRpbnQgcGt0X2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRpbnQgaHdfcSA9IHNrYjJxKHNrYik7XFxuIFxcbkBAIC0yMTEsNyArMjI0LDcgQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXFxuIFxcdGlmIChzdGEpIHtcXG4gXFx0XFx0bXN0YSA9IChzdHJ1Y3QgbXQ3Nl9zdGEgKikgc3RhLVxcdTAwM2VkcnZfcHJpdjtcXG4gXFx0XFx0d2NpZCA9IFxcdTAwMjZtc3RhLVxcdTAwM2V3Y2lkO1xcbi1cXHR9IGVsc2UgaWYgKHZpZikge1xcbitcXHR9IGVsc2UgaWYgKHZpZiBcXHUwMDI2XFx1MDAyNiBpc19tY2FzdCkge1xcbiBcXHRcXHRzdHJ1Y3QgbXQ3Nl92aWYgKm12aWYgPSAoc3RydWN0IG10NzZfdmlmICopdmlmLVxcdTAwM2VkcnZfcHJpdjtcXG4gXFxuIFxcdFxcdHdjaWQgPSBcXHUwMDI2bXZpZi1cXHUwMDNlZ3JvdXBfd2NpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6MjMuNDQwNzI0NDUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzE2MTgwMTI5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3NjAxVVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzYwMXVfbWFjX3NldF9iZWFjb25cIixcbiAgICBcIm10NzYwMXVfbWFjX2NvbmZpZ190c2ZcIixcbiAgICBcIm10NzYwMXVfc3RhcnRfYXBcIixcbiAgICBcIm10NzYwMXVfc3RvcF9hcFwiLFxuICAgIFwibXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIG1vZGVzIHRvIHRoZSBtdDc2MDF1IFVTQiB3aXJlbGVzcyBkcml2ZXIuIEl0IG1vZGlmaWVzIG1hYzgwMjExIGNhbGxiYWNrcyB0byBoYW5kbGUgYmVhY29uIHNldHVwLCBUU0YgY29uZmlndXJhdGlvbiwgYW5kIEFQIHN0YXJ0L3N0b3Agb3BlcmF0aW9ucy4gU2luY2UgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGRldmljZXMgKHZoY2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTM6NDk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXG5pbmRleCA1ZDllOTUyYjI5NjY0Li5lODcxZjdiNjNjYjM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXG5AQCAtMTIsNiArMTIsMjUgQEBcbiBcbiAjaW5jbHVkZSBcImluaXR2YWxzLmhcIlxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IGlmX2xpbWl0c1tdID0ge1xuK1x0eyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB9LFxuK1x0eyAubWF4ID0gOCxcbitcdCAgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHxcbisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbitcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcbisjZW5kaWZcbitcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxuK1x0XHQgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpZl9jb21iW10gPSB7IHtcbitcdC5saW1pdHMgPSBpZl9saW1pdHMsXG4rXHQubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlmX2xpbWl0cyksXG4rXHQubWF4X2ludGVyZmFjZXMgPSAyLFxuK1x0Lm51bV9kaWZmZXJlbnRfY2hhbm5lbHMgPSAxLFxuK1x0LmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLFxuK30gfTtcbitcbiBzdGF0aWMgdm9pZFxuIG10NzYwMXVfc2V0X3dsYW5fc3RhdGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiB2YWwsIGJvb2wgZW5hYmxlKVxuIHtcbkBAIC01OTksNiArNjE4LDcgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aWVlZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpO1xuK1x0aWVlZTgwMjExX2h3X3NldChodywgTkVFRFNfVU5JUVVFX1NUQV9BRERSKTtcbiBcdGh3LVx1MDAzZW1heF9yYXRlcyA9IDE7XG4gXHRody1cdTAwM2VtYXhfcmVwb3J0X3JhdGVzID0gNztcbiBcdGh3LVx1MDAzZW1heF9yYXRlX3RyaWVzID0gMTtcbkBAIC02MDcsOSArNjI3LDE2IEBAIGludCBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbiBcdGh3LVx1MDAzZXZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG10NzZfdmlmKTtcbiBcbiBcdFNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBkZXYtXHUwMDNlbWFjYWRkcik7XG4tXG4rXHR3aXBoeS1cdTAwM2VpbnRlcmZhY2VfbW9kZXMgPVxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHxcbisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbitcdFx0QklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcbisjZW5kaWZcbitcdFx0QklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpO1xuK1x0d2lwaHktXHUwMDNlaWZhY2VfY29tYmluYXRpb25zID0gaWZfY29tYjtcbitcdHdpcGh5LVx1MDAzZW5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRShpZl9jb21iKTtcbiBcdHdpcGh5LVx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9BQ1RJVkVfTU9OSVRPUjtcbi1cdHdpcGh5LVx1MDAzZWludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTtcbiBcdHdpcGh5LVx1MDAzZWZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUztcbiBcbiBcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9DUU1fUlNTSV9MSVNUKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuaW5kZXggY2E5Y2Y2MjhlYjEwZC4uNWUyZGVjMTMxMzMxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcbkBAIC0xMTgsMTkgKzExOCwyNyBAQCB1MTYgbXQ3Nl9tYWNfdHhfcmF0ZV92YWwoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsXG4gXHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKVxuIFx0XHRcdGJ3ID0gMTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcjtcbi1cdFx0aW50IGJhbmQgPSBkZXYtXHUwMDNlY2hhbmRlZi5jaGFuLVx1MDAzZWJhbmQ7XG4tXHRcdHUxNiB2YWw7XG4tXG4tXHRcdHIgPSBcdTAwMjZkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHNbYmFuZF0tXHUwMDNlYml0cmF0ZXNbcmF0ZS1cdTAwM2VpZHhdO1xuLVx0XHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbi1cdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuLVx0XHRlbHNlXG4tXHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZTtcbiBcbi1cdFx0cGh5ID0gdmFsIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRyYXRlX2lkeCA9IHZhbCBcdTAwMjYgMHhmZjtcbi1cdFx0YncgPSAwO1xuK1x0XHRpbnQgYmFuZCA9IGRldi1cdTAwM2VjaGFuZGVmLmNoYW4tXHUwMDNlYmFuZDtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPVxuK1x0XHRcdGRldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tiYW5kXTtcbitcbitcdFx0aWYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8IHJhdGUtXHUwMDNlaWR4IFx1MDAzZT0gc2JhbmQtXHUwMDNlbl9iaXRyYXRlcykge1xuK1x0XHRcdHBoeSA9IE1UX1BIWV9UWVBFX0NDSztcbitcdFx0XHRyYXRlX2lkeCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID1cbitcdFx0XHRcdFx1MDAyNnNiYW5kLVx1MDAzZWJpdHJhdGVzW3JhdGUtXHUwMDNlaWR4XTtcbitcdFx0XHR1MTYgdmFsO1xuK1xuK1x0XHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxuK1x0XHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZV9zaG9ydDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlO1xuK1xuK1x0XHRcdHBoeSA9IHZhbCBcdTAwM2VcdTAwM2UgODtcbitcdFx0XHRyYXRlX2lkeCA9IHZhbCBcdTAwMjYgMHhmZjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmF0ZXZhbCA9IEZJRUxEX1BSRVAoTVRfUlhXSV9SQVRFX01DUywgcmF0ZV9pZHgpO1xuQEAgLTI2NCwxMyArMjcyLDEzIEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYilcbiBcdFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0FVVE9fUlNQX0NGRywgTVRfQVVUT19SU1BfUFJFQU1CX1NIT1JUKTtcbiB9XG4gXG4tdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuK3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcbiB7XG4gXHR1MzIgdmFsID0gbXQ3NjAxdV9ycihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyk7XG4gXG4tXHR2YWwgXHUwMDI2PSB+KE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8XG4tXHRcdCBNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbi1cdFx0IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOKTtcbitcdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XG4rXHRcdCBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuIFxuIFx0aWYgKCFlbmFibGUpIHtcbiBcdFx0bXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTtcbkBAIC0yNzksOSArMjg3LDIyIEBAIHZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcbiBcbiBcdHZhbCBcdTAwMjY9IH5NVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMO1xuIFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX0lOVFZBTCwgaW50ZXJ2YWwgXHUwMDNjXHUwMDNjIDQpIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XG4tXHRcdE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xuK1x0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xuK1xuK1x0LyogQVAgTW9kZSAqL1xuK1x0aWYgKHZpZiBcdTAwMjZcdTAwMjYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9QMlBfR08pKVxuK1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAzKSB8XG4rXHRcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xuK1x0LyogSUJTUyAvIEFkLUhvYyBNb2RlICovXG4rXHRlbHNlIGlmICh2aWYgXHUwMDI2XHUwMDI2IHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKVxuK1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAyKSB8XG4rXHRcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xuK1x0LyogU3RhdGlvbiBtb2RlICovXG4rXHRlbHNlXG4rXHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDEpO1xuK1xuK1x0bXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NjAxdV9jaGVja19tYWNfZXJyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuQEAgLTM5Myw2ICs0MTQsMzggQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0XHQgICBGSUVMRF9QUkVQKE1UX01BWF9MRU5fQ0ZHX0FNUERVLCBtaW5fZmFjdG9yKSk7XG4gfVxuIFxuK2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldi1cdTAwM2VodywgdmlmLCAwKTtcbitcdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4rXHRpbnQgZXJyLCB3b3JkcztcbitcbitcdGlmICghc2tiKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovXG4rXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHR0eHdpID0gKHN0cnVjdCBtdDc2X3R4d2kgKilza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XG4rXHRtZW1zZXQodHh3aSwgMCwgc2l6ZW9mKCp0eHdpKSk7XG4rXG4rXHR0eHdpLVx1MDAzZXdjaWQgPSAwO1xuK1x0dHh3aS1cdTAwM2VsZW5fY3RsID0gY3B1X3RvX2xlMTYoc2tiLVx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XG4rXHR0eHdpLVx1MDAzZXJhdGVfY3RsID0gY3B1X3RvX2xlMTYoMCk7XG4rXG4rXHR3b3JkcyA9IERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KTtcbitcdGVyciA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX0JFQUNPTl9CQVNFLFxuK1x0XHRcdFx0ICAgICAgIChjb25zdCB1MzIgKilza2ItXHUwMDNlZGF0YSwgd29yZHMpO1xuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIHZvaWRcbiBtdDc2X21hY19wcm9jZXNzX3JhdGUoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywgdTE2IHJhdGUpXG4ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG5pbmRleCA1NGJkNGZhYzU0ZDgzLi41Mjg3NTZjY2Y0NzI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuQEAgLTE2Nyw1ICsxNjcsNiBAQCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXNcbiBtdDc2MDF1X21hY19mZXRjaF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpO1xuIHZvaWQgbXQ3Nl9zZW5kX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IG10NzZfdHhfc3RhdHVzICpzdGF0KTtcbiB2b2lkIG10NzYwMXVfc2V0X21hY2FkZHIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGNvbnN0IHU4ICphZGRyKTtcbi1cbitpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5pbmRleCAwNWJhNDNlMTk4NWM4Li40Mzg5ZTMzMmRmZTE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5AQCAtMTQ5LDcgKzE0OSw3IEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0ICpcdCBydDJ4MDAgZG9lc24ndCBzZWVtIHRvIGJlIGJvdGhlcmVkIHRob3VnaC5cbiBcdFx0ICovXG4gXHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2Vic3NpZCkpXG4tXHRcdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIGZhbHNlLCAwKTtcbitcdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHtcbkBAIC0xNjEsNyArMTYxLDIwIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKVxuLVx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdHJ1ZSwgaW5mby1cdTAwM2ViZWFjb25faW50KTtcbitcdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgaW5mby1cdTAwM2ViZWFjb25faW50KTtcbitcbitcdGlmICgoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXG4rXHRcdG10NzYwMXVfbWFjX3NldF9iZWFjb24oZGV2LCB2aWYsIGluZm8pO1xuK1xuK1x0aWYgKChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcbitcdFx0aWYgKGluZm8tXHUwMDNlZW5hYmxlX2JlYWNvbilcbitcdFx0XHRtdDc2X3NldChkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyxcbitcdFx0XHRcdCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG10NzZfY2xlYXIoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsXG4rXHRcdFx0XHQgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcbitcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9IVCB8fCBjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpXG4gXHRcdG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKGRldiwgaW5mby1cdTAwM2V1c2VfY3RzX3Byb3QsXG5AQCAtMTgzLDYgKzE5Niw0MyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbiB9XG4gXG4rc3RhdGljIGludCBtdDc2MDF1X3N0YXJ0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXG4re1xuK1x0c3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody1cdTAwM2Vwcml2O1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRldi1cdTAwM2VtdXRleCk7XG4rXG4rXHQvKiBDbGVhciB0aGUgd2NpZCBUYWJsZSAqL1xuK1x0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaSwgMCwgTlVMTCk7XG4rXG4rXHQvKiBTZXQgcHJlIFRCVFQgdG8gNm1zICovXG4rXHRtdDc2X3Jtd19maWVsZChkZXYsIE1UX0lOVF9USU1FUl9DRkcsIE1UX0lOVF9USU1FUl9DRkdfUFJFX1RCVFQsIDYpO1xuK1x0bXQ3Nl9zZXQoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4rXG4rXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBsaW5rX2NvbmYtXHUwMDNlYmVhY29uX2ludCk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKVxuK3tcbitcdHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2ID0gaHctXHUwMDNlcHJpdjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbitcbitcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTtcbitcbitcdG10NzZfY2xlYXIoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbit9XG4rXG4gc3RhdGljIGludFxuIG10NzZfd2NpZF9hbGxvYyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbiB7XG5AQCAtNDE5LDYgKzQ2OSw4IEBAIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzYwMXVfb3BzID0ge1xuIFx0LmNvbmZpZyA9IG10NzYwMXVfY29uZmlnLFxuIFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSBtdDc2X2NvbmZpZ3VyZV9maWx0ZXIsXG4gXHQuYnNzX2luZm9fY2hhbmdlZCA9IG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZCxcbitcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXG4rXHQuc3RvcF9hcCA9IG10NzYwMXVfc3RvcF9hcCxcbiBcdC5zdGFfYWRkID0gbXQ3NjAxdV9zdGFfYWRkLFxuIFx0LnN0YV9yZW1vdmUgPSBtdDc2MDF1X3N0YV9yZW1vdmUsXG4gXHQuc3RhX25vdGlmeSA9IG10NzYwMXVfc3RhX25vdGlmeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXG5pbmRleCAxMThkNDM3MDc4NTM3Li43MzY2ZTFjNDc2MzM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXG5AQCAtMzU5LDcgKzM1OSw4IEBAIHZvaWQgbXQ3NjAxdV9tYWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgbGVnYWN5X3Byb3QsXG4gXHRcdFx0XHRpbnQgaHRfbW9kZSk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKTtcbi12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpO1xuK3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4gdm9pZFxuIG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmNcbmluZGV4IDVhZWVhYzBkZDlmZTcuLjQ3Yzc4YzRmZjUxNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xuQEAgLTI3LDYgKzI3LDE0IEBAIHN0YXRpYyB1OCBxMmh3cSh1OCBxKVxuIHN0YXRpYyB1OCBza2IycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGludCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbitcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcbitcdGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbitcdCAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpIHtcbitcdFx0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgTVRfVFhRX1ZPKTtcbitcdFx0cmV0dXJuIHEyaHdxKE1UX1RYUV9WTyk7XG4rXHR9XG4gXG4gXHRpZiAoV0FSTl9PTihxaWQgXHUwMDNlPSBNVF9UWFFfUFNEKSkge1xuIFx0XHRxaWQgPSBNVF9UWFFfQkU7XG5AQCAtMTM0LDYgKzE0Miw5IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlID0gXHUwMDI2aW5mby1cdTAwM2Vjb250cm9sLnJhdGVzWzBdO1xuIFx0c3RydWN0IG10NzZfdHh3aSAqdHh3aTtcbitcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcdGJvb2wgaXNfbWdtdCA9IGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbitcdGJvb2wgaXNfbWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItXHUwMDNlYWRkcjEpO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgaXNfcHJvYmU7XG4gXHR1MzIgcGt0X2lkO1xuQEAgLTE0OCwxNCArMTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIGluZm8tXHUwMDNlY29udHJvbC5yYXRlcywgMSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8ICFyYXRlLVx1MDAzZWNvdW50KVxuK1x0aWYgKCFpc19tZ210IFx1MDAyNlx1MDAyNiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgIXJhdGUtXHUwMDNlY291bnQpKVxuIFx0XHRyYXRlX2N0bCA9IHdjaWQtXHUwMDNldHhfcmF0ZTtcbiBcdGVsc2VcbiBcdFx0cmF0ZV9jdGwgPSBtdDc2X21hY190eF9yYXRlX3ZhbChkZXYsIHJhdGUsIFx1MDAyNm5zcyk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR0eHdpLVx1MDAzZXJhdGVfY3RsID0gY3B1X3RvX2xlMTYocmF0ZV9jdGwpO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKVxuK1x0aWYgKCEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNiBzdGEgXHUwMDI2XHUwMDI2ICFpc19tY2FzdClcbiBcdFx0dHh3aS1cdTAwM2VhY2tfY3RsIHw9IE1UX1RYV0lfQUNLX0NUTF9SRVE7XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKVxuIFx0XHR0eHdpLVx1MDAzZWFja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX05TRVE7XG5AQCAtMTk3LDYgKzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0c3RydWN0IG10NzZfc3RhICptc3RhID0gTlVMTDtcbiBcdHN0cnVjdCBtdDc2X3djaWQgKndjaWQgPSBkZXYtXHUwMDNlbW9uX3djaWQ7XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cdTAwM2VhZGRyMSk7XG4gXHRpbnQgcGt0X2xlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgaHdfcSA9IHNrYjJxKHNrYik7XG4gXG5AQCAtMjExLDcgKzIyNCw3IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0aWYgKHN0YSkge1xuIFx0XHRtc3RhID0gKHN0cnVjdCBtdDc2X3N0YSAqKSBzdGEtXHUwMDNlZHJ2X3ByaXY7XG4gXHRcdHdjaWQgPSBcdTAwMjZtc3RhLVx1MDAzZXdjaWQ7XG4tXHR9IGVsc2UgaWYgKHZpZikge1xuK1x0fSBlbHNlIGlmICh2aWYgXHUwMDI2XHUwMDI2IGlzX21jYXN0KSB7XG4gXHRcdHN0cnVjdCBtdDc2X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3Nl92aWYgKil2aWYtXHUwMDNlZHJ2X3ByaXY7XG4gXG4gXHRcdHdjaWQgPSBcdTAwMjZtdmlmLVx1MDAzZWdyb3VwX3djaWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OToyMy40NDA3MjYxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQxNTk3ODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtdDc2MDF1YCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgZm9yIHRoZSBgbXQ3NjAxdWAgZHJpdmVyIOKAkyBhIE1lZGlhVGVrIE1UNzYwMVUgVVNCIFdpcmVsZXNzIExBTiBkcml2ZXIsIHNwZWNpZmljYWxseS4gSXQncyB0b3VjaGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgaW5pdC5jYCwgYG1hYy5jYCwgYG1hYy5oYCwgYG1haW4uY2AsIGBtdDc2MDF1LmhgLCBhbmQgYHR4LmNgLiBTZWVtcyBsaWtlIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIGEgd2hvbGUgc2xldyBvZiB3aXJlbGVzcyBtb2RlczogQVAsIE1lc2ggUG9pbnQsIFAyUCBDbGllbnQsIFAyUCBHTywgYW5kIEFkLUhvYy4gSXQncyBtb2RpZnlpbmcgdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB0byBzZXQgaW50ZXJmYWNlIG1vZGVzIGFuZCBjb21iaW5hdGlvbnMuIEl0IGhhcyBuZXcgZnVuY3Rpb25zIGZvciBiZWFjb24gc2V0dGluZywgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIEFQIG1vZGUsIGFuZCBhbHRlcnMgdGhlIHRyYW5zbWl0IGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCBtYW5hZ2VtZW50IGFuZCBtdWx0aWNhc3QgZnJhbWVzLiBTdGFuZGFyZCBzdHVmZiBmb3IgYWRkaW5nIHdpcmVsZXNzIG1vZGVzLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gSSBldmVuIGZ1enogdGhpcyB0aGluZz8gVGhlIHByb21wdCBnaXZlcyBtZSBwYXVzZSwgaXQgc2F5cyBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgaXQncyBub3Qgd29ydGggZnV6emluZy4gT2theSwgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoaXMgbWV0aG9kaWNhbGx5LiBgbXQ3NjAxdWAgaXMgYSBVU0IgZHJpdmVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHJpZ2h0PyBJIGNhbiBwcm9iYWJseSB1c2UgYHZoY2lgIChVU0IgZ2FkZ2V0L2R1bW15IEhDRCksIG9yIFN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB3aXRoIGB2aGNpYC5cblxuV2FpdCBhIG1pbnV0ZSwgSSBoYXZlIHRvIHJlYWQgdGhlIHByb21wdCBjbG9zZWx5LiBJdCBzYXlzIGNvZGUgcGF0aHMgKmltcG9zc2libGUqIHRvIHJlYWNoIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBtZWFucyBpZiBJICpjYW4qIHJlYWNoIGl0IHdpdGggYHZoY2lgIChvciBzaW1pbGFyKSwgaXQncyB3b3J0aCBmdXp6aW5nISBZZXMsIGl0IHNheXMgXCJldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNvLCBzaW5jZSBVU0IgZHJpdmVycyAqYXJlKiByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChzeXprYWxsZXIvdmhjaSksIHRoaXMgaXMgZ29vZC4gVGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCdzIGEgcG9zaXRpdmUgc2lnbmFsLiBBbmQgSSdtIHByZXR0eSBzdXJlIEkgY2FuLCBTeXprYWxsZXIgaGFzIHRoZSBVU0IgZnV6emluZyB0b29scy5cblxuUmlnaHQsIHNvIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYG10NzYwMXVgIGlzIGEgVVNCIGRyaXZlcjsgdGhhdCdzIHZlcmlmaWVkLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgZnV6emluZyBzaG90LiBMZXQgbWUgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyODAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTozMy44NTY3MDgyNDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MTQ5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1UNzYwMVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvS2NvbmZpZzoyOmNvbmZpZyBNVDc2MDFVXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzYwMVUgKFVTQikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6MzMuOTAwNTI2OTM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0MjUwNjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTVQ3NjAxVSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgYE1UNzYwMVVgIHByb2plY3QuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCB0b3VjaGluZyB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSBuYXN0eSBzdXJwcmlzZXMgZG93biB0aGUgbGluZSBhbmQgZW5zdXJpbmcgYSBzbW9vdGggaW50ZWdyYXRpb24uXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBvdGhlciBsaWJyYXJpZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgdGhpcyBiZWFzdCByZWxpZXMgb24uIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbj8gRG9lcyBpdCBuZWVkIGFueSBjdXN0b20gZmlybXdhcmUgYmxvYnM/IEFyZSB0aGVyZSBhbnkgdGhpcmQtcGFydHkgbGlicmFyaWVzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoaWNoIHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eT8gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIHN1c3BlY3RzIC0gdGhlIHN0YW5kYXJkIHdpcmVsZXNzIHN0YWNrIGNvbXBvbmVudHMsIGFueSBjdXN0b20gSEFMIGltcGxlbWVudGF0aW9ucywgYW5kIHBvdGVudGlhbGx5IHNvbWUgYm9hcmQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cbk5leHQsIEknbGwgZGVsdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBXaGF0IGJ1aWxkIHRvb2xzIGFyZSB1c2VkPyBJcyBpdCBNYWtlLCBDTWFrZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgTWFrZWZpbGVgIG9yIGBDTWFrZUxpc3RzLnR4dGAgZmlsZXMsIGxvb2tpbmcgZm9yIGluY2x1ZGUgcGF0aHMsIGxpYnJhcnkgbGlua3MsIGFuZCBhbnkgcHJlLSBvciBwb3N0LWJ1aWxkIHN0ZXBzLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGltcG9ydGFudCBpbnNpZ2h0LlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxscy4gSXQncyBlYXN5IHRvIGdldCBsb3N0IGluIGEgd2ViIG9mIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIGJlIHN5c3RlbWF0aWMuIEkgd2lsbCBsb29rIGZvciBhbnkgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY2F1c2UgYnVpbGQgZXJyb3JzLiBJJ2xsIGFsc28gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdmVyc2lvbiBjb25zdHJhaW50cywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgbGlicmFyeSB1c2VkIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgY29uZmxpY3RzISBJIGNhbiBoYW5kbGUgdGhpcyBjYXJlZnVsbHkuXG5cbkZpbmFsbHksIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGRvY3VtZW50IGV2ZXJ5dGhpbmcuIEEgZGVwZW5kZW5jeSBncmFwaCwgZXZlbiBhIHNpbXBsZSBvbmUsIHdpbGwgYmUgaW52YWx1YWJsZSBkb3duIHRoZSByb2FkLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBtb2RpZnkgb3IgZGVidWcgdGhpcyBtb2R1bGUgbGF0ZXIuIFRoaXMgaW52ZXN0aWdhdGlvbiBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTozOS43NDMwMzU4MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNVDc2MDFVXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3NjAxVSAoVVNCKSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzYwMVUtYmFzZWQgVVNCIHdpcmVsZXNzIGRvbmdsZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjM5Ljc0MzA5MDc5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzcxNjgxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNVDc2MDFVIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTVQ3NjAxVWAgZHJpdmVyLCBhbmQgbXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgbWFraW5nIGNvbm5lY3Rpb25zLiBJdCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAgYW5kIGBVU0JgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgd2lyZWxlc3MgY2hpcHNldC4gVGhlIHBhdGNoIGlzIGFib3V0IGFkZGluZyBBUCBtb2RlIHN1cHBvcnQsIHdoaWNoIGluc3RhbnRseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggYE1BQzgwMjExX01FU0hgIChnb29kIGNhdGNoIG9uIHRoYXQgYCNpZmRlZmApLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEkgc2VlIHRoZXkncmUgYGllZWU4MDIxMV9vcHNgIGNhbGxiYWNrcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuICBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBhIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBwbGFuIHdpbGwgYmUgdG8gZW11bGF0ZSB0aGUgVVNCIGRldmljZSBhbmQgdGhlbiB1c2UgbmV0bGluayBjb21tYW5kcyB0byB0cmlnZ2VyIEFQIHN0YXJ0dXAgdmlhIG1hYzgwMjExLiAgVGhhdCBzaG91bGQgbGV0IG1lIGhpdCB0aGVzZSBmdW5jdGlvbnMuXG5cblNvLCB3aGVyZSBzaG91bGQgSSBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlc2UgZml2ZSBmdW5jdGlvbnMgYXMgdGFyZ2V0czogYG10NzYwMXVfc3RhcnRfYXBgLCBgbXQ3NjAxdV9zdG9wX2FwYCwgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3B1c2hfdHh3aWAsIGFuZCBgbXQ3NjAxdV90eGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBwcm9tcHQhIEl0J3MgdGVsbGluZyBtZSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgdG8gZ2V0IGEgbW9yZSBldmVuIGRpc3RyaWJ1dGlvbiBvZiB0ZXN0cy4gIGBtdDc2MDF1X3R4YCBhbmQgYG10NzYwMXVfcHVzaF90eHdpYCBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCwgc28gc2NyYXRjaCB0aG9zZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGxpc3QuXG5cbk9rYXksIGxldCdzIHJlZm9jdXMuIE15IGNvcmUgdGFyZ2V0cyB3aWxsIGJlIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYW5kIGBtdDc2MDF1X21hY19jb25maWdfdHNmYC4gTGV0IG1lIGNoZWNrIGlmIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCBpcyBzdGF0aWMuIEl0J3MgaW4gYG1hYy5jYCBhbmQgZXhwb3NlZCB2aWEgYG1hYy5oYCwgc28gaXQncyBub24tc3RhdGljLiBHb29kLiBOb3csIHdoYXQgYWJvdXQgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYD8gVGhleSdyZSBpbiBgbWFpbi5jYCBhbmQgdGhleSBhcmUgZGVjbGFyZWQgc3RhdGljLiBCdXQsIHdhaXQuLi50aGV5IGFyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AuIFNpbmNlIHRoZXkgYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJ3QqIGlubGluZSB0aGVtLiBCdXQsIHRvIGJlIHNhZmUsIEknbGwgaW5jbHVkZSB0aGVtIGluIG15IGxpc3Qgb2YgZnV6emluZyB0YXJnZXRzLlxuXG5BbHJpZ2h0LCB3aGF0IGFib3V0IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYD8gSXQncyBub24tc3RhdGljLCBzbyBnb29kIHRvIGdvLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgZ290IG1vZGlmaWVkLiBgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2VgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCdzIGp1c3QgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIEknbSBub3QgdGhhdCB3b3JyaWVkIGFib3V0IHRoYXQuIEhtbSwgYG10NzZfbWFjX3R4X3JhdGVfdmFsYCBpcyBhbHNvIG1vZGlmaWVkLCBhbmQgdGhhdCBpcyBpbiBgbWFjLmNgLiBJIHNob3VsZCBwcm9iYWJseSBpbnZlc3RpZ2F0ZSB0aGF0IG9uZSBhcyB3ZWxsLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHNpZ25hdHVyZXMgb2YgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYC4gR290dGEgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMzQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTo1MS4xMTQ3NzUxOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMzI4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9zdGFydF9hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjE5OTpzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjAwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz00NTg9Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzEtXFx0LmJzc19pbmZvX2NoYW5nZWQgPSBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6NDcyOlxcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtNDczLVxcdC5zdG9wX2FwID0gbXQ3NjAxdV9zdG9wX2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTo1MS4xNjAwMTYyODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU3NDU0Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtcyBhbmQgODAyLjExIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipBbmFseXppbmcgdGhlIElFRUUgODAyLjExIE9wZXJhdGlvbnMgU3RydWN0dXJlKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyB0aGF0IHNvbWV0aGluZyBpcyBiZWluZyBcImFzc2lnbmVkIHRvIGBpZWVlODAyMTFfb3BzYFwiLiBSaWdodCwgdGhvc2Ugb3BlcmF0aW9ucyBhcmUgcHJldHR5IG11Y2ggc3RhdGljLCBhcmVuJ3QgdGhleT8gVGhleSdyZSBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSBhbmQgaG9va2VkIGludG8gdGhlIGRyaXZlcidzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIGRyaXZlciB3b3VsZCB0aGVuIHBvcHVsYXRlIHRoZSBgaWVlZTgwMjExX29wc2Agd2l0aCBpdCdzIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzLlxuXG5TbywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBhbmQgZmlndXJlIG91dCB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuIFRoZSBub3RlIG1lbnRpb25zIGEgZnVuY3Rpb24sIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgZnVuY3Rpb24gZGlyZWN0bHkgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBhc3NpZ25lZCB0byB0aGlzIHNwZWNpZmljIG9wZXJhdGlvbmFsIHN0cnVjdHVyZSwgYW5kIGluIHRoaXMgY2FzZSwgaXQgYXBwZWFycyB3ZSBhcmUgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIGJlYWNvbiBmdW5jdGlvbmFsaXR5LiBXZSBtYXkgd2FudCB0byBhbHNvIGNoZWNrIGZvciByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBpbnZvbHZlIHRoZSBoYXJkd2FyZSBhbmQgbWVkaXVtIGFjY2VzcyBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjU1LjIxNzQ3NDE3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNzMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9tYWNfc2V0X2JlYWNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTM5Mj12b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQxNzppbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxOC1cXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaD0xNjk9dm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaDoxNzA6aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaC0xNzEtXFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTY2LVxcdGlmICgoY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikgXFx1MDAyNlxcdTAwMjYgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjE2NzpcXHRcXHRtdDc2MDF1X21hY19zZXRfYmVhY29uKGRldiwgdmlmLCBpbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0xNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjU1LjI2MjY1NjcwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2OTc3Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgU3RhdGUqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBub24tc3RhdGljIGhlcmUsIHdoaWNoIGlzIHRoZSBpbW1lZGlhdGUgaXNzdWUuIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IFdoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgdmFyaWFibGUgc3RhdGU/IExldCdzIHpvb20gaW4gb24gYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLiBUaGF0J3Mgd2hlcmUgSSdkIHN0YXJ0LiBJdCdzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IHRvIHNlZSBpZiB0aGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gdGltZSBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb24gKFRTRikgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1BQyBsYXllciwgb3IsIGluZGVlZCwgc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbC4gR290dGEgY2hlY2sgaXRzIHZhbHVlcywgaW50ZXJhY3Rpb25zLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBlbGVtZW50IGNoYW5nZXMgZHluYW1pY2FsbHkgaXMga2V5IHRvIHRyb3VibGVzaG9vdGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzNSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjU4LjU4OTYzNzQ0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMDA0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9tYWNfY29uZmlnX3RzZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTI2Nz12b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTI3NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjI3NTp2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYy0yNzYtXFx0XFx0XFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTUxLVxcdFxcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cXHUwMDNlYnNzaWQpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjE1MjpcXHRcXHRcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTUzLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2My1cXHRpZiAoY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTY0OlxcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGluZm8tXFx1MDAzZWJlYWNvbl9pbnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTE5OT1zdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0yMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MjE1OlxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGxpbmtfY29uZi1cXHUwMDNlYmVhY29uX2ludCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjE2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MjIyPXN0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoyMjk6XFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIzMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oPTM2MT12b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oOjM2Mjp2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzYzLVxcdFxcdFxcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6NTguNjM0NjQyOTQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4OTQwNjgxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgdGhlIG1vZGlmaWNhdGlvbnMuIExldCBtZSBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgaW4gcmVsYXRpb24gdG8gdGhlIE1UNzYwMVUgZHJpdmVyLiBGaXJzdCwgdGhlcmUncyBgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2VgLCBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgLCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCwgYG10NzYwMXVfc3RhcnRfYXBgLCBgbXQ3NjAxdV9zdG9wX2FwYCwgYG10NzYwMXVfcHVzaF90eHdpYCwgYW5kIGBtdDc2MDF1X3R4YC5cblxuQWxyaWdodCwgYSBmZXcgb2YgdGhlc2UgYXJlIGNsZWFybHkgaW1wb3J0YW50LiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBiZWluZyBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wcy5ic3NfaW5mb19jaGFuZ2VkYCwgd2hpY2ggaXMgYSBrZXkgY2FsbGJhY2suIGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIHVzZWQgYnkgYG10NzYwMXVfcHVzaF90eHdpYC4gU28gbGV0J3MgbWFrZSBzdXJlIEkgcmVhbGx5IGZvY3VzIG9uIHRob3NlIHN5bWJvbHM6XG5cbmBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLCBgbXQ3NjAxdV9zdGFydF9hcGAsIGBtdDc2MDF1X3N0b3BfYXBgLCBhbmQgYG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZGAuXG5cbkhtbSwgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCBhcmUgc3RhdGljLiBJIHdpbGwgaW5jbHVkZSB0aGVtIGFueXdheSwganVzdCBpbiBjYXNlLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZC4gVGhlIHBhdGNoIHJlZmVyZW5jZXMgYCNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSGAuIFNvLCBgTUFDODAyMTFfTUVTSGAgc2hvdWxkIGJlIGluIGBFbmFibGVDb25maWdzYC4gSXQgd291bGQgYmUgd2lzZSB0byBhZGQgYE1UNzYwMVVgIHRvIGBFbmFibGVDb25maWdzYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmb3IgYE1BQzgwMjExX01FU0hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDowNS41Mjg3MTUxMjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA2MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9NRVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnPTYwPWNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjcxLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDowNS41NzQxMjY5ODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNjc0OTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFfTUVTSGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgTUFDODAyMTFfTUVTSGAuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgY2hlY2tpbmcgZm9yIGFueSBkZXBlbmRlbnQgbW9kdWxlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0LCBnaXZlbiBpdHMgbmF0dXJlLCB0aGVyZSAqd2lsbCogYmUgZGVwZW5kZW5jaWVzLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZXksIGFuZCBob3cgZGVlcGx5IGludGVydHdpbmVkIGlzIHRoaXMgZmVhdHVyZT8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJlbGlhbmNlIG9uIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdGhlIGJyb2FkZXIga2VybmVsLiBJcyBpdCB0aWdodGx5IGNvdXBsZWQsIG9yIGNhbiBJIGNvbnNpZGVyIGl0IG1vcmUgbW9kdWxhcj8gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgdHJlZSBpcyBjcnVjaWFsIGZvciBhbnkga2luZCBvZiBkZXZlbG9wbWVudCBvciBkZWJ1Z2dpbmcgSSBtaWdodCBuZWVkIHRvIGRvIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6MDkuMDEwODgxNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdGhlbHBcXG4gIDY2OlxcdFxcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgbWFjODAyMTEgaW50ZXJuYWxzIHdpdGgga3VuaXQuXFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIE1BQzgwMjExX01FU0hcXG4gIDcxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSA4MDIuMTEgbWVzaCBvcGVyYXRpb24gaW4gbWFjODAyMTFcXG4gIDc1OlxcdFxcdCAgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQuICA4MDIuMTEgbWVzaCBjb25uZWN0cyBtdWx0aXBsZSBzdGF0aW9uc1xcbiAgNzY6XFx0XFx0ICBvdmVyIChwb3NzaWJseSBtdWx0aS1ob3ApIHdpcmVsZXNzIGxpbmtzIHRvIGZvcm0gYSBzaW5nbGUgbG9naWNhbFxcbiAgNzc6XFx0XFx0ICBMQU4uXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZyBNQUM4MDIxMV9MRURTXFxuICA4MDpcXHRcXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgODI6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbiAgODM6XFx0XFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG4gIDg0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6MDkuMDEwOTk1NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MDYzOTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gcHV6emxlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZGVlcGx5OlxuXG4qKkRlZXAgRGl2ZSBpbnRvIE1BQzgwMjExIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoaW5nZXMgb24gYE1BQzgwMjExYC4gVGhhdCdzIHRoZSBrZXkuIFRoZXJlZm9yZSwgdG8gZ2V0IHRoaXMgcmlnaHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBuZWVkcyB0byBpbmNsdWRlIGBNVDc2MDFVYCBhbmQgYE1BQzgwMjExX01FU0hgLiBUaGF0IG1ha2VzIHNlbnNlOyBgTUFDODAyMTFfTUVTSGAgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIG1lc2ggbmV0d29ya2luZyBjYXBhYmlsaXRpZXMsIHdoaWNoIGxpa2VseSByZWx5IGhlYXZpbHkgb24gYE1BQzgwMjExYCBpdHNlbGYuXG5cbk5vdywgaG9sZCBvbi4uLiBgTVQ3NjAxVWAgYWxzbyBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGJ1dCBhbHNvIG9uIGBVU0JgLiBUaGlzIGlzIHR5cGljYWwgZm9yIGEgVVNCIHdpcmVsZXNzIGRldmljZS4gVGhpcyBVU0IgZGVwZW5kZW5jeSBtYWtlcyBtZSB3b25kZXIgYWJvdXQgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIFVTQiBob3N0IGludGVyZmFjZS4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgc3R1ZmYsIHRob3VnaCBJIG5lZWQgdG8ga2VlcCBpdCBpbiBtaW5kIGFzIEkgYnVpbGQgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbkJlZm9yZSBJIGxvY2sgdGhpcyBkb3duLCBJIHNob3VsZCBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGUgYE1UNzYwMVVgIHNldHRpbmdzIG9uY2UgbW9yZSwganVzdCB0byBlbnN1cmUgdGhhdCBJJ3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgb3RoZXIgZGVwZW5kZW5jeSBhbmQgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gQSBmaW5hbCBsb29rIHdpbGwgaGVscCBtZSBmZWVsIGNvbmZpZGVudCB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxMy4wOTE2MzgwNDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTVQ3NjAxVVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzYwMVUgKFVTQikgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MDFVLWJhc2VkIFVTQiB3aXJlbGVzcyBkb25nbGVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxMy4wOTE3MDQ3NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MDQzNDAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzYwMVUgTWVzaCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGJhc2VkIG9uIHRoZSBwcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uLCBpdCBsb29rcyBsaWtlIHRoZSBgTVQ3NjAxVWAgZHJpdmVyLCBjb21iaW5lZCB3aXRoIGBNQUM4MDIxMV9NRVNIYCBmdW5jdGlvbmFsaXR5LCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHRhc2suIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb24gY2FsbHMsIHRoZSBvbmVzIHRoYXQgcmVhbGx5IGRyaXZlIHRoZSBiZWhhdmlvcjogYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYC5cblxuQWgsIGhlcmUncyBhIGNydWNpYWwgcG9pbnQuIEl0IHNlZW1zIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIGNvcnJlY3QsIG5vdyBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBpZWNlLiBJdCBhcHBlYXJzIHRoZSBtb2RpZmljYXRpb24gaXMgdG8gZW5zdXJlIHRoYXQsIHdoZW5ldmVyIEJTUyBpbmZvIGNoYW5nZXMsIGl0IG5vdyBjYWxscyBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAgd2l0aCBib3RoIGB2aWZgIGFuZCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBjb21iaW5hdGlvbiDigJMgaXQgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWUgc3luY2hyb25pemF0aW9uIGFuZCBiZWFjb24gdXBkYXRlcywgYWxpZ25pbmcgd2l0aCB3aGF0IEkgZXhwZWN0IGZyb20gYSBtZXNoIGltcGxlbWVudGF0aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBpbXBvcnRhbnQgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgZHJpdmVyLiBJIG11c3QgY29uZmlybSBpZiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZSBhbmQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxOC4xNDIxNDE1NDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDYwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYwMXVfYnNzX2luZm9fY2hhbmdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoxMzQ6bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTEzNS1cXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTY0IGNoYW5nZWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz00NTg9Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzAtXFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSBtdDc2X2NvbmZpZ3VyZV9maWx0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6NDcxOlxcdC5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTQ3Mi1cXHQuc3RhcnRfYXAgPSBtdDc2MDF1X3N0YXJ0X2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxOC4xODg2MDY5MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3ODYxMzY3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG10NzYwMXUgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5pdGlhbCBhc3N1bXB0aW9uIHRoYXQgZXZlcnl0aGluZyBpcyBzdGF0aWMgbmVlZHMgcmV2aXNpb24uIEkgc2VlIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBhbmQgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgIGFyZSBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHNvIHRob3NlIGFyZSBrZXkgZW50cnkgcG9pbnRzLiBJJ2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCBhbG9uZyB3aXRoIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCwgYXMgdGhleSBzZWVtIHJlbGV2YW50IHRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuSSBnbGFuY2VkIGF0IGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAsIGJ1dCBpdCdzIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgSSdtIGdlbmVyYWxseSBub3QgYXMgaW50ZXJlc3RlZCBpbiB0aG9zZSBmb3IgZnV6emluZy4gU2ltaWxhcmx5LCBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyBkZWVwbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSB0cmFuc21pdCBwYXRoLCB3aGljaCBtYWtlcyBpdCBsZXNzIGNyaXRpY2FsIGhlcmUuIEknbSBwcmlvcml0aXppbmcgZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBBUC9NZXNoIGZ1bmN0aW9uYWxpdHkuXG5cbkkgcmVjaGVja2VkIGBtdDc2MDF1X3N0YXJ0X2FwYCBhbmQgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCB5ZXMsIHRoZXkgKmFyZSogc3RhdGljLCBidXQgc2luY2UgdGhleSdyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AsIHRoZXkncmUgY2FsbGVkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIHdvbid0IGlubGluZSB0aGVtLCBhbmQgdGhleSdyZSB2YWxpZCB0YXJnZXRzLiBUaGV5IGFyZSBpbXBvcnRhbnQuXG5cbk5vdywgb24gdGhlIGNvbmZpZyBzaWRlOiBgTUFDODAyMTFgIGFuZCBgVVNCYCBhcmUgc3RhbmRhcmQsIG9idmlvdXNseS4gYE1UNzYwMVVgIGlzIHRoZSBkcml2ZXIsIHNvIHRoYXQncyBhIGdpdmVuLiBBbmQgY3JpdGljYWxseSwgYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZCBmb3IgdGhlIG1lc2ggYXNwZWN0LiBJJ20gZ29pbmcgdG8gc2V0IHRoYXQgYXMgYW4gZW5hYmxlciB0b28uXG5cblNvLCB0aGUgc3VtbWFyeSBvZiBteSBkZWNpc2lvbnMgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhlIG5ldyBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIGZ1bmN0aW9uYWxpdGllcyBtYWtlIHRoaXMgYSB3b3J0aHdoaWxlIGZ1enppbmcgdGFyZ2V0LCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhhdCBVU0IgZGV2aWNlcyBhcmUgZW11bGF0YWJsZS5cbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmBcbiAgICAqICAgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgXG4gICAgKiAgIGBtdDc2MDF1X3N0YXJ0X2FwYFxuICAgICogICBgbXQ3NjAxdV9zdG9wX2FwYFxuICAgICogICBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgTVQ3NjAxVWBcbiAgICAqICAgYE1BQzgwMjExX01FU0hgXG5cbk15IHJlYXNvbmluZyBpcyB0aGUgYWRkaXRpb24gb2YgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyIGJ5IG1vZGlmeWluZyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDAsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjM0Ljk3NDc0NjU1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTg3MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc2MDFVXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3NjAxdV9tYWNfc2V0X2JlYWNvblwiLFxuICAgIFwibXQ3NjAxdV9tYWNfY29uZmlnX3RzZlwiLFxuICAgIFwibXQ3NjAxdV9zdGFydF9hcFwiLFxuICAgIFwibXQ3NjAxdV9zdG9wX2FwXCIsXG4gICAgXCJtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFQLCBNZXNoLCBQMlAsIGFuZCBBZC1Ib2MgbW9kZXMgdG8gdGhlIG10NzYwMXUgVVNCIHdpcmVsZXNzIGRyaXZlci4gSXQgbW9kaWZpZXMgbWFjODAyMTEgY2FsbGJhY2tzIHRvIGhhbmRsZSBiZWFjb24gc2V0dXAsIFRTRiBjb25maWd1cmF0aW9uLCBhbmQgQVAgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBTaW5jZSB0aGlzIGlzIGEgVVNCIGRyaXZlciwgaXQgY2FuIGJlIGZ1enplZCB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZGV2aWNlcyAodmhjaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3NjAxVVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzYwMXVfbWFjX3NldF9iZWFjb25cIixcbiAgICBcIm10NzYwMXVfbWFjX2NvbmZpZ190c2ZcIixcbiAgICBcIm10NzYwMXVfc3RhcnRfYXBcIixcbiAgICBcIm10NzYwMXVfc3RvcF9hcFwiLFxuICAgIFwibXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIG1vZGVzIHRvIHRoZSBtdDc2MDF1IFVTQiB3aXJlbGVzcyBkcml2ZXIuIEl0IG1vZGlmaWVzIG1hYzgwMjExIGNhbGxiYWNrcyB0byBoYW5kbGUgYmVhY29uIHNldHVwLCBUU0YgY29uZmlndXJhdGlvbiwgYW5kIEFQIHN0YXJ0L3N0b3Agb3BlcmF0aW9ucy4gU2luY2UgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGRldmljZXMgKHZoY2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDozNS4wNTg3NDA4NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDA2NTI2MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6MzUuMDU5Mjk3ODg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMDA1OTY0OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXFx1MDAzZWxlbiwgNClgIGFuZCBwYXNzZXMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYC5cXG5cXG5CZWNhdXNlIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyBjYW4gaGF2ZSBhcmJpdHJhcnkgbGVuZ3RocywgYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdoZW4gYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cXHUwMDNlbGVuYC4gU2luY2Ugc2tiIGJ1ZmZlcnMgdHlwaWNhbGx5IGhhdmUgc29tZSB0YWlscm9vbSAobWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkKSwgdGhpcyByZWFkIHdpbGwgc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGlvbi4gQXMgYSByZXN1bHQsIEtBU0FOIHdpbGwgTk9UIGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cXG5cXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjNjM4MmEzNTllYjRlNDg2MmNiOGQ0MGFkNGM1MDU0Zjg4MDVhZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMzo0OToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcbmluZGV4IDVkOWU5NTJiMjk2NjQuLmU4NzFmN2I2M2NiMzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcbkBAIC0xMiw2ICsxMiwyNSBAQFxuIFxuICNpbmNsdWRlIFwiaW5pdHZhbHMuaFwiXG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7XG4rXHR7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIH0sXG4rXHR7IC5tYXggPSA4LFxuK1x0ICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfFxuKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuK1x0XHQgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfFxuKyNlbmRpZlxuK1x0XHQgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8XG4rXHRcdCAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGlmX2NvbWJbXSA9IHsge1xuK1x0LmxpbWl0cyA9IGlmX2xpbWl0cyxcbitcdC5uX2xpbWl0cyA9IEFSUkFZX1NJWkUoaWZfbGltaXRzKSxcbitcdC5tYXhfaW50ZXJmYWNlcyA9IDIsXG4rXHQubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsXG4rXHQuYmVhY29uX2ludF9pbmZyYV9tYXRjaCA9IHRydWUsXG4rfSB9O1xuK1xuIHN0YXRpYyB2b2lkXG4gbXQ3NjAxdV9zZXRfd2xhbl9zdGF0ZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIHZhbCwgYm9vbCBlbmFibGUpXG4ge1xuQEAgLTU5OSw2ICs2MTgsNyBAQCBpbnQgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4gXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7XG4gXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19SQ19UQUJMRSk7XG4gXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBNRlBfQ0FQQUJMRSk7XG4rXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBORUVEU19VTklRVUVfU1RBX0FERFIpO1xuIFx0aHctXHUwMDNlbWF4X3JhdGVzID0gMTtcbiBcdGh3LVx1MDAzZW1heF9yZXBvcnRfcmF0ZXMgPSA3O1xuIFx0aHctXHUwMDNlbWF4X3JhdGVfdHJpZXMgPSAxO1xuQEAgLTYwNyw5ICs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aHctXHUwMDNldmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpO1xuIFxuIFx0U0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi1cdTAwM2VtYWNhZGRyKTtcbi1cbitcdHdpcGh5LVx1MDAzZWludGVyZmFjZV9tb2RlcyA9XG4rXHRcdEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfFxuKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfFxuKyNlbmRpZlxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8XG4rXHRcdEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7XG4rXHR3aXBoeS1cdTAwM2VpZmFjZV9jb21iaW5hdGlvbnMgPSBpZl9jb21iO1xuK1x0d2lwaHktXHUwMDNlbl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpO1xuIFx0d2lwaHktXHUwMDNlZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SO1xuLVx0d2lwaHktXHUwMDNlaW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0d2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xuIFxuIFx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0NRTV9SU1NJX0xJU1QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXG5pbmRleCBjYTljZjYyOGViMTBkLi41ZTJkZWMxMzEzMzFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuQEAgLTExOCwxOSArMTE4LDI3IEBAIHUxNiBtdDc2X21hY190eF9yYXRlX3ZhbChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcbiBcdFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXG4gXHRcdFx0YncgPSAxO1xuIFx0fSBlbHNlIHtcbi1cdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyO1xuLVx0XHRpbnQgYmFuZCA9IGRldi1cdTAwM2VjaGFuZGVmLmNoYW4tXHUwMDNlYmFuZDtcbi1cdFx0dTE2IHZhbDtcbi1cbi1cdFx0ciA9IFx1MDAyNmRldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tiYW5kXS1cdTAwM2ViaXRyYXRlc1tyYXRlLVx1MDAzZWlkeF07XG4tXHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxuLVx0XHRcdHZhbCA9IHItXHUwMDNlaHdfdmFsdWVfc2hvcnQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlO1xuIFxuLVx0XHRwaHkgPSB2YWwgXHUwMDNlXHUwMDNlIDg7XG4tXHRcdHJhdGVfaWR4ID0gdmFsIFx1MDAyNiAweGZmO1xuLVx0XHRidyA9IDA7XG4rXHRcdGludCBiYW5kID0gZGV2LVx1MDAzZWNoYW5kZWYuY2hhbi1cdTAwM2ViYW5kO1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9XG4rXHRcdFx0ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWJhbmRzW2JhbmRdO1xuK1xuK1x0XHRpZiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgcmF0ZS1cdTAwM2VpZHggXHUwMDNlPSBzYmFuZC1cdTAwM2VuX2JpdHJhdGVzKSB7XG4rXHRcdFx0cGh5ID0gTVRfUEhZX1RZUEVfQ0NLO1xuK1x0XHRcdHJhdGVfaWR4ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPVxuK1x0XHRcdFx0XHUwMDI2c2JhbmQtXHUwMDNlYml0cmF0ZXNbcmF0ZS1cdTAwM2VpZHhdO1xuK1x0XHRcdHUxNiB2YWw7XG4rXG4rXHRcdFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpXG4rXHRcdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdHZhbCA9IHItXHUwMDNlaHdfdmFsdWU7XG4rXG4rXHRcdFx0cGh5ID0gdmFsIFx1MDAzZVx1MDAzZSA4O1xuK1x0XHRcdHJhdGVfaWR4ID0gdmFsIFx1MDAyNiAweGZmO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyYXRldmFsID0gRklFTERfUFJFUChNVF9SWFdJX1JBVEVfTUNTLCByYXRlX2lkeCk7XG5AQCAtMjY0LDEzICsyNzIsMTMgQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKVxuIFx0XHRtdDc2X2NsZWFyKGRldiwgTVRfQVVUT19SU1BfQ0ZHLCBNVF9BVVRPX1JTUF9QUkVBTUJfU0hPUlQpO1xuIH1cbiBcbi12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpXG4rdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIHtcbiBcdHUzMiB2YWwgPSBtdDc2MDF1X3JyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHKTtcbiBcbi1cdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHxcbi1cdFx0IE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxuLVx0XHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4pO1xuK1x0dmFsIFx1MDAyNj0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbitcdFx0IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7XG4gXG4gXHRpZiAoIWVuYWJsZSkge1xuIFx0XHRtdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpO1xuQEAgLTI3OSw5ICsyODcsMjIgQEAgdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIFxuIFx0dmFsIFx1MDAyNj0gfk1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUw7XG4gXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMLCBpbnRlcnZhbCBcdTAwM2NcdTAwM2MgNCkgfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47XG4rXHQgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47XG4rXG4rXHQvKiBBUCBNb2RlICovXG4rXHRpZiAodmlmIFx1MDAyNlx1MDAyNiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcbitcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykpXG4rXHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDMpIHxcbitcdFx0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7XG4rXHQvKiBJQlNTIC8gQWQtSG9jIE1vZGUgKi9cbitcdGVsc2UgaWYgKHZpZiBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpXG4rXHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDIpIHxcbitcdFx0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7XG4rXHQvKiBTdGF0aW9uIG1vZGUgKi9cbitcdGVsc2VcbitcdFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMSk7XG4rXG4rXHRtdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtdDc2MDF1X2NoZWNrX21hY19lcnIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG5AQCAtMzkzLDYgKzQxNCwzOCBAQCB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4gXHRcdCAgIEZJRUxEX1BSRVAoTVRfTUFYX0xFTl9DRkdfQU1QRFUsIG1pbl9mYWN0b3IpKTtcbiB9XG4gXG4raW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4rXHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LVx1MDAzZWh3LCB2aWYsIDApO1xuK1x0c3RydWN0IG10NzZfdHh3aSAqdHh3aTtcbitcdGludCBlcnIsIHdvcmRzO1xuK1xuK1x0aWYgKCFza2IpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVVNCIGRldmljZXMgYWxyZWFkeSByZXNlcnZlIGVub3VnaCBza2IgaGVhZHJvb20gKi9cbitcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHR4d2kgPSAoc3RydWN0IG10NzZfdHh3aSAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbitcdG1lbXNldCh0eHdpLCAwLCBzaXplb2YoKnR4d2kpKTtcbitcbitcdHR4d2ktXHUwMDNld2NpZCA9IDA7XG4rXHR0eHdpLVx1MDAzZWxlbl9jdGwgPSBjcHVfdG9fbGUxNihza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbitcdHR4d2ktXHUwMDNlcmF0ZV9jdGwgPSBjcHVfdG9fbGUxNigwKTtcbitcbitcdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpO1xuK1x0ZXJyID0gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgTVRfQkVBQ09OX0JBU0UsXG4rXHRcdFx0XHQgICAgICAgKGNvbnN0IHUzMiAqKXNrYi1cdTAwM2VkYXRhLCB3b3Jkcyk7XG4rXHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIG10NzZfbWFjX3Byb2Nlc3NfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLCB1MTYgcmF0ZSlcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmhcbmluZGV4IDU0YmQ0ZmFjNTRkODMuLjUyODc1NmNjZjQ3MjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG5AQCAtMTY3LDUgKzE2Nyw2IEBAIHN0cnVjdCBtdDc2X3R4X3N0YXR1c1xuIG10NzYwMXVfbWFjX2ZldGNoX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XG4gdm9pZCBtdDc2X3NlbmRfdHhfc3RhdHVzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXMgKnN0YXQpO1xuIHZvaWQgbXQ3NjAxdV9zZXRfbWFjYWRkcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpO1xuLVxuK2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbmluZGV4IDA1YmE0M2UxOTg1YzguLjQzODllMzMyZGZlMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbkBAIC0xNDksNyArMTQ5LDcgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHQgKlx0IHJ0MngwMCBkb2Vzbid0IHNlZW0gdG8gYmUgYm90aGVyZWQgdGhvdWdoLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWJzc2lkKSlcbi1cdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgZmFsc2UsIDApO1xuK1x0XHRcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTtcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykge1xuQEAgLTE2MSw3ICsxNjEsMjAgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0fVxuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpXG4tXHRcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuK1x0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuK1xuK1x0aWYgKChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT04pIFx1MDAyNlx1MDAyNiB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcbitcdFx0bXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihkZXYsIHZpZiwgaW5mbyk7XG4rXG4rXHRpZiAoKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbitcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkge1xuK1x0XHRpZiAoaW5mby1cdTAwM2VlbmFibGVfYmVhY29uKVxuK1x0XHRcdG10NzZfc2V0KGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLFxuK1x0XHRcdFx0IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuK1x0XHRlbHNlXG4rXHRcdFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyxcbitcdFx0XHRcdCAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuK1x0fVxuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0hUIHx8IGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVClcbiBcdFx0bXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oZGV2LCBpbmZvLVx1MDAzZXVzZV9jdHNfcHJvdCxcbkBAIC0xODMsNiArMTk2LDQzIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuIH1cbiBcbitzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4rXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZilcbit7XG4rXHRzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LVx1MDAzZXByaXY7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbitcbitcdC8qIENsZWFyIHRoZSB3Y2lkIFRhYmxlICovXG4rXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgMTI4OyBpKyspXG4rXHRcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTtcbitcbitcdC8qIFNldCBwcmUgVEJUVCB0byA2bXMgKi9cbitcdG10NzZfcm13X2ZpZWxkKGRldiwgTVRfSU5UX1RJTUVSX0NGRywgTVRfSU5UX1RJTUVSX0NGR19QUkVfVEJUVCwgNik7XG4rXHRtdDc2X3NldChkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTtcbitcbitcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGxpbmtfY29uZi1cdTAwM2ViZWFjb25faW50KTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXQ3NjAxdV9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXG4re1xuK1x0c3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody1cdTAwM2Vwcml2O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xuK1xuK1x0bXQ3Nl9jbGVhcihkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuK31cbitcbiBzdGF0aWMgaW50XG4gbXQ3Nl93Y2lkX2FsbG9jKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIHtcbkBAIC00MTksNiArNDY5LDggQEAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XG4gXHQuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsXG4gXHQuY29uZmlndXJlX2ZpbHRlciA9IG10NzZfY29uZmlndXJlX2ZpbHRlcixcbiBcdC5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLFxuK1x0LnN0YXJ0X2FwID0gbXQ3NjAxdV9zdGFydF9hcCxcbitcdC5zdG9wX2FwID0gbXQ3NjAxdV9zdG9wX2FwLFxuIFx0LnN0YV9hZGQgPSBtdDc2MDF1X3N0YV9hZGQsXG4gXHQuc3RhX3JlbW92ZSA9IG10NzYwMXVfc3RhX3JlbW92ZSxcbiBcdC5zdGFfbm90aWZ5ID0gbXQ3NjAxdV9zdGFfbm90aWZ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcbmluZGV4IDExOGQ0MzcwNzg1MzcuLjczNjZlMWM0NzYzMzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcbkBAIC0zNTksNyArMzU5LDggQEAgdm9pZCBtdDc2MDF1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfcHJvdGVjdGlvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBsZWdhY3lfcHJvdCxcbiBcdFx0XHRcdGludCBodF9tb2RlKTtcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4rdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKTtcbiB2b2lkXG4gbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggaWR4LCB1OCB2aWZfaWR4LCB1OCAqbWFjKTtcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xuaW5kZXggNWFlZWFjMGRkOWZlNy4uNDdjNzhjNGZmNTE0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXG5AQCAtMjcsNiArMjcsMTQgQEAgc3RhdGljIHU4IHEyaHdxKHU4IHEpXG4gc3RhdGljIHU4IHNrYjJxKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHFpZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuK1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1xuK1x0aWYgKGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuK1x0ICAgIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkge1xuK1x0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pO1xuK1x0XHRyZXR1cm4gcTJod3EoTVRfVFhRX1ZPKTtcbitcdH1cbiBcbiBcdGlmIChXQVJOX09OKHFpZCBcdTAwM2U9IE1UX1RYUV9QU0QpKSB7XG4gXHRcdHFpZCA9IE1UX1RYUV9CRTtcbkBAIC0xMzQsNiArMTQyLDkgQEAgbXQ3NjAxdV9wdXNoX3R4d2koc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSBcdTAwMjZpbmZvLVx1MDAzZWNvbnRyb2wucmF0ZXNbMF07XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0Ym9vbCBpc19tZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpO1xuK1x0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cdTAwM2VhZGRyMSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBpc19wcm9iZTtcbiBcdHUzMiBwa3RfaWQ7XG5AQCAtMTQ4LDE0ICsxNTksMTQgQEAgbXQ3NjAxdV9wdXNoX3R4d2koc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICAgaW5mby1cdTAwM2Vjb250cm9sLnJhdGVzLCAxKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgIXJhdGUtXHUwMDNlY291bnQpXG4rXHRpZiAoIWlzX21nbXQgXHUwMDI2XHUwMDI2IChyYXRlLVx1MDAzZWlkeCBcdTAwM2MgMCB8fCAhcmF0ZS1cdTAwM2Vjb3VudCkpXG4gXHRcdHJhdGVfY3RsID0gd2NpZC1cdTAwM2V0eF9yYXRlO1xuIFx0ZWxzZVxuIFx0XHRyYXRlX2N0bCA9IG10NzZfbWFjX3R4X3JhdGVfdmFsKGRldiwgcmF0ZSwgXHUwMDI2bnNzKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHR4d2ktXHUwMDNlcmF0ZV9jdGwgPSBjcHVfdG9fbGUxNihyYXRlX2N0bCk7XG4gXG4tXHRpZiAoIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpXG4rXHRpZiAoIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgXHUwMDI2XHUwMDI2IHN0YSBcdTAwMjZcdTAwMjYgIWlzX21jYXN0KVxuIFx0XHR0eHdpLVx1MDAzZWFja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX1JFUTtcbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpXG4gXHRcdHR4d2ktXHUwMDNlYWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTtcbkBAIC0xOTcsNiArMjA4LDggQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXG4gXHRzdHJ1Y3QgbXQ3Nl9zdGEgKm1zdGEgPSBOVUxMO1xuIFx0c3RydWN0IG10NzZfd2NpZCAqd2NpZCA9IGRldi1cdTAwM2Vtb25fd2NpZDtcbiBcdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4rXHRib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLVx1MDAzZWFkZHIxKTtcbiBcdGludCBwa3RfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGludCBod19xID0gc2tiMnEoc2tiKTtcbiBcbkBAIC0yMTEsNyArMjI0LDcgQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXG4gXHRpZiAoc3RhKSB7XG4gXHRcdG1zdGEgPSAoc3RydWN0IG10NzZfc3RhICopIHN0YS1cdTAwM2VkcnZfcHJpdjtcbiBcdFx0d2NpZCA9IFx1MDAyNm1zdGEtXHUwMDNld2NpZDtcbi1cdH0gZWxzZSBpZiAodmlmKSB7XG4rXHR9IGVsc2UgaWYgKHZpZiBcdTAwMjZcdTAwMjYgaXNfbWNhc3QpIHtcbiBcdFx0c3RydWN0IG10NzZfdmlmICptdmlmID0gKHN0cnVjdCBtdDc2X3ZpZiAqKXZpZi1cdTAwM2VkcnZfcHJpdjtcbiBcbiBcdFx0d2NpZCA9IFx1MDAyNm12aWYtXHUwMDNlZ3JvdXBfd2NpZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjM1LjA1OTI5ODY5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU4MzEzNjI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzYwMVUgRHJpdmVyIFBhdGNoIGZvciBNdWx0aS1JbnRlcmZhY2UgU3VwcG9ydCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgZW5oYW5jaW5nIHRoZSBgbXQ3NjAxdWAgZHJpdmVyIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyBsaWtlIEFQLCBNZXNoLCBQMlAsIEFkaG9jLCBhbmQgU3RhdGlvbiBtb2Rlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IHN0ZXAsIGV4cGFuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZHJpdmVyIGNvbnNpZGVyYWJseS4gTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczpcblxuRmlyc3QsIGluIGBpbml0LmNgLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBpZl9saW1pdHNgIGFuZCBgaWZfY29tYmAgaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZmxleGlibGUgYXJjaGl0ZWN0dXJlIGNhcGFibGUgb2YgbWFuYWdpbmcgbXVsdGlwbGUgY29uY3VycmVudCBpbnRlcmZhY2VzLCBhbmQgaXQncyBhbHNvIHNldHRpbmcgbmVjZXNzYXJ5IGludGVyZmFjZSBtb2Rlcy4gU2V0dGluZyBgTkVFRFNfVU5JUVVFX1NUQV9BRERSYCBpbiB0aGUgaGFyZHdhcmUgaGludHMgYXQgdGhlIGRyaXZlcidzIGNhcGFiaWxpdHkgdG8gaGFuZGxlIHVuaXF1ZSBNQUMgYWRkcmVzc2VzIGZvciBzdGF0aW9ucyBpbiBkaWZmZXJlbnQgbW9kZXMuXG5cbk1vdmluZyB0byBgbWFjLmNgLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGFyZSBzdHJhaWdodGZvcndhcmQg4oCTIGFkZHJlc3NpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUga2V5IGhlcmUsIHRob3VnaCwgaXMgdGhlIGNoYW5nZSB0byBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAuIEl0J3Mgbm93IHRha2luZyBhIGBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmYCB3aGljaCBpcyBjcnVjaWFsLCBiZWNhdXNlIHRoaXMgY2hhbmdlLCBjb3VwbGVkIHdpdGggdGhlIGFkZGl0aW9ucyBpbiBgbWFpbi5jYCBhbGxvd3MgbWUgdG8gY29uZmlndXJlIFRTRiAoVGltZXN0YW1wIGNvdW50ZXIpIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBpbnRlcmZhY2UgdHlwZSAoQVAsIEFkLUhvYywgb3IgU3RhdGlvbikuIFRoZSBuZXcgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nOyBpdCBhbGxvY2F0ZXMgYW4gU0tCIGZvciB0aGUgYmVhY29uLCBwdXNoZXMgYSBgc3RydWN0IG10NzZfdHh3aWAgaGVhZGVyLCBpbml0aWFsaXplcyBpdCwgYW5kIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBkZXZpY2UgdXNpbmcgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AuXG5cbkluIGBtYWluLmNgLCB0aGUgdXBkYXRlcyB0byBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBhcmUgY3JpdGljYWwuIENhbGxpbmcgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgIHdpdGggYHZpZmAgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIG5ldyBoYW5kbGluZyBmb3IgYEJTU19DSEFOR0VEX0JFQUNPTmAgYW5kIGBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRGAgaXMgZXhwZWN0ZWQgYW5kIHJlcXVpcmVkIGZvciBtYW5hZ2luZyB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbi4gQWRkaW5nIGBtdDc2MDF1X3N0YXJ0X2FwYCBhbmQgYG10NzYwMXVfc3RvcF9hcGAgdG8gYGllZWU4MDIxMV9vcHNgIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZW50cnkgcG9pbnRzIGZvciBBUCBtYW5hZ2VtZW50LCB3aGljaCB3aWxsIGJlIGVzc2VudGlhbC5cblxuRmluYWxseSwgYHR4LmNgIGhhcyBjaGFuZ2VzIGNlbnRlcmVkIGFyb3VuZCBmcmFtZSBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWUgbWFuYWdlbWVudC4gVGhlIG1vZGlmaWNhdGlvbiB0byBgc2tiMnFgIGZvciBtYW5hZ2VtZW50IGFuZCBpbmplY3RlZCBmcmFtZXMgbWFrZXMgc2Vuc2UgZm9yIFFvUy4gYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYG10NzYwMXVfdHhgIGhhdmUgdGhlIHJpZ2h0IGNoZWNrcyBmb3IgbXVsdGljYXN0cyBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2QgZXhwZWN0IHRvIHNlZS5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGFzIGl0IGNvbmNlcm5zIG1lIGhlcmUsIEkgd2FudCB0byBhc3Nlc3MgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgcHJldHR5IGNsZWFuLiBUaGUgYHR4d2lgIGlzIGRlZmluaXRlbHkgemVyb2VkLiBUaGUgZGF0YSB3cml0dGVuIHZpYSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBvcmlnaW5hdGVzIGZyb20gYHNrYmAuIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYCBpcyB1c2VkLCBhbmQgdGhlIGJlYWNvbiBpcyBidWlsdCBieSBtYWM4MDIxMS4gV2hhdCdzIGNvbmNlcm5pbmcgaXMgdGhhdCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyB0byBVU0IgZG9lc24ndCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdGhlIGhhcmR3YXJlLiBLTVNBTiB3b3VsZG4ndCBjb21wbGFpbiBhYm91dCBkYXRhIGJlaW5nIHNlbnQgdG8gaGFyZHdhcmUgdmlhIGEgVVNCIHNpbmNlIGl0IGNhbid0IGRldGVjdCBpdCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCB3cml0ZXMgdG8gVVNCIGRpcmVjdGx5LCBzbyBJIHdhbnQgdG8ga25vdyBpZiBpdCB1c2VzIERNQS4gSSBzaG91bGQgY2hlY2sgdGhhdCBmdW5jdGlvbiB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjQ2LjY0MjQzOTY4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MDIxMzg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmM9MTkxPXN0YXRpYyBpbnQgbXQ3NjAxdV9pbml0X3djaWRfbWVtKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jOjIwNTpcXHRyZXQgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9XQ0lEX0FERFJfQkFTRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMDYtXFx0XFx0XFx0XFx0ICAgICAgIHZhbHMsIE5fV0NJRFMgKiAyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jPTIxMj1zdGF0aWMgaW50IG10NzYwMXVfaW5pdF9rZXlfbWVtKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jOjIxNjpcXHRyZXR1cm4gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgTVRfU0tFWV9NT0RFX0JBU0VfMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMTctXFx0XFx0XFx0XFx0XFx0dmFscywgQVJSQVlfU0laRSh2YWxzKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYz0yMjA9c3RhdGljIGludCBtdDc2MDF1X2luaXRfd2NpZF9hdHRyX21lbShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYzoyMzI6XFx0cmV0ID0gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgTVRfV0NJRF9BVFRSX0JBU0UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjMzLVxcdFxcdFxcdFxcdCAgICAgICB2YWxzLCBOX1dDSURTICogMik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDQxLVxcdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cXHUwMDNlbGVuLCA0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQ0MjpcXHRlcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQ0My1cXHRcXHRcXHRcXHQgICAgICAgKGNvbnN0IHUzMiAqKXNrYi1cXHUwMDNlZGF0YSwgd29yZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMTA9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjM5OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNDAtXFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyNjQ6XFx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIG9mZnNldCArIGNudCAqIDQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNjUtXFx0XFx0XFx0XFx0XFx0ZGF0YSArIGNudCwgbiAtIGNudCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaD0zMjY9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zMjctXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBtdDc2X3JlZ19wYWlyICpkYXRhLCBpbnQgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaDozMjg6aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zMjktXFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdXNiLmM9MjEzPXZvaWQgbXQ3NjAxdV93cl9jb3B5KHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYy0yMTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYzoyMTk6XFx0bXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgb2Zmc2V0LCBkYXRhLCBsZW4gLyA0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3VzYi5jLTIyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjQ4LjkxMjY1OTM5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc4OTM2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGJ1cnN0IHdyaXRlIG9wZXJhdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCB3aXRoaW4gdGhlIGBtY3UuY2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBmdW5jdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSwgb3IgcGVyaGFwcyB3aGVyZSB0aGV5J3JlIGhhbmRsaW5nIHNvbWUgcXVpcmt5IGhhcmR3YXJlIGJlaGF2aW9yIHRoYXQgbmVlZHMgYSBjbG9zZXIgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHRoZSByZWdpc3RlciB3cml0ZXMuIElzIGl0IG9wdGltaXplZD8gQXJlIHRoZXkgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBvciBkYXRhIGJ1ZmZlciBpc3N1ZXM/IEknbGwgcHJvYmFibHkgbG9vayBmb3IgcG90ZW50aWFsIGludGVycnVwdCBkaXNhYmxpbmcsIGNhY2hlIGZsdXNoaW5nLCBvciBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgY29tbW9ubHkgbmVlZGVkIHdpdGggYnVyc3Qgd3JpdGVzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjkzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6NTEuOTkxNTk3ODUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTIyMTA3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMTA9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjM5OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNDAtXFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg9MzI2PWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3Nl9yZWdfcGFpciAqZGF0YSwgaW50IGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg6MzI4OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI5LVxcdFxcdFxcdCAgICAgY29uc3QgdTMyICpkYXRhLCBpbnQgbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjU0LjExMzcxMTk1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUxOTQyODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBjb2RlIHJlZmVyZW5jZTpcblxuKipEaXZpbmcgaW50byBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhhdCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBmdW5jdGlvbiB3aXRoaW4gYG1jdS5jYC4gSSdtIGd1ZXNzaW5nIHRoaXMgaGFuZGxlcyB0aGUgbG93LWxldmVsIGJ1cnN0IHJlZ2lzdGVyIHdyaXRpbmcgZm9yIHRoZSBNVDc2MDFVIGNoaXBzZXQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgdGhlIGRldmljZS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGFkZHJlc3Npbmcgc2NoZW1lLCB0aGUgZGF0YSBmb3JtYXQgaXQgZXhwZWN0cywgYW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMgaXTigJlzIHRhcmdldGluZy4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgb3B0aW1pemluZyB0aGUgd3JpdGUgcHJvY2VzcywgbWF5YmUgYnkgZ3JvdXBpbmcgd3JpdGVzIHRvIHJlZHVjZSBvdmVyaGVhZCwgdG8gZW5zdXJlIGVmZmljaWVuY3kuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBpdCdzIHVzaW5nIChsaWtlbHkgVVNCIG9yIFNQSSwgZ2l2ZW4gdGhlIGNvbnRleHQpIGFuZCB3aGV0aGVyIGl0IG1hbmFnZXMgYW55IGRhdGEgYnVmZmVyaW5nIG9yIGVycm9yIGNoZWNraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIE1UNzYwMVUgZHJpdmVyIGFyY2hpdGVjdHVyZSB0b28sIHdoZXJlIGRvZXMgdGhpcyBmaXQ/IFdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gb2YgZ2V0dGluZyB0aGlzIGNoaXBzZXQgb3BlcmF0aW5nLCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gYXQgYSB2ZXJ5IGdyYW51bGFyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjU3Ljg2NTY1NzkzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzOTpcXHRpbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxcbiAyNDA6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxcbiAyNDE6XFx0e1xcbiAyNDI6XFx0XFx0Y29uc3QgaW50IG1heF9yZWdzX3Blcl9jbWQgPSBJTkJBTkRfUEFDS0VUX01BWF9MRU4gLyA0IC0gMTtcXG4gMjQzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDI0NDpcXHRcXHRpbnQgY250LCBpLCByZXQ7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGlmICghbilcXG4gMjQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRjbnQgPSBtaW4obWF4X3JlZ3NfcGVyX2NtZCwgbik7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdHNrYiA9IGFsbG9jX3NrYihjbnQgKiA0ICsgTVRfRE1BX0hEUl9MRU4gKyA0LCBHRlBfS0VSTkVMKTtcXG4gMjUyOlxcdFxcdGlmICghc2tiKVxcbiAyNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI1NDpcXHRcXHRza2JfcmVzZXJ2ZShza2IsIE1UX0RNQV9IRFJfTEVOKTtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0c2tiX3B1dF9sZTMyKHNrYiwgTVRfTUNVX01FTU1BUF9XTEFOICsgb2Zmc2V0KTtcXG4gMjU3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKylcXG4gMjU4OlxcdFxcdFxcdHNrYl9wdXRfbGUzMihza2IsIGRhdGFbaV0pO1xcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHRyZXQgPSBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0JVUlNUX1dSSVRFLCBjbnQgPT0gbik7XFxuIDI2MTpcXHRcXHRpZiAocmV0KVxcbiAyNjI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIG9mZnNldCArIGNudCAqIDQsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHRcXHRkYXRhICsgY250LCBuIC0gY250KTtcXG4gMjY2OlxcdH1cXG4gMjY3OlxcdFxcbiAyNjg6XFx0c3RydWN0IG10NzZfZndfaGVhZGVyIHtcXG4gMjY5OlxcdFxcdF9fbGUzMiBpbG1fbGVuO1xcbiAyNzA6XFx0XFx0X19sZTMyIGRsbV9sZW47XFxuIDI3MTpcXHRcXHRfX2xlMTYgYnVpbGRfdmVyO1xcbiAyNzI6XFx0XFx0X19sZTE2IGZ3X3ZlcjtcXG4gMjczOlxcdFxcdHU4IHBhZFs0XTtcXG4gMjc0OlxcdFxcdGNoYXIgYnVpbGRfdGltZVsxNl07XFxuIDI3NTpcXHR9O1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRzdHJ1Y3QgbXQ3Nl9mdyB7XFxuIDI3ODpcXHRcXHRzdHJ1Y3QgbXQ3Nl9md19oZWFkZXIgaGRyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDo1Ny44NjU3MzM3ODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NDI2MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCZWFjb24gRnJhbWUgSW50ZWdyaXR5IGluIE1UNzYwMVUgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBiZWFjb24gZnJhbWVzIGFyZSBoYW5kbGVkIGluIHRoZSBNVDc2MDFVIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgdGhlbSB0byB0aGUgaGFyZHdhcmUuIEl0IHNlZW1zIHRoYXQgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB0YWtpbmcgdGhlIGJlYWNvbiBkYXRhLCBjb3B5aW5nIGl0IGludG8gYSBuZXcgU0tCLCBhbmQgdGhlbiB0cmFuc21pdHRpbmcgaXQgdXNpbmcgYG10NzYwMXVfbWN1X21zZ19zZW5kYC4gVGhlIGRhdGEgaXRzZWxmIG9yaWdpbmF0ZXMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdpdGhpbiB0aGUgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGZ1bmN0aW9uLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgc3RhcnRpbmcgdG8gcmluZy4gIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgNC1ieXRlIHdvcmRzIHRvIGJlIHdyaXR0ZW4gdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIEkgYW0gdGhpbmtpbmcgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgYmVhY29uIGRhdGEsIGlzbid0IGEgbXVsdGlwbGUgb2YgNCwgdGhpcyBkaXZpc2lvbiB3aWxsIHJlYWQgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHByb3ZpZGVkIGRhdGEsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBjb25jZXJuaW5nLCBzaW5jZSBpdCBtZWFucyB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2UgZGF0YSB0aGF0IGlzbid0IHBhcnQgb2YgdGhlIGJlYWNvbi5cblxuSSByZWFsbHkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBkaWcgZGVlcGVyLiBUaGUgYHNrYmAgdXNlZCBoZXJlIGlzIHJldHVybmVkIGJ5IGBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtXHUwMDNlaHcsIHZpZiwgMClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIGlzIGFsbG9jYXRpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIGBza2JgIHRvIGRldGVybWluZSB0aGUgdmFsaWRpdHkgb2Ygb3VyIHdyaXRlIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGtub3cgdGhlIGxlbmd0aCBvZiB0aGlzIGBza2JgIGFuZCBob3cgaXRzIGRhdGEgZmllbGQgaXMgbWFuYWdlZC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgbXkgYW5zd2VyLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBpZWVlODAyMTFfYmVhY29uX2dldGAgYW5kIGNoZWNrIHRoYXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBiZWFjb24gZGF0YSBlbnN1cmUgdGhlIHNhZmV0eSBvZiB0aGlzIHdyaXRlIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTowMy4zNDk5OTk0OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzcxNzcxMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2JlYWNvbl9nZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NjYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS84MDIxMS9tYWM4MDIxMS1hZHZhbmNlZC5yc3Q9NzU9c3VwcG9ydCBmb3IgcG93ZXJzYXZpbmcgY2xpZW50c1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpLzgwMjExL21hYzgwMjExLWFkdmFuY2VkLnJzdC04My1cXHRpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpLzgwMjExL21hYzgwMjExLWFkdmFuY2VkLnJzdDo4NDpcXHRpZWVlODAyMTFfYmVhY29uX2dldFxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS84MDIxMS9tYWM4MDIxMS1hZHZhbmNlZC5yc3QtODUtXFx0aWVlZTgwMjExX3N0YV9lb3NwXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTE2NDg9c3RhdGljIGludCBhdGgxMGtfbWFjX3NldHVwX2Jjbl90bXBsKHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtMTY2My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjE2NjQ6XFx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtMTY2NS1cXHRpZiAoIWJjbikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYz0zODQxPXZvaWQgYXRoMTBrX3dtaV9ldmVudF9ob3N0X3N3YmEoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jLTM5MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYzozOTE5OlxcdFxcdGJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGFyLVxcdTAwM2VodywgYXJ2aWYtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYy0zOTIwLVxcdFxcdGlmICghYmNuKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTE1NDY9c3RhdGljIGludCBhdGgxMWtfbWFjX3NldHVwX2Jjbl90bXBsX2VtYShzdHJ1Y3QgYXRoMTFrX3ZpZiAqYXJ2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE1NTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzoxNTU1OlxcdGJlYWNvbnMgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCh0eF9hcnZpZi1cXHUwMDNlYXItXFx1MDAzZWh3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTU1Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgdHhfYXJ2aWYtXFx1MDAzZXZpZiwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTE2MDM9c3RhdGljIGludCBhdGgxMWtfbWFjX3NldHVwX2Jjbl90bXBsX21ic3NpZChzdHJ1Y3QgYXRoMTFrX3ZpZiAqYXJ2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE2MjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzoxNjIxOlxcdGJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKGh3LCB2aWYsIFxcdTAwMjZvZmZzLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE2MjItXFx0aWYgKCFiY24pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTc1MT1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfYmNuX3RtcGxfZW1hKHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTc2MTpcXHRiZWFjb25zID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGVfZW1hX2xpc3QoYXRoMTJrX2FyX3RvX2h3KHR4X2FydmlmLVxcdTAwM2VhciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNzYyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0eF9hcnZpZi1cXHUwMDNlYWh2aWYtXFx1MDAzZXZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTgwMD1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfYmNuX3RtcGwoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE4MzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxODM1OlxcdGJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKGF0aDEya19hcl90b19odyh0eF9hcnZpZi1cXHUwMDNlYXIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTgzNi1cXHRcXHRcXHRcXHRcXHQgICAgdHhfYXJ2aWYtXFx1MDAzZWFodmlmLVxcdTAwM2V2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jPTE5Mzg9YXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMtMTk0OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jOjE5NTA6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYy0xOTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jPTExMj1zdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aDlrX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYy0xMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jOjEzODpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMtMTM5LVxcdGlmIChza2IgPT0gTlVMTClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTE5MT1zdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjE3LVxcdC8qIEdldCBhIG5ldyBiZWFjb24gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzoyMTg6XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi1cXHUwMDNlaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjE5LVxcdGlmICghYmVhY29uKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYz0xNjE2PWludCBjYXJsOTE3MF91cGRhdGVfYmVhY29uKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCBib29sIHN1Ym1pdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jLTE2MjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmM6MTYzMDpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYXItXFx1MDAzZWh3LCBjYXJsOTE3MF9nZXRfdmlmKGN2aWYpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jLTE2MzEtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvbWFpbi5jPTc5OT1zdGF0aWMgdm9pZCB3Y24zNnh4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTM4LVxcdFxcdFxcdFxcdFxcdCAgICAgICB2aWYtXFx1MDAzZWFkZHIsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmM6OTM5OlxcdFxcdFxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShodywgdmlmLCBcXHUwMDI2dGltX29mZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dGltX2xlbiwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jPTE4MjE9c3RhdGljIHZvaWQgYjQzX3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M193bCAqd2wpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jLTE4MzUtXFx0ICogU2ltcGx5IHJlcXVlc3QgYSBuZXcgYmVhY29uIGFuZCBsZXQgbWFjODAyMTEgZG8gdGhlIGhhcmQgd29yay4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jOjE4MzY6XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod2wtXFx1MDAzZWh3LCB3bC1cXHUwMDNldmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jLTE4MzctXFx0aWYgKHVubGlrZWx5KCFiZWFjb24pKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYz0xMjMyPXN0YXRpYyB2b2lkIGI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYy0xMjQzLVxcdCAqIG1hYzgwMjExIGRvIHRoZSBoYXJkIHdvcmsuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYzoxMjQ0OlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVxcdTAwM2Vodywgd2wtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYy0xMjQ1LVxcdGlmICh1bmxpa2VseSghYmVhY29uKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jPTU4NT1icmNtc19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTY4Mi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNndsLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzo2ODM6XFx0XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFxcdTAwMjZ0aW1fb2Zmc2V0LCBOVUxMLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy02ODQtXFx0XFx0YnJjbXNfY19zZXRfbmV3X2JlYWNvbih3bC1cXHUwMDNld2xjLCBiZWFjb24sIHRpbV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYz05NDQ9c3RhdGljIGludCBicmNtc19vcHNfYmVhY29uX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy05NTItXFx0aWYgKHdsLVxcdTAwM2V3bGMtXFx1MDAzZXZpZilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzo5NTM6XFx0XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB3bC1cXHUwMDNld2xjLVxcdTAwM2V2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtOTU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnRpbV9vZmZzZXQsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmM9NTI1Mj1pbF9iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmMtNTI1Ni1cXHRfX2xlNjQgdGltZXN0YW1wO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bGVnYWN5L2NvbW1vbi5jOjUyNTc6XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bGVnYWN5L2NvbW1vbi5jLTUyNTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjY0PXN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yODYtXFx0LyogUHVsbCB1cGRhdGVkIEFQIGJlYWNvbiBmcm9tIG1hYzgwMjExLiB3aWxsIGZhaWwgaWYgbm90IGluIEFQIG1vZGUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6Mjg3OlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXFx1MDAzZWh3LCBwcml2LVxcdTAwM2ViZWFjb25fY3R4LVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yODgtXFx0aWYgKCFiZWFjb24pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4b24uYz0xODA9c3RhdGljIGludCBpd2xhZ25fdXBkYXRlX2JlYWNvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeG9uLmMtMTg1LVxcdGRldl9rZnJlZV9za2IocHJpdi1cXHUwMDNlYmVhY29uX3NrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jOjE4NjpcXHRwcml2LVxcdTAwM2ViZWFjb25fc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi1cXHUwMDNlaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jLTE4Ny1cXHRpZiAoIXByaXYtXFx1MDAzZWJlYWNvbl9za2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jPTE1ND1pbnQgaXdsX21sZF91cGRhdGVfYmVhY29uX3RlbXBsYXRlKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jLTE3OC0jZW5kaWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jOjE3OTpcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtbGQtXFx1MDAzZWh3LCB2aWYsIE5VTEwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYXAuYy0xODAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpbmtfY29uZi1cXHUwMDNlbGlua19pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmM9Njg3PV9pd2xfZGJnZnNfaW5qZWN0X2JlYWNvbl9pZShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZGVidWdmcy5jLTcxNy1cXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmM6NzE4OlxcdFxcdFxcdGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKG1sZC1cXHUwMDNlaHcsIHZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmMtNzE5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwsIGxpbmtfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jPTEzMDk9c3RhdGljIGludCBfaXdsX2RiZ2ZzX2luamVjdF9iZWFjb25faWUoc3RydWN0IGl3bF9tdm0gKm12bSwgY2hhciAqYmluLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jLTEzNDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jOjEzNTA6XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobXZtLVxcdTAwM2VodywgdmlmLCBOVUxMLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kZWJ1Z2ZzLmMtMTM1MS1cXHRpZiAoIWJlYWNvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM9MTE4MD1pbnQgaXdsX212bV9tYWNfY3R4dF9iZWFjb25fY2hhbmdlZChzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xMTg5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTE5MDpcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdm0tXFx1MDAzZWh3LCB2aWYsIE5VTEwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xMTkxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5rX2NvbmYtXFx1MDAzZWxpbmtfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz0xMzU9c3RhdGljIGludCBwNTRfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTQxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6MTQyOlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXFx1MDAzZWh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTQzLVxcdGlmICghYmVhY29uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmM9NDE3PXN0YXRpYyB2b2lkIGxidGZfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jLTQyOS1cXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmM6NDMwOlxcdFxcdFxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jLTQzMS1cXHRcXHRcXHRpZiAoYmVhY29uKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYz02Nzk9dm9pZCBsYnRmX2Jjbl9zZW50KHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy02OTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmM6Njk5OlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXFx1MDAzZWh3LCBwcml2LVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jLTcwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsOGsuYz01MTgyPW13bDhrX2Jzc19pbmZvX2NoYW5nZWRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmMtNTIyMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmM6NTIyMTpcXHRcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmMtNTIyMi1cXHRcXHRpZiAoc2tiICE9IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jPTMwPW10NzYwM191cGRhdGVfYmVhY29uX2l0ZXIodm9pZCAqcHJpdiwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jLTQxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jOjQyOlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG10NzZfaHcoZGV2KSwgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9iZWFjb24uYy00My1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTY2Nz1tdDc2MTVfbWN1X2FkZF9iZWFjb25fb2ZmbG9hZChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtNzAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjcwMTpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcXHUwMDI2b2ZmcywgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtNzAyLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MTAzNz1tdDc2MTVfbWN1X3VuaV9hZGRfYmVhY29uX29mZmxvYWQoc3RydWN0IG10NzYxNV9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEwODItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTA4MzpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdDc2X2h3KGRldiksIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEwODQtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MDJfYmVhY29uLmM9MTM3PW10NzZ4MDJfdXBkYXRlX2JlYWNvbl9pdGVyKHZvaWQgKnByaXYsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MDJfYmVhY29uLmMtMTQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYzoxNDc6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobXQ3Nl9odyhkZXYpLCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYy0xNDgtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yMDU3PWludCBtdDc5MTVfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0yMDg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjIwODY6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTIwODctXFx0aWYgKCFza2IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTEyNTA9bXQ3OTIxX21jdV91bmlfYWRkX2JlYWNvbl9vZmZsb2FkKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMjk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjEyOTk6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobXQ3Nl9odyhkZXYpLCB2aWYsIFxcdTAwMjZvZmZzLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzAwLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MjM4Mj1tdDc5MjVfbWN1X3VuaV9hZGRfYmVhY29uX29mZmxvYWQoc3RydWN0IG10NzkyeF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTI0MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MjQzMjpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdDc2X2h3KGRldiksIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTI0MzMtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYz0zMTYzPWludCBtdDc5OTZfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy0zMTkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjMxOTE6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXFx1MDAyNm9mZnMsIGxpbmtfY29uZi1cXHUwMDNlbGlua19pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtMzE5Mi1cXHRpZiAoZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiAhc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDE5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQyMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQyMS1cXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz00NDg9c3RhdGljIHZvaWQgbW04MXhfbWFjX2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtNDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6NDcyOlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1vcnMtXFx1MDAzZWh3LCB2aWYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTQ3My1cXHRpZiAoIWJlYWNvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYz0xMTU9aW50IHBsZnhsY19yZXN0b3JlX3NldHRpbmdzKHN0cnVjdCBwbGZ4bGNfbWFjICptYWMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMTI4LVxcdGlmIChtYWMtXFx1MDAzZXZpZikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzoxMjk6XFx0XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobWFjLVxcdTAwM2VodywgbWFjLVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy0xMzAtXFx0XFx0aWYgKGJlYWNvbikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTU4MD1zdGF0aWMgdm9pZCBwbGZ4bGNfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy01OTYtXFx0aWYgKGNoYW5nZXMgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT04pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6NTk3OlxcdFxcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtNTk4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jPTc0Mz1pbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jLTc1Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvcnQyeDAwL3J0MngwMHF1ZXVlLmM6NzU4OlxcdGludGYtXFx1MDAzZWJlYWNvbi1cXHUwMDNlc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocnQyeDAwZGV2LVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvcnQyeDAwL3J0MngwMHF1ZXVlLmMtNzU5LVxcdGlmICghaW50Zi1cXHUwMDNlYmVhY29uLVxcdTAwM2Vza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4MC9kZXYuYz0xMjgzPXN0YXRpYyB2b2lkIHJ0bDgxODBfYmVhY29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmMtMTI5Ny1cXHQvKiBncmFiIGEgZnJlc2ggYmVhY29uICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmM6MTI5ODpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmMtMTI5OS1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jPTEwNzU9c3RhdGljIHZvaWQgcnRsODE4N19iZWFjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYy0xMDg5LVxcdC8qIGdyYWIgYSBmcmVzaCBiZWFjb24gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYzoxMDkwOlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldiwgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYy0xMDkxLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4eHh4dS9jb3JlLmM9NTYxMD1zdGF0aWMgdm9pZCBydGw4eHh4dV9zZW5kX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsOHh4eHUvY29yZS5jLTU2MTMtXFx0c3RydWN0IHJ0bDh4eHh1X3ByaXYgKnByaXYgPSBody1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYzo1NjE0OlxcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYy01NjE1LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvY29yZS5jPTk3Nj1zdGF0aWMgdm9pZCBzZW5kX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9jb3JlLmMtOTc5LVxcdHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvY29yZS5jOjk4MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2NvcmUuYy05ODEtXFx0c3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYz0xMDIxPXN0YXRpYyB2b2lkIF9ydGxfcGNpX3ByZXBhcmVfYmNuX3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3BjaS5jLTEwNTQtXFx0LypOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYzoxMDU1OlxcdHBza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgbWFjLVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYy0xMDU2LVxcdGlmICghcHNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYz0xMjI2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnR3X2dldF9yc3ZkX3BhZ2Vfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jLTEyNTEtXFx0Y2FzZSBSU1ZEX0JFQUNPTjpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmM6MTI1MjpcXHRcXHRza2JfbmV3ID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFxcdTAwMjZ0aW1fb2Zmc2V0LCBOVUxMLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMtMTI1My1cXHRcXHRyc3ZkX3BrdC1cXHUwMDNldGltX29mZnNldCA9IHRpbV9vZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmM9NDY5OT1pbnQgcnR3ODlfZndfaDJjX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jLTQ3MjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jOjQ3MjQ6XFx0c2tiX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShydHdkZXYtXFx1MDAzZWh3LCB2aWYsIFxcdTAwMjZ0aW1fb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYy00NzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jPTQ3Nzk9aW50IHJ0dzg5X2Z3X2gyY191cGRhdGVfYmVhY29uX2JlKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYy00ODAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYzo0ODAzOlxcdHNrYl9iZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0ocnR3ZGV2LVxcdTAwM2VodywgdmlmLCBcXHUwMDI2dGltX29mZnNldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmMtNDgwNC1cXHRcXHRcXHRcXHRcXHQgICAgICBOVUxMLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTQyNT1pbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NDYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDQ3OlxcdG1hY19iY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYWRhcHRlci1cXHUwMDNlaHcsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDQ4LVxcdFxcdFxcdFxcdFxcdCAgIHZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9MzIxPXN0YXRpYyBpbnQgd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMoc3RydWN0IHdmeF92aWYgKnd2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTMyNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jOjMyNjpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLVxcdTAwM2V3ZGV2LVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTMyNy1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9MzQwPXN0YXRpYyBpbnQgd2Z4X3NldF9tZnBfYXAoc3RydWN0IHdmeF92aWYgKnd2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTM0Mi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd3ZpZl90b192aWYod3ZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYzozNDM6XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHd2aWYtXFx1MDAzZXdkZXYtXFx1MDAzZWh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtMzQ0LVxcdGNvbnN0IGludCBpZW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYz01ODg9c3RhdGljIGludCB3ZnhfdXBkYXRlX3RpbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtNTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM6NTk1OlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSh3dmlmLVxcdTAwM2V3ZGV2LVxcdTAwM2VodywgdmlmLCBcXHUwMDI2dGltX29mZnNldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTU5Ni1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnRpbV9sZW5ndGgsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jPTE2NjQ9c3RhdGljIGludCBjdzEyMDBfc2V0X3RpbV9pbXBsKHN0cnVjdCBjdzEyMDBfY29tbW9uICpwcml2LCBib29sIGFpZDBfYml0X3NldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0xNjc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYzoxNjc1OlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVxcdTAwM2VodywgcHJpdi1cXHUwMDNldmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0xNjc2LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dGltX29mZnNldCwgXFx1MDAyNnRpbV9sZW5ndGgsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jPTIxODk9c3RhdGljIGludCBjdzEyMDBfdXBsb2FkX2JlYWNvbihzdHJ1Y3QgY3cxMjAwX2NvbW1vbiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0yMjA3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYzoyMjA4OlxcdGZyYW1lLnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVxcdTAwM2VodywgcHJpdi1cXHUwMDNldmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0yMjA5LVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRpbV9vZmZzZXQsIFxcdTAwMjZ0aW1fbGVuLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmM9MTA3OD1zdGF0aWMgdm9pZCB3bDEyNTFfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmMtMTE4OS1cXHRpZiAoY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmM6MTE5MDpcXHRcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jLTExOTEtXFx0XFx0aWYgKCFiZWFjb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jPTQxMTc9c3RhdGljIGludCB3bGNvcmVfc2V0X2JlYWNvbl90ZW1wbGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMtNDEyNS1cXHRpbnQgaWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jOjQxMjY6XFx0c3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTQxMjctXFx0dTE2IHRtcGxfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jPTU1NjM9c3RhdGljIGNvbnN0IHZvaWQgKndsY29yZV9nZXRfYmVhY29uX2llKHN0cnVjdCB3bDEyNzEgKndsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL21haW4uYy01NTY4LVxcdHN0cnVjdCBza19idWZmICpiZWFjb24gPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmM6NTU2OTpcXHRcXHRpZWVlODAyMTFfYmVhY29uX2dldCh3bC1cXHUwMDNlaHcsIHdsMTJ4eF93bHZpZl90b192aWYod2x2aWYpLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTU1NzAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0yNDU3PXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2JlYWNvbl90eCh2b2lkICphcmcsIHU4ICptYWMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNDg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjI0ODk6XFx0XFx0ZW1hID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGVfZW1hX2xpc3QoaHcsIHZpZiwgbGlua19pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMjQ5MC1cXHRcXHRpZiAoIWVtYSB8fCAhZW1hLVxcdTAwM2VjbnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNDk5LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MjUwMDpcXHRcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCBsaW5rX2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNTAxLVxcdFxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM9MzU3PWludCB6ZF9yZXN0b3JlX3NldHRpbmdzKHN0cnVjdCB6ZF9tYWMgKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTQwMC1cXHRcXHRpZiAobWFjLVxcdTAwM2V2aWYgIT0gTlVMTCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jOjQwMTpcXHRcXHRcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChtYWMtXFx1MDAzZWh3LCBtYWMtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtNDAyLVxcdFxcdFxcdGlmIChiZWFjb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYz0xMTUxPXN0YXRpYyB2b2lkIHpkX2JlYWNvbl9kb25lKHN0cnVjdCB6ZF9tYWMgKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTExNzItXFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM6MTE3MzpcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChtYWMtXFx1MDAzZWh3LCBtYWMtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTE3NC1cXHRpZiAoYmVhY29uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM9MTI4MT1zdGF0aWMgdm9pZCB6ZF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTI5NS1cXHRcXHRpZiAoY2hhbmdlcyBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jOjEyOTY6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTI5Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jPTE0MzE9c3RhdGljIHZvaWQgYmVhY29uX3dhdGNoZG9nX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTQ1OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYzoxNDU5OlxcdFxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1hYy1cXHUwMDNlaHcsIG1hYy1cXHUwMDNldmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xNDYwLVxcdFxcdGlmIChiZWFjb24pIHtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NDA2OD1zdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTQ1OTQtICpcXHRkZWNyZW1lbnRlZCwgYW5kIHdoZW4gdGhleSByZWFjaCAxIHRoZSBkcml2ZXIgbXVzdCBjYWxsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo0NTk1OiAqXFx0aWVlZTgwMjExX2NzYV9maW5pc2goKS4gRHJpdmVycyB3aGljaCB1c2UgaWVlZTgwMjExX2JlYWNvbl9nZXQoKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNDU5Ni0gKlxcdGdldCB0aGUgY3NhIGNvdW50ZXIgZGVjcmVtZW50ZWQgYnkgbWFjODAyMTEsIGJ1dCBtdXN0IGNoZWNrIGlmIGl0IGlzXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU3NTU9c3RydWN0IGllZWU4MDIxMV9tdXRhYmxlX29mZnNldHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzYzLS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTc2NDogKiBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZSAtIGJlYWNvbiB0ZW1wbGF0ZSBnZW5lcmF0aW9uIGZ1bmN0aW9uXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzY1LSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01Nzg0PXN0cnVjdCBza19idWZmICpcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU3ODU6aWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01Nzg2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU3OTAtLyoqXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NzkxOiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9pbmRleCAtIEVNQSBiZWFjb24gdGVtcGxhdGUgZ2VuZXJhdGlvblxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc5Mi0gKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS5cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc5OC0gKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTc5OTogKiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMgYXMgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgwMC0gKiBidXQgcmV0dXJucyBhIGJlYWNvbiB0ZW1wbGF0ZSB3aGljaCBpbmNsdWRlcyBtdWx0aXBsZSBCU1NJRCBlbGVtZW50IGF0IHRoZVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODA1PXN0cnVjdCBza19idWZmICpcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4MDY6aWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGVfZW1hX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgwNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODIwPXN0cnVjdCBpZWVlODAyMTFfZW1hX2JlYWNvbnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODI4LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTgyOTogKiBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCAtIEVNQSBiZWFjb24gdGVtcGxhdGUgZ2VuZXJhdGlvblxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzMC0gKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS5cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzMy0gKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTgzNDogKiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMgYXMgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzNS0gKiBidXQgYWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBsaXN0IG9mIGFsbCBiZWFjb24gdGVtcGxhdGVzIHJlcXVpcmVkXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4NDQ9c3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODQ1OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg0Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg1My0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhIGxpc3QgcHJldmlvdXNseSBhY3F1aXJlZCBieSBjYWxsaW5nXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODU0OiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KClcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4NTUtICovXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODU2PXZvaWQgaWVlZTgwMjExX2JlYWNvbl9mcmVlX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfZW1hX2JlYWNvbnMgKmVtYV9iZWFjb25zKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg1OC0vKipcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4NTk6ICogaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIC0gYmVhY29uIGdlbmVyYXRpb24gZnVuY3Rpb25cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4NjAtICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4ODEtICovXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODgyOnN0cnVjdCBza19idWZmICppZWVlODAyMTFfYmVhY29uX2dldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODgzLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODg3LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg4ODogKiBpZWVlODAyMTFfYmVhY29uX2dldCAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODg5LSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODkzLSAqXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk0OiAqIFNlZSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oKS5cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4OTUtICpcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4OTY6ICogUmV0dXJuOiBTZWUgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKCkuXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODk3LSAqL1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg5ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYmVhY29uX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4OTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkwMS17XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1OTAyOlxcdHJldHVybiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHZpZiwgTlVMTCwgTlVMTCwgbGlua19pZCk7XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01OTAzLX1cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkxMS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbXBsaWNpdGx5IHdoZW5cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU5MTI6ICogaWVlZTgwMjExX2JlYWNvbl9nZXQvaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIGFyZSBjYWxsZWQsIGhvd2V2ZXIgaWYgdGhlXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01OTEzLSAqIGJlYWNvbiBmcmFtZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgZGV2aWNlLCB0aGUgZHJpdmVyIHNob3VsZCBjYWxsIHRoaXNcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NjEyOT1fX2xlMTYgaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTYxNDktICogTm90ZTogYnVmZmVyZWQgZnJhbWVzIGFyZSByZXR1cm5lZCBvbmx5IGFmdGVyIERUSU0gYmVhY29uIGZyYW1lIHdhc1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NjE1MDogKiBnZW5lcmF0ZWQgd2l0aCBpZWVlODAyMTFfYmVhY29uX2dldCgpIGFuZCB0aGUgbG93LWxldmVsIGRyaXZlciBtdXN0IHRodXNcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjYxNTE6ICogY2FsbCBpZWVlODAyMTFfYmVhY29uX2dldCgpIGZpcnN0LiBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKCkgcmV0dXJuc1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNjE1Mi0gKiBOVUxMIGlmIHRoZSBwcmV2aW91cyBnZW5lcmF0ZWQgYmVhY29uIHdhcyBub3QgRFRJTSwgc28gdGhlIGxvdy1sZXZlbCBkcml2ZXJcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NDg9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTA4LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE1MDk6XFx0Ym9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTUxMC1cXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTUyMDk9c3RhdGljIGludCBpZWVlODAyMTFfYmVhY29uX2FkZF90aW0oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy01MjE3LVxcdCAqIE5vdCB2ZXJ5IG5pY2UsIGJ1dCB3ZSB3YW50IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gY2FsbFxcbm5ldC9tYWM4MDIxMS90eC5jOjUyMTg6XFx0ICogaWVlZTgwMjExX2JlYWNvbl9nZXQoKSBhcyBhIHJlc3BvbnNlIHRvIHRoZSBzZXRfdGltKClcXG5uZXQvbWFjODAyMTEvdHguYy01MjE5LVxcdCAqIGNhbGxiYWNrLiBUaGF0LCBob3dldmVyLCBpcyBhbHJlYWR5IGludm9rZWQgdW5kZXIgdGhlXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz01NTA5PXN0YXRpYyB2b2lkXFxubmV0L21hYzgwMjExL3R4LmM6NTUxMDppZWVlODAyMTFfYmVhY29uX2dldF9maW5pc2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL3R4LmMtNTUxMS1cXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTU1OTU9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQvbWFjODAyMTEvdHguYzo1NTk2Ol9faWVlZTgwMjExX2JlYWNvbl9nZXRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL3R4LmMtNTU5Ny1cXHRcXHRcXHQgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy01NjU4LVxcbm5ldC9tYWM4MDIxMS90eC5jOjU2NTk6XFx0aWVlZTgwMjExX2JlYWNvbl9nZXRfZmluaXNoKGh3LCB2aWYsIGxpbmssIG9mZnMsIGJlYWNvbiwgc2tiLFxcbm5ldC9tYWM4MDIxMS90eC5jLTU2NjAtXFx0XFx0XFx0XFx0ICAgIGNoYW5jdHhfY29uZiwgY3NhX29mZl9iYXNlKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTU2Nzg9aWVlZTgwMjExX3MxZ19zaG9ydF9iZWFjb25fZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNTcwMy1cXG5uZXQvbWFjODAyMTEvdHguYzo1NzA0OlxcdGllZWU4MDIxMV9iZWFjb25fZ2V0X2ZpbmlzaChodywgdmlmLCBsaW5rLCBOVUxMLCBOVUxMLCBza2IsXFxubmV0L21hYzgwMjExL3R4LmMtNTcwNS1cXHRcXHRcXHRcXHQgICAgY2hhbmN0eF9jb25mLCAwKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTU3MDk9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQvbWFjODAyMTEvdHguYzo1NzEwOmllZWU4MDIxMV9iZWFjb25fZ2V0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbm5ldC9tYWM4MDIxMS90eC5jLTU3MTEtXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy01NzIwLVxcdCAgICBpZWVlODAyMTFfczFnX25lZWRfbG9uZ19iZWFjb24oc2RhdGEsIGxpbmspKVxcbm5ldC9tYWM4MDIxMS90eC5jOjU3MjE6XFx0XFx0cmV0dXJuIF9faWVlZTgwMjExX2JlYWNvbl9nZXRfYXAoaHcsIHZpZiwgbGluaywgb2ZmcyxcXG5uZXQvbWFjODAyMTEvdHguYy01NzIyLVxcdFxcdFxcdFxcdFxcdFxcdCBpc190ZW1wbGF0ZSwgYmVhY29uLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NTcyOT1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqXFxubmV0L21hYzgwMjExL3R4LmM6NTczMDppZWVlODAyMTFfYmVhY29uX2dldF9hcF9lbWFfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5uZXQvbWFjODAyMTEvdHguYy01NzMxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjA1LjIyNzE4NjM1NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTM4MTIyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJlYWNvbiBGcmFtZSBWdWxuZXJhYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbiwgd2hpY2ggc2VlbXMgdG8gaGFuZGxlIHNldHRpbmcgdXAgdGhlIGJlYWNvbiBmcmFtZSBmb3IgdGhpcyBVU0IgV2ktRmkgZG9uZ2xlLiAgSSBjYW4gc2VlIHRoYXQgaXQgdXNlcyBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIHRvIGdyYWIgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIGNvbnRhaW5pbmcgdGhlIGJlYWNvbiBkYXRhLiBUaGUgZ29vZCBuZXdzIGlzLCBhY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnRzLCBtYWM4MDIxMSBmdWxseSBpbml0aWFsaXplcyB0aGF0IGBza2JgLCB3aGljaCBpcyBhIHBsdXMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIEkgc2VlIGEgc2VjdGlvbiB3aGVyZSBpdCBzZWVtcyB0byBhZGQgYSBoZWFkZXIuIFNwZWNpZmljYWxseSwgdGhlcmUncyBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgZW5vdWdoIGhlYWRyb29tIGlzIGF2YWlsYWJsZSwgdGhlbiBgc2tiX3B1c2hgIHRvIG1vdmUgdGhlIGRhdGEgcG9pbnRlciBiYWNrLCBhbmQgYG1lbXNldGAgdG8gaW5pdGlhbGl6ZSB0aGlzIG5ldyBgbXQ3Nl90eHdpYCBoZWFkZXIuIFRoYXQgYWxsIHNlZW1zIHN0YW5kYXJkLCBwdXNoaW5nIHRoZSB0cmFuc21pdCBXaS1GaSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBgc2tiYC4gVGhlbiwgaXQgY2FsY3VsYXRlcyBob3cgbWFueSAzMi1iaXQgd29yZHMgYXJlIGluIHRoZSBgc2tiYCB1c2luZyBgRElWX1JPVU5EX1VQYC4gVGhhdCBjYWxjdWxhdGlvbiBpcyB3aGF0IGdyYWJzIG15IGF0dGVudGlvbi5cblxuSGVyZSdzIHRoZSBwcm9ibGVtOiBpZiB0aGUgb3JpZ2luYWwgYmVhY29uIGRhdGEgKHBsdXMgdGhlIGhlYWRlcikgZG9lc24ndCByZXN1bHQgaW4gYSBsZW5ndGggdGhhdCdzIGEgbXVsdGlwbGUgb2YgNCBieXRlcywgYERJVl9ST1VORF9VUGAgd2lsbCByb3VuZCB1cC4gVGhpcyBtZWFucyB0aGUgYnVyc3Qgd3JpdGUsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLCB3aWxsIHJlYWQgKnBhc3QqIHRoZSBpbnRlbmRlZCBkYXRhIGFuZCBwb3RlbnRpYWxseSBpbnRvIHRoZSBgc2tiYCdzIHRhaWxyb29tLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0aGlzIGlzIGFuIGlzc3VlLlxuXG5UaGUgYHNrYmAgZGF0YSBpcyBhbiBhcnJheSBvZiBieXRlcy4gYHNrYi1cdTAwM2VsZW5gIHRlbGxzIHVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGluaXRpYWxpemVkIGRhdGEuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYHNrYmAgaGF2ZSB0YWlscm9vbT8gQW5kLCBpZiBzbywgYXJlIHRob3NlIHRhaWxyb29tIGJ5dGVzIGluaXRpYWxpemVkPyBMaWtlbHksIHRoZSB0YWlscm9vbSBleGlzdHMsIGJ1dCB0aGUgYnl0ZXMgbWlnaHQgYmUgdW5pbml0aWFsaXplZC5cblxuSWYgaXQgcmVhZHMgcGFzdCBgc2tiLVx1MDAzZWxlbmAsIHRoaXMgbWVhbnMgaXQncyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAodGhlIGBza2JgIHRhaWxyb29tKSBhbmQgc2VuZGluZyBpdCBvdmVyIFVTQiB0byB0aGUgV2ktRmkgZG9uZ2xlLiBUaGF0J3MgYSBjbGFzc2ljIGluZm8tbGVhay4gVGhpcyBpcyBhIHBvdGVudGlhbCBrZXJuZWwgbWVtb3J5IGxlYWssIGFuIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUgdnVsbmVyYWJpbGl0eSFcblxuQnV0IHRoZW4gSSByZWNhbGwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gS01TQU4gc2hvdWxkIGRldGVjdCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCByZWFkcyBwYXN0IHRoZSBpbml0aWFsaXplZCBkYXRhLCBLTVNBTiAqc2hvdWxkKiBmbGFnIGl0IGFzIGEgdXNlLW9mLXVuaW5pdGlhbGl6ZWQtbWVtb3J5IGVycm9yLlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGtub3cgaG93IGl0IGhhbmRsZXMgdGhlIHdvcmQgY291bnQgYW5kIHRoZSBkYXRhIHBvaW50ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjgxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjE0LjM2NTMxMTI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdFxcdFxcdCAgICAgY29uc3QgdTMyICpkYXRhLCBpbnQgbilcXG4gMjQxOlxcdHtcXG4gMjQyOlxcdFxcdGNvbnN0IGludCBtYXhfcmVnc19wZXJfY21kID0gSU5CQU5EX1BBQ0tFVF9NQVhfTEVOIC8gNCAtIDE7XFxuIDI0MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAyNDQ6XFx0XFx0aW50IGNudCwgaSwgcmV0O1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHRpZiAoIW4pXFxuIDI0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0Y250ID0gbWluKG1heF9yZWdzX3Blcl9jbWQsIG4pO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRza2IgPSBhbGxvY19za2IoY250ICogNCArIE1UX0RNQV9IRFJfTEVOICsgNCwgR0ZQX0tFUk5FTCk7XFxuIDI1MjpcXHRcXHRpZiAoIXNrYilcXG4gMjUzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNTQ6XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBNVF9ETUFfSERSX0xFTik7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdHNrYl9wdXRfbGUzMihza2IsIE1UX01DVV9NRU1NQVBfV0xBTiArIG9mZnNldCk7XFxuIDI1NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspXFxuIDI1ODpcXHRcXHRcXHRza2JfcHV0X2xlMzIoc2tiLCBkYXRhW2ldKTtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xcbiAyNjE6XFx0XFx0aWYgKHJldClcXG4gMjYyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdHJldHVybiBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBvZmZzZXQgKyBjbnQgKiA0LFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0XFx0ZGF0YSArIGNudCwgbiAtIGNudCk7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdHN0cnVjdCBtdDc2X2Z3X2hlYWRlciB7XFxuIDI2OTpcXHRcXHRfX2xlMzIgaWxtX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTE6MTQuMzY1NDEwOTQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzIxNDA3NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFZ1bG5lcmFiaWxpdHkgaW4gQmVhY29uIEZyYW1lIEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MDF1YCBkcml2ZXIgY29kZSBhbmQgSSB0aGluayBJJ3ZlIGZvdW5kIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlLiBJdCdzIGluIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gaXQncyBoYW5kbGluZyB0aGUgYmVhY29uIGZyYW1lIHNldHVwIGluIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC5cblxuV2hhdCdzIGhhcHBlbmluZyBpcyB0aGlzOiB0aGUgY29kZSBpcyBpdGVyYXRpbmcgdGhyb3VnaCBhIGRhdGEgYnVmZmVyIChgZGF0YWApIGFuZCB3cml0aW5nIDMyLWJpdCB2YWx1ZXMgdG8gYSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgdXNpbmcgYHNrYl9wdXRfbGUzMmAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYGRhdGFgIGlzIGVzc2VudGlhbGx5IGEgcG9pbnRlciB0byB0aGUgYHNrYi1cdTAwM2VkYXRhYCwgYW5kIGlmIHRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIGJlYWNvbiBmcmFtZSAoYHNrYi1cdTAwM2VsZW5gKSBpc24ndCBhIG11bHRpcGxlIG9mIDQgYnl0ZXMsIHRoZW4gdGhlIGxhc3QgcmVhZCBvZiBgZGF0YVtpXWAgd2lsbCBiZSByZWFkaW5nIGJ5dGVzIGJleW9uZCB0aGUgaW5pdGlhbGl6ZWQgc2VjdGlvbiBvZiB0aGUgYnVmZmVyLlxuXG5Ob3csIGBza2JgcyBhbGxvY2F0ZWQgYnkgbWFjODAyMTEgdHlwaWNhbGx5IGhhdmUgc29tZSB0YWlscm9vbSwgdGhhdCBpcywgZXh0cmEgYnVmZmVyIHNwYWNlIGFsbG9jYXRlZCBhZnRlciB0aGUgXCJ2YWxpZFwiIGRhdGEuIFNvLCB3aGlsZSB0aGUgcmVhZHMgd291bGQgZmFsbCB3aXRoaW4gYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvbnRlbnRzIG9mIHRoYXQgdGFpbHJvb20gYXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFdoZW4gYHNrYl9wdXRfbGUzMmAgcmVhZHMgdGhlc2UgdW5pbml0aWFsaXplZCBieXRlcyBhbmQgd3JpdGVzIHRoZW0gdG8gdGhlIG5ldyBgc2tiYCwgdGhlIG5ldyBgc2tiYCBpcyBzZW50IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLiBUaGlzIGNyZWF0ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBjb25kaXRpb24uXG5cbkluaXRpYWxseSwgSSB3b25kZXJlZCBpZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB3b3VsZCBjYXRjaCB0aGlzLiBLQVNBTiBjYXRjaGVzIG91dC1vZi1ib3VuZHMgcmVhZHMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIHJlYWQgc3RheXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIChpbmNsdWRpbmcgdGFpbHJvb20pLCBLQVNBTiB3b24ndCBmbGFnIGl0LiBCdXQsIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgdHJhY2tzIGJ5dGUtbGV2ZWwgaW5pdGlhbGl6YXRpb24uIFNpbmNlIHRoZSBieXRlcyBpbiB0aGUgdGFpbHJvb20gYXJlIHVuaW5pdGlhbGl6ZWQsIEtNU0FOIHdpbGwgYWJzb2x1dGVseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBmaW5kLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBza2ItXHUwMDNlbGVuYCBpc24ndCBhbHdheXMgYSBtdWx0aXBsZSBvZiA0OyB0aGUgYmVhY29uIGZyYW1lJ3MgbGVuZ3RoIGRlcGVuZHMgb24gSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgc28gaXQncyBub3QgZ3VhcmFudGVlZC4gVGhlbiwgSSBsb29rZWQgYXQgaG93IGBza2JgIGlzIGFsbG9jYXRlZCB3aXRoIGBza2JfY293X2hlYWRgLiBJIHNlZSBub3cgdGhhdCBgc2tiX2Nvd19oZWFkYCBtaWdodCByZWFsbG9jYXRlIHRoZSBza2IgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIGhlYWRyb29tLiBJZiBpdCByZWFsbG9jYXRlcywgdGhlIG5ld2x5IGFsbG9jYXRlZCBieXRlcyBhcmUgdW5pbml0aWFsaXplZC4gSWYgaXQgZG9lc24ndCByZWFsbG9jYXRlLCB0aGVuIHRoZSB0YWlscm9vbSBpcyBhbHNvIHVuaW5pdGlhbGl6ZWQuIFNvLCByZWFkaW5nIHVwIHRvIGBESVZfUk9VTkRfVVAoc2tiLVx1MDAzZWxlbiwgNCkgKiA0YCBieXRlcyB3aWxsIHJlYWQgMS0zIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkkgYWxzbyBjaGVja2VkIG90aGVyIGZ1bmN0aW9ucy4gSW4gYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBpdCBhcHBlYXJzIHRoYXQgdGhlIGB0eHdpYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0YCwgc28gdGhhdCdzIG5vdCBhIHByb2JsZW0uXG5cbkZpbmFsbHksIEkgY2hlY2tlZCBgbXQ3NjAxdV9zdGFydF9hcGAuIEkgbm90aWNlZCBgbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cGAgdGFrZXMgYE5VTExgIGZvciBgbWFjYC4gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IGlzIGhhbmRsZWQgdG8gc2VlIGlmIGFueSBvdGhlciB1bmluaXRpYWxpemVkIGlzc3VlcyBtaWdodCBzdXJmYWNlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEyOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjI0LjY4NjgyMDgwN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjQ0NDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2MDF1X21hY193Y2lkX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmM9Mzc1PXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjM3NjptdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYy0zNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MTk5PXN0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIwOC1cXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIDEyODsgaSsrKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjIwOTpcXHRcXHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaSwgMCwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MjU5PW10NzYwMXVfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTI3Ny1cXHRtc3RhLVxcdTAwM2V3Y2lkLmh3X2tleV9pZHggPSAtMTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoyNzg6XFx0bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChkZXYsIGlkeCwgbXZpZi1cXHUwMDNlaWR4LCBzdGEtXFx1MDAzZWFkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTI3OS1cXHRtdDc2X2NsZWFyKGRldiwgTVRfV0NJRF9EUk9QKGlkeCksIE1UX1dDSURfRFJPUF9NQVNLKGlkeCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MjkwPW10NzYwMXVfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTMwMC1cXHRkZXYtXFx1MDAzZXdjaWRfbWFza1tpZHggLyBCSVRTX1BFUl9MT05HXSBcXHUwMDI2PSB+QklUKGlkeCAlIEJJVFNfUEVSX0xPTkcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjMwMTpcXHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaWR4LCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0zMDItXFx0bXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg9MzY0PXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaDozNjU6bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggaWR4LCB1OCB2aWZfaWR4LCB1OCAqbWFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zNjYtdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTE6MjYuNDk5MjcyNDExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg5MTE2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBtdDc2MDF1X21hY193Y2lkX3NldHVwYCBmdW5jdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaG93IHRoaXMgc3BlY2lmaWMgTUFDIChNZWRpYSBBY2Nlc3MgQ29udHJvbGxlcikgc2V0dXAgaXMgaGFuZGxlZCBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHdjaWQgKFdpcmVsZXNzIENsaWVudCBJRCkgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IGFzc29jaWF0aW9ucyBiZXR3ZWVuIGEgc3RhdGlvbiBhbmQgdGhlIGRyaXZlciBhcmUgbWFuYWdlZCBhbmQgaG93IHRoZSBNQUMgaXMgY29uZmlndXJlZCwgcHJvYmFibHkgd2l0aCBzb21lIHJlZ2lzdGVyIHdyaXRlcyB0byBzZXQgdXAga2V5IHNlY3VyaXR5IHBhcmFtZXRlcnMsIGFkZHJlc3MgZmlsdGVycywgYW5kIHRyYW5zbWl0L3JlY2VpdmUgcXVldWUgbWFwcGluZ3MgYmFzZWQgb24gdGhlIHdjaWQuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG51YW5jZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBhcyB0aGUgTVQ3NjAxVSBpcyBhIHNvbWV3aGF0IG9sZGVyIGNoaXBzZXQsIGFuZCBob3cgdGhpcyBjb2RlIGFjY291bnRzIGZvciBwb3RlbnRpYWwgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHRha2luZyBhIGRpcmVjdCBhcHByb2FjaCBvciBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGluIGhhbmRsaW5nIHRoZSB2YXJpb3VzIHN0YXRlcyBvZiB0aGUgd2NpZCwgbGlrZSBpbml0aWFsaXppbmcgaXQsIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uLCBhc3NvY2lhdGlvbiwgYW5kIGRhdGEgdHJhbnNmZXIuIEkgd2FudCB0byBzZWUgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgcmVnaXN0ZXJzIGFyZSBiZWluZyB0b3VjaGVkIGFuZCB3aGF0IHRoZSByYXRpb25hbGUgaXMgYmVoaW5kIGVhY2ggb2YgdGhlIHZhbHVlcy4gQWxzbywgSSdsbCBiZSBjaGVja2luZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgd2lyZWxlc3Mgc3RhY2suIEknbSBhc3N1bWluZyBpdCBoYXMgY2xlYXIgZW50cnkgcG9pbnRzIGFuZCBleGl0cywgYW5kIHRoYXQgaXQncyByb2J1c3QgaW4gaGFuZGxpbmcgZXJyb3IgY29uZGl0aW9ucy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBvciBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhpcyBpcyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHdpdGggcGxlbnR5IG9mIG9wcG9ydHVuaXR5IGZvciBzdWJ0bGUgYnVncy4gSSdsbCBtZW50YWxseSBjb21wYXJlIHRoaXMgd2l0aCBzaW1pbGFyIGZ1bmN0aW9ucyBJJ3ZlIGxvb2tlZCBhdCBpbiBvdGhlciBkcml2ZXJzIGFuZCBzZWUgaG93IHRoaXMgbWVhc3VyZXMgdXAgaW4gdGVybXMgb2YgY2xhcml0eSBhbmQgZWZmaWNpZW5jeS4gRmluYWxseSwgSSdsbCBhbHNvIGxvb2sgZm9yIGNvbW1lbnRzLCBhcyB0aGV5IHdpbGwgdW5kb3VidGVkbHkgYmUgdXNlZnVsIHRvIGdldCBhIHByb3BlciBjb250ZXh0IG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcxNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjMwLjYxODE4NjY1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHR2b2lkXFxuIDM3NjpcXHRtdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpXFxuIDM3NzpcXHR7XFxuIDM3ODpcXHRcXHR1OCB6bWFjW0VUSF9BTEVOXSA9IHt9O1xcbiAzNzk6XFx0XFx0dTMyIGF0dHI7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdGF0dHIgPSBGSUVMRF9QUkVQKE1UX1dDSURfQVRUUl9CU1NfSURYLCB2aWZfaWR4IFxcdTAwMjYgNykgfFxcbiAzODI6XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoTVRfV0NJRF9BVFRSX0JTU19JRFhfRVhULCAhISh2aWZfaWR4IFxcdTAwMjYgOCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdDc2X3dyKGRldiwgTVRfV0NJRF9BVFRSKGlkeCksIGF0dHIpO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRpZiAobWFjKVxcbiAzODc6XFx0XFx0XFx0bWVtY3B5KHptYWMsIG1hYywgc2l6ZW9mKHptYWMpKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0bXQ3NjAxdV9hZGRyX3dyKGRldiwgTVRfV0NJRF9BRERSKGlkeCksIHptYWMpO1xcbiAzOTA6XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHR2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuIDM5MzpcXHR7XFxuIDM5NDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTozMC42MTgyODU0OTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0NDU3MTU1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgTGVhayBpbiBCZWFjb24gVHJhbnNtaXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBtdDc2MDF1X21hY193Y2lkX3NldHVwYCBmdW5jdGlvbiBoYW5kbGVzIGBtYWMgPT0gTlVMTGAgY2FzZXMgZ3JhY2VmdWxseSB1c2luZyBhIHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlLiBUaGF0J3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIE5vdywgSSdtIGZvY3VzaW5nIG9uIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uLiBMZXQncyByZXZpc2l0IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC5cblxuVGhlIGNvcmUgaXNzdWUgaXMgaW4gaG93IHRoZSBiZWFjb24gZnJhbWUgaXMgd3JpdHRlbiB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYC4gVGhlIGNhbGN1bGF0aW9uIGB3b3JkcyA9IERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgaXMga2V5LiBXZSdyZSBkaXZpZGluZyB0aGUgbGVuZ3RoIG9mIHRoZSAqZW50aXJlKiBgc2tiYCAoaW5jbHVkaW5nIHRoZSBgc3RydWN0IG10NzZfdHh3aWAgaGVhZGVyLCB3aGljaCB3ZSBrbm93IGlzIDI0IGJ5dGVzIGFuZCBhIG11bHRpcGxlIG9mIDQpIGJ5IDQgYW5kIHJvdW5kaW5nIHVwLiBUaGUgYmVhY29uIGZyYW1lIGl0c2VsZiBpcyBjb25zdHJ1Y3RlZCBieSBtYWM4MDIxMS4gQ3J1Y2lhbGx5LCB0aGUgbGVuZ3RoIG9mIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcywgZXNwZWNpYWxseSBiZWFjb25zLCBjYW4gYmUgKmFyYml0cmFyeSosIGJlY2F1c2Ugb2YgdGhlIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBmcmFtZS5cblxuVGhlcmVmb3JlLCBgc2tiLVx1MDAzZWxlbmAgaXMgKm5vdCogZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gSWYgaXQncyAqbm90KiBhIG11bHRpcGxlIG9mIDQsIHRoZW4gYHdvcmRzICogNGAgd2lsbCBiZSB1cCB0byBgc2tiLVx1MDAzZWxlbiArIDNgLiBUaGlzIG1lYW5zIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHJlYWRzIHVwIHRvIDMgYnl0ZXMgYmV5b25kIHRoZSAnZW5kJyBvZiB0aGUgYWN0dWFsIGJlYWNvbiBkYXRhLCB3aGljaCBhcmUgYnl0ZXMgZnJvbSB0aGUgdGFpbHJvb20gb2YgdGhlIGBza2JgLiBUaGUgYHNrYmAgaXMgYWxsb2NhdGVkIGJ5IGBpZWVlODAyMTFfYmVhY29uX2dldGAgYW5kIHVzdWFsbHkgY29udGFpbnMgdGFpbHJvb20uXG5cblRoZSBmdW5jdGlvbiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCByZWFkcyAzMi1iaXQgaW50ZWdlcnMgZnJvbSB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCB0aGUgbGFzdCAzMi1iaXQgcmVhZCB3aWxsIGluY2x1ZGUgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIHRoZSB0YWlscm9vbS4gVGhpcyB1bmluaXRpYWxpemVkIGRhdGEgaXMgdGhlbiBzZW50IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLiBUaGlzIGlzIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgbWVtb3J5IHRvIGEgaGFyZHdhcmUgZGV2aWNlIVxuXG5LTVNBTiAqc2hvdWxkKiBjYXRjaCB0aGlzLCBiZWNhdXNlIGl0IHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gS0FTQU4gKndvbid0KiBkZXRlY3QgdGhpcywgYmVjYXVzZSB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBgc2tiYCBidWZmZXIuXG5cblRoZXJlJ3Mgbm8gcGFkZGluZyBhZGRlZCB0byB0aGUgZGF0YSBiZXR3ZWVuIHRoZSB0eHdpIGFuZCB0aGUgYmVhY29uIGZyYW1lLiBgc2tiX3B1dF9sZTMyYCByZWFkcyBkaXJlY3RseSBmcm9tIHRoZSBgZGF0YVtpXWAuIFNvIGBza2ItXHUwMDNlZGF0YWAgaXMgcmVhZCB1cCB0byBgd29yZHMgKiA0YCBieXRlcy5cblxuU28sIHRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBidWcgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0OiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgYHNrYmAgdGFpbHJvb20pIGFuZCB0cmFuc21pdHRpbmcgaXQgdG8gYSBoYXJkd2FyZSBkZXZpY2UgKHZpYSBVU0IpLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IEtNU0FOIGhhbmRsZXMgVVNCIHRyYW5zZmVycy4gWWVzLCBLTVNBTiBob29rcyBpbnRvIGB1c2Jfc3VibWl0X3VyYmAgdmlhIGBrbXNhbl9oYW5kbGVfdXJiYCBhbmQgY2FuIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyISBBbmQgYG10NzYwMXVfbWN1X21zZ19zZW5kYCBzZW5kcyB0aGUgYHNrYmAgdmlhIFVTQi4gVGhpcyBjb25maXJtcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4gV2UndmUgZ290IGl0LiBUaGlzIGlzIGEgc29saWQgdXNlIGNhc2UgZm9yIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzUwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTo0Mi4wNjQwMDUxMTNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDczOTk4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9tY3VfbXNnX3NlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xMDk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MTEwOm10NzYwMXVfbWN1X21zZ19zZW5kKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMTExLVxcdFxcdCAgICAgZW51bSBtY3VfY21kIGNtZCwgYm9vbCB3YWl0X3Jlc3ApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jPTE1NT1zdGF0aWMgaW50IG10NzYwMXVfbWN1X2Z1bmN0aW9uX3NlbGVjdChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMTY5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MTcwOlxcdHJldHVybiBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0ZVTl9TRVRfT1AsIGZ1bmMgPT0gNSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0xNzEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xOTM9bXQ3NjAxdV9tY3VfY2FsaWJyYXRlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBlbnVtIG1jdV9jYWxpYnJhdGUgY2FsLCB1MzIgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMDYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyMDc6XFx0cmV0dXJuIG10NzYwMXVfbWN1X21zZ19zZW5kKGRldiwgc2tiLCBDTURfQ0FMSUJSQVRJT05fT1AsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjA4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM9MjEwPWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjIzMjpcXHRyZXQgPSBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX1JBTkRPTV9XUklURSwgY250ID09IG4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjMzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jPTIzOT1pbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyNjA6XFx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjYxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjQzLjgxMTQxMjE1OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMyMTg0MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNVDc2MDFVIE1DVSBNZXNzYWdlIFNlbmRpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZXNzYWdlcyBhcmUgZ2V0dGluZyBzZW50IHRvIHRoZSBNQ1Ugb24gdGhlIE1UNzYwMVUuIExldCdzIHN0YXJ0IHdpdGggYG10NzYwMXVfbWN1X21zZ19zZW5kYC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG1jdS5jYCBmaWxlIGFuZCBwaW5wb2ludCB0aGF0IGZ1bmN0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLCBoYW5kbGluZyBhbnkgYnVmZmVyaW5nLCBhbmQsIGNydWNpYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0Igb3Igd2hhdGV2ZXIgaW50ZXJmYWNlIGlzIHVzZWQgdG8gYWN0dWFsbHkgdHJhbnNtaXQgdGhpcyBkYXRhLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMgb3Igc2VtYXBob3JlcyBmb3Igc3luY2hyb25pemF0aW9uLCBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgaGFyZHdhcmUgcmVnaXN0ZXIgd3JpdGVzIG9yIFVTQiBjYWxscyB0aGF0IGluaXRpYXRlIHRoZSB0cmFuc2Zlci4gVGhpcyBzaG91bGQgYmUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lc3NhZ2UgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxMTcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTo0Ny4zNDM2MDAwMjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDksXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDk6XFx0c3RhdGljIGludFxcbiAxMTA6XFx0bXQ3NjAxdV9tY3VfbXNnX3NlbmQoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDExMTpcXHRcXHRcXHQgICAgIGVudW0gbWN1X2NtZCBjbWQsIGJvb2wgd2FpdF9yZXNwKVxcbiAxMTI6XFx0e1xcbiAxMTM6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBtdDc2MDF1X3RvX3VzYl9kZXYoZGV2KTtcXG4gMTE0OlxcdFxcdHVuc2lnbmVkIGNtZF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsXFxuIDExNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGV2LVxcdTAwM2VvdXRfZXBzW01UX0VQX09VVF9JTkJBTkRfQ01EXSk7XFxuIDExNjpcXHRcXHRpbnQgc2VudCwgcmV0O1xcbiAxMTc6XFx0XFx0dTggc2VxID0gMDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0aWYgKHRlc3RfYml0KE1UNzYwMVVfU1RBVEVfUkVNT1ZFRCwgXFx1MDAyNmRldi1cXHUwMDNlc3RhdGUpKSB7XFxuIDEyMDpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiAxMjE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEyMjpcXHRcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWN1Lm11dGV4KTtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0aWYgKHdhaXRfcmVzcClcXG4gMTI3OlxcdFxcdFxcdHdoaWxlICghc2VxKVxcbiAxMjg6XFx0XFx0XFx0XFx0c2VxID0gKytkZXYtXFx1MDAzZW1jdS5tc2dfc2VxIFxcdTAwMjYgMHhmO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRtdDc2MDF1X2RtYV9za2Jfd3JhcF9jbWQoc2tiLCBzZXEsIGNtZCk7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmIChkZXYtXFx1MDAzZW1jdS5yZXNwX2NtcGwuZG9uZSlcXG4gMTMzOlxcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJFcnJvcjogTUNVIHJlc3BvbnNlIHByZS1jb21wbGV0ZWQhXFxcXG5cXFwiKTtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0XFx0dHJhY2VfbXRfbWN1X21zZ19zZW5kX2NzKGRldiwgc2tiLCB3YWl0X3Jlc3ApO1xcbiAxMzY6XFx0XFx0dHJhY2VfbXRfc3VibWl0X3VyYl9zeW5jKGRldiwgY21kX3BpcGUsIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTM3OlxcdFxcdHJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCBjbWRfcGlwZSwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbiwgXFx1MDAyNnNlbnQsIDUwMCk7XFxuIDEzODpcXHRcXHRpZiAocmV0KSB7XFxuIDEzOTpcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRXJyb3I6IHNlbmQgTUNVIGNtZCBmYWlsZWQ6JWRcXFxcblxcXCIsIHJldCk7XFxuIDE0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcdGlmIChzZW50ICE9IHNrYi1cXHUwMDNlbGVuKVxcbiAxNDM6XFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkVycm9yOiAlcyBzZW50ICE9IHNrYi1cXHUwMDNlbGVuXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmICh3YWl0X3Jlc3ApXFxuIDE0NjpcXHRcXHRcXHRyZXQgPSBtdDc2MDF1X21jdV93YWl0X3Jlc3AoZGV2LCBzZXEpO1xcbiAxNDc6XFx0b3V0OlxcbiAxNDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1jdS5tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjQ3LjM0MzY4ODU1OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzcyMTU0NjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTi1EZXRlY3RhYmxlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsgaW4gQmVhY29uIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSd2ZSBmb3VuZC4gVGhlIHByaW1hcnkgY29uY2VybiBsaWVzIHdpdGhpbiBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLCBzcGVjaWZpY2FsbHkgaG93IGl0IHV0aWxpemVzIGB1c2JfYnVsa19tc2dgIHRvIHRyYW5zbWl0IGRhdGEgZnJvbSBhbiBgc2tiYCB0byB0aGUgVVNCIGRldmljZS4gSSBzZWUgdGhhdCBgdXNiX2J1bGtfbXNnYCB0YWtlcyBgc2tiLVx1MDAzZWRhdGFgIGFuZCBgc2tiLVx1MDAzZWxlbmAuIFRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBlbWVyZ2VzIGR1cmluZyB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgY2FsbCB3aXRoaW4gdGhlIGJlYWNvbiBzZXR0aW5nIG1lY2hhbmlzbS5cblxuVGhlIGNvZGUgaXRlcmF0ZXMsIGNvcHlpbmcgZGF0YSBpbnRvIGEgbmV3IGBza2JgIHZpYSBgc2tiX3B1dF9sZTMyYCwgcmVhZGluZyBmcm9tIGBkYXRhW2ldYCwgd2hlcmUgYGRhdGFgIHBvaW50cyB0byB0aGUgYmVhY29uIGBza2ItXHUwMDNlZGF0YWAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogdGhlIGBESVZfUk9VTkRfVVAoc2tiLVx1MDAzZWxlbiwgNClgIGNhbGN1bGF0aW9uLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCB0aGUgbG9vcCByZWFkcyBwYXN0IHRoZSBhY3R1YWwgaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUgYHNrYmAsIHBvdGVudGlhbGx5IGludG8gdGhlIHVuaW5pdGlhbGl6ZWQgdGFpbHJvb20uIGBLTVNBTmAgaXMgY3JpdGljYWwgaGVyZTsgaXQgd2lsbCB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIHRhaWxyb29tIG1lbW9yeSwgYW5kIHRodXMgd2lsbCBkZXRlY3QgdGhlIHByb2JsZW0uIGBLQVNBTmAgaXMgdW5saWtlbHkgdG8gY2F0Y2ggdGhpcyBzaW5jZSB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVnaW9uLCB0aHVzIG5vIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBLTVNBTidzIGluc3RydW1lbnRhdGlvbiBvZiBgdXNiX2J1bGtfbXNnYCB3aWxsIHRyaWdnZXIgYW4gaW5mby1sZWFrIHJlcG9ydC5cblxuSSBkb3VibGUtY2hlY2tlZCBvdGhlciBwb3RlbnRpYWwgYXJlYXMgbGlrZSBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCwgYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYHNrYjJxYCwgdG8gYmUgc3VyZS4gTm9uZSBvZiB0aGVtIHNob3cgYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgdnVsbmVyYWJpbGl0eS4gVGhleSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIG9yIHRoZXJlIGFyZSBjbGVhciBib3VuZHMsIGVuc3VyaW5nIGBLQVNBTmAgd291bGQgY2F0Y2ggYW55IE9PQiByZWFkcy5cblxuU28sIHRoZSBjcnV4IGlzIGluIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC4gQSBiZWFjb24gc2tiIGlzIGFsbG9jYXRlZCAodGhyb3VnaCBgaWVlZTgwMjExX2JlYWNvbl9nZXRgKSwgYW5kIGl0cyBsZW5ndGggaXMgdXNlZCBpbiBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmQgdXAgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoYXQgYXJlIHRvIGJlIHdyaXR0ZW4uIFRoaXMgbGVuZ3RoIG1pZ2h0IG5vdCBiZSBhIG11bHRpcGxlIG9mIDQuXG5cblRoZSBjb25jbHVzaW9uIGlzIHRoYXQgd2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBgc2tiYCB0YWlscm9vbSBhbmQgc2VuZGluZyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZ2AuIFRoaXMgbWVtb3J5IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSB0YWlscm9vbSwgd2hpY2ggaXMgdW5pbml0aWFsaXplZCB3aGVuIGFsbG9jYXRlZC4gS01TQU4gZXhjZWxzIGF0IGNhdGNoaW5nIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gYmVjYXVzZSBpdCB0cmFja3MgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIG1lbW9yeSBhbmQgaG9va3MgYHVzYl9idWxrX21zZ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIGRvZXNuJ3QgZ3VhcmFudGVlIGEgbXVsdGlwbGUtb2YtNCBsZW5ndGguIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGEgcmVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc2tiIGRvZXMgbm90IHplcm8gdGhlIHRhaWxyb29tLCBjb25maXJtaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHBvdGVudGlhbGx5IHJlYWQuIFRoaXMgaW5kaWNhdGVzIGEgc3Ryb25nIGNhc2UgZm9yIGEgS01TQU4tZm9jdXNlZCBmdXp6aW5nIHNlc3Npb24uIFRoZSBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAgcHVzaGVzIGEgYHN0cnVjdCBtdDc2X3R4d2lgIHRvIHRoZSBza2IgYW5kIHplcm9lcyBpdCB2aWEgYG1lbXNldGAsIGF2b2lkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoZXJlLlxuXG5UaGUgaXNzdWUgYm9pbHMgZG93biB0byB0aGUgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgcmVhZCwgYW5kIEkgd2lsbCBiZSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgIGFuZCBzdXBwbHlpbmcgdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTA5LCJPdXRwdXRUb2tlbnMiOjM0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MjowNS4wNjUyMzc4MzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYG10NzYwMXVfbWFjX3NldF9iZWFjb24oKWAsIHdoaWNoIHJldHJpZXZlcyBhIGJlYWNvbiBza2IgdXNpbmcgYGllZWU4MDIxMV9iZWFjb25fZ2V0KClgLiBJdCB0aGVuIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdG8gd3JpdGUgdG8gdGhlIGRldmljZSB1c2luZyBgRElWX1JPVU5EX1VQKHNrYi1cXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVxcdTAwM2VkYXRhYCB0byBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgLlxcblxcbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4gV2hlbiBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAgd2lsbCByZWFkIHVwIHRvIDMgYnl0ZXMgcGFzdCBgc2tiLVxcdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxcblxcbkhvd2V2ZXIsIHRoaXMgb3BlcmF0aW9uIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIHNrYiB0YWlscm9vbSBhbmQgc3Vic2VxdWVudGx5IHNlbmRzIGl0IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgdXNiX2J1bGtfbXNnKClgIChjYWxsZWQgYnkgYG10NzYwMXVfbWN1X21zZ19zZW5kKClgKS4gS01TQU4gdHJhY2tzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhdCB0aGUgYnl0ZSBsZXZlbCBhbmQgaG9va3MgaW50byBVU0IgVVJCIHN1Ym1pc3Npb25zLCBtYWtpbmcgaXQgdW5pcXVlbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBrZXJuZWwgbWVtb3J5IGluZm8tbGVhayB0byB0aGUgaGFyZHdhcmUgZGV2aWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbigpYCwgd2hpY2ggcmV0cmlldmVzIGEgYmVhY29uIHNrYiB1c2luZyBgaWVlZTgwMjExX2JlYWNvbl9nZXQoKWAuIEl0IHRoZW4gY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0byB3cml0ZSB0byB0aGUgZGV2aWNlIHVzaW5nIGBESVZfUk9VTkRfVVAoc2tiLVxcdTAwM2VsZW4sIDQpYCBhbmQgcGFzc2VzIGBza2ItXFx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXFxuXFxuQmVjYXVzZSA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMgY2FuIGhhdmUgYXJiaXRyYXJ5IGxlbmd0aHMsIGBza2ItXFx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXFx1MDAzZWxlbmAgaXMgbm90IGEgbXVsdGlwbGUgb2YgNCwgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYCB3aWxsIHJlYWQgdXAgdG8gMyBieXRlcyBwYXN0IGBza2ItXFx1MDAzZWxlbmAuIFNpbmNlIHNrYiBidWZmZXJzIHR5cGljYWxseSBoYXZlIHNvbWUgdGFpbHJvb20gKG1lbW9yeSB0aGF0IGlzIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCksIHRoaXMgcmVhZCB3aWxsIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIGFsbG9jYXRpb24uIEFzIGEgcmVzdWx0LCBLQVNBTiB3aWxsIE5PVCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXFxuXFxuSG93ZXZlciwgdGhpcyBvcGVyYXRpb24gcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgc2tiIHRhaWxyb29tIGFuZCBzdWJzZXF1ZW50bHkgc2VuZHMgaXQgdG8gdGhlIFVTQiBkZXZpY2UgdmlhIGB1c2JfYnVsa19tc2coKWAgKGNhbGxlZCBieSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmQoKWApLiBLTVNBTiB0cmFja3MgbWVtb3J5IGluaXRpYWxpemF0aW9uIGF0IHRoZSBieXRlIGxldmVsIGFuZCBob29rcyBpbnRvIFVTQiBVUkIgc3VibWlzc2lvbnMsIG1ha2luZyBpdCB1bmlxdWVseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrIHRvIHRoZSBoYXJkd2FyZSBkZXZpY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 12:49:18 +0000 UTC FinishedAt: 2026-08-15 13:52:07 +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": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7601U", "MAC80211_MESH" ], "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": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7601U", "MAC80211_MESH" ], "series_id": "f72a29d8-3cbe-43c0-a55d-8fc618a8753b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7601u_mac_set_beacon", "mt7601u_mac_config_tsf", "mt7601u_start_ap", "mt7601u_stop_ap", "mt7601u_bss_info_changed" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzYwMVUmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzYwMXVfbWFjX3NldF9iZWFjb24mIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9tYWNfY29uZmlnX3RzZiYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0YXJ0X2FwJiMzNDssCiAgICAmIzM0O210NzYwMXVfc3RvcF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXG5cbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFQLCBNZXNoLCBQMlAsIGFuZCBBZC1Ib2MgbW9kZXMgdG8gdGhlIG10NzYwMXUgVVNCIHdpcmVsZXNzIGRyaXZlci4gSXQgbW9kaWZpZXMgbWFjODAyMTEgY2FsbGJhY2tzIHRvIGhhbmRsZSBiZWFjb24gc2V0dXAsIFRTRiBjb25maWd1cmF0aW9uLCBhbmQgQVAgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBTaW5jZSB0aGlzIGlzIGEgVVNCIGRyaXZlciwgaXQgY2FuIGJlIGZ1enplZCB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZGV2aWNlcyAodmhjaSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTM6NDk6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuY1xuaW5kZXggNWQ5ZTk1MmIyOTY2NC4uZTg3MWY3YjYzY2IzNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuY1xuQEAgLTEyLDYgJiM0MzsxMiwyNSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2luaXR2YWxzLmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7XG4mIzQzO1x0eyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB9LFxuJiM0MztcdHsgLm1heCA9IDgsXG4mIzQzO1x0ICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfFxuJiM0MzsjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbiYjNDM7XHRcdCAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8XG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxuJiM0MztcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gaWZfY29tYltdID0geyB7XG4mIzQzO1x0LmxpbWl0cyA9IGlmX2xpbWl0cyxcbiYjNDM7XHQubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlmX2xpbWl0cyksXG4mIzQzO1x0Lm1heF9pbnRlcmZhY2VzID0gMixcbiYjNDM7XHQubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsXG4mIzQzO1x0LmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLFxuJiM0Mzt9IH07XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gbXQ3NjAxdV9zZXRfd2xhbl9zdGF0ZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIHZhbCwgYm9vbCBlbmFibGUpXG4ge1xuQEAgLTU5OSw2ICYjNDM7NjE4LDcgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aWVlZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpO1xuJiM0MztcdGllZWU4MDIxMV9od19zZXQoaHcsIE5FRURTX1VOSVFVRV9TVEFfQUREUik7XG4gXHRody1cdTAwM2VtYXhfcmF0ZXMgPSAxO1xuIFx0aHctXHUwMDNlbWF4X3JlcG9ydF9yYXRlcyA9IDc7XG4gXHRody1cdTAwM2VtYXhfcmF0ZV90cmllcyA9IDE7XG5AQCAtNjA3LDkgJiM0Mzs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aHctXHUwMDNldmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpO1xuIFxuIFx0U0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi1cdTAwM2VtYWNhZGRyKTtcbi1cbiYjNDM7XHR3aXBoeS1cdTAwM2VpbnRlcmZhY2VfbW9kZXMgPVxuJiM0MztcdFx0QklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8XG4mIzQzOyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuJiM0MztcdFx0QklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8XG4mIzQzO1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpO1xuJiM0MztcdHdpcGh5LVx1MDAzZWlmYWNlX2NvbWJpbmF0aW9ucyA9IGlmX2NvbWI7XG4mIzQzO1x0d2lwaHktXHUwMDNlbl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpO1xuIFx0d2lwaHktXHUwMDNlZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SO1xuLVx0d2lwaHktXHUwMDNlaW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0d2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xuIFxuIFx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0NRTV9SU1NJX0xJU1QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXG5pbmRleCBjYTljZjYyOGViMTBkLi41ZTJkZWMxMzEzMzFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuQEAgLTExOCwxOSAmIzQzOzExOCwyNyBAQCB1MTYgbXQ3Nl9tYWNfdHhfcmF0ZV92YWwoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsXG4gXHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKVxuIFx0XHRcdGJ3ID0gMTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcjtcbi1cdFx0aW50IGJhbmQgPSBkZXYtXHUwMDNlY2hhbmRlZi5jaGFuLVx1MDAzZWJhbmQ7XG4tXHRcdHUxNiB2YWw7XG4tXG4tXHRcdHIgPSBcdTAwMjZkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHNbYmFuZF0tXHUwMDNlYml0cmF0ZXNbcmF0ZS1cdTAwM2VpZHhdO1xuLVx0XHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbi1cdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuLVx0XHRlbHNlXG4tXHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZTtcbiBcbi1cdFx0cGh5ID0gdmFsIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRyYXRlX2lkeCA9IHZhbCBcdTAwMjYgMHhmZjtcbi1cdFx0YncgPSAwO1xuJiM0MztcdFx0aW50IGJhbmQgPSBkZXYtXHUwMDNlY2hhbmRlZi5jaGFuLVx1MDAzZWJhbmQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9XG4mIzQzO1x0XHRcdGRldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tiYW5kXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgcmF0ZS1cdTAwM2VpZHggXHUwMDNlPSBzYmFuZC1cdTAwM2VuX2JpdHJhdGVzKSB7XG4mIzQzO1x0XHRcdHBoeSA9IE1UX1BIWV9UWVBFX0NDSztcbiYjNDM7XHRcdFx0cmF0ZV9pZHggPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID1cbiYjNDM7XHRcdFx0XHRcdTAwMjZzYmFuZC1cdTAwM2ViaXRyYXRlc1tyYXRlLVx1MDAzZWlkeF07XG4mIzQzO1x0XHRcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbiYjNDM7XHRcdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeSA9IHZhbCBcdTAwM2VcdTAwM2UgODtcbiYjNDM7XHRcdFx0cmF0ZV9pZHggPSB2YWwgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyYXRldmFsID0gRklFTERfUFJFUChNVF9SWFdJX1JBVEVfTUNTLCByYXRlX2lkeCk7XG5AQCAtMjY0LDEzICYjNDM7MjcyLDEzIEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYilcbiBcdFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0FVVE9fUlNQX0NGRywgTVRfQVVUT19SU1BfUFJFQU1CX1NIT1JUKTtcbiB9XG4gXG4tdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuJiM0Mzt2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4mIzQzO1x0XHRcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIHtcbiBcdHUzMiB2YWwgPSBtdDc2MDF1X3JyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHKTtcbiBcbi1cdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHxcbi1cdFx0IE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxuLVx0XHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4pO1xuJiM0MztcdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XG4mIzQzO1x0XHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcbiBcbiBcdGlmICghZW5hYmxlKSB7XG4gXHRcdG10NzYwMXVfd3IoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsIHZhbCk7XG5AQCAtMjc5LDkgJiM0MzsyODcsMjIgQEAgdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIFxuIFx0dmFsIFx1MDAyNj0gfk1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUw7XG4gXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMLCBpbnRlcnZhbCBcdTAwM2NcdTAwM2MgNCkgfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47XG4mIzQzO1x0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xuJiM0MztcbiYjNDM7XHQvKiBBUCBNb2RlICovXG4mIzQzO1x0aWYgKHZpZiBcdTAwMjZcdTAwMjYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4mIzQzO1x0XHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSlcbiYjNDM7XHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDMpIHxcbiYjNDM7XHRcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xuJiM0MztcdC8qIElCU1MgLyBBZC1Ib2MgTW9kZSAqL1xuJiM0MztcdGVsc2UgaWYgKHZpZiBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpXG4mIzQzO1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAyKSB8XG4mIzQzO1x0XHQgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWDtcbiYjNDM7XHQvKiBTdGF0aW9uIG1vZGUgKi9cbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAxKTtcbiYjNDM7XG4mIzQzO1x0bXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NjAxdV9jaGVja19tYWNfZXJyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuQEAgLTM5Myw2ICYjNDM7NDE0LDM4IEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbiBcdFx0ICAgRklFTERfUFJFUChNVF9NQVhfTEVOX0NGR19BTVBEVSwgbWluX2ZhY3RvcikpO1xuIH1cbiBcbiYjNDM7aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LVx1MDAzZWh3LCB2aWYsIDApO1xuJiM0MztcdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4mIzQzO1x0aW50IGVyciwgd29yZHM7XG4mIzQzO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovXG4mIzQzO1x0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHh3aSA9IChzdHJ1Y3QgbXQ3Nl90eHdpICopc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpO1xuJiM0MztcdG1lbXNldCh0eHdpLCAwLCBzaXplb2YoKnR4d2kpKTtcbiYjNDM7XG4mIzQzO1x0dHh3aS1cdTAwM2V3Y2lkID0gMDtcbiYjNDM7XHR0eHdpLVx1MDAzZWxlbl9jdGwgPSBjcHVfdG9fbGUxNihza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbiYjNDM7XHR0eHdpLVx1MDAzZXJhdGVfY3RsID0gY3B1X3RvX2xlMTYoMCk7XG4mIzQzO1xuJiM0MztcdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpO1xuJiM0MztcdGVyciA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX0JFQUNPTl9CQVNFLFxuJiM0MztcdFx0XHRcdCAgICAgICAoY29uc3QgdTMyICopc2tiLVx1MDAzZWRhdGEsIHdvcmRzKTtcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBtdDc2X21hY19wcm9jZXNzX3JhdGUoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywgdTE2IHJhdGUpXG4ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG5pbmRleCA1NGJkNGZhYzU0ZDgzLi41Mjg3NTZjY2Y0NzI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuQEAgLTE2Nyw1ICYjNDM7MTY3LDYgQEAgc3RydWN0IG10NzZfdHhfc3RhdHVzXG4gbXQ3NjAxdV9tYWNfZmV0Y2hfdHhfc3RhdHVzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcbiB2b2lkIG10NzZfc2VuZF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3R4X3N0YXR1cyAqc3RhdCk7XG4gdm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XG4tXG4mIzQzO2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5pbmRleCAwNWJhNDNlMTk4NWM4Li40Mzg5ZTMzMmRmZTE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5AQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdCAqXHQgcnQyeDAwIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYm90aGVyZWQgdGhvdWdoLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWJzc2lkKSlcbi1cdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgZmFsc2UsIDApO1xuJiM0MztcdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHtcbkBAIC0xNjEsNyAmIzQzOzE2MSwyMCBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVClcbi1cdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHRydWUsIGluZm8tXHUwMDNlYmVhY29uX2ludCk7XG4mIzQzO1x0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuJiM0MztcbiYjNDM7XHRpZiAoKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikgXHUwMDI2XHUwMDI2IHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxuJiM0MztcdFx0bXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihkZXYsIHZpZiwgaW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmICgoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkge1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlZW5hYmxlX2JlYWNvbilcbiYjNDM7XHRcdFx0bXQ3Nl9zZXQoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsXG4mIzQzO1x0XHRcdFx0IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRtdDc2X2NsZWFyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLFxuJiM0MztcdFx0XHRcdCAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuJiM0MztcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9IVCB8fCBjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpXG4gXHRcdG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKGRldiwgaW5mby1cdTAwM2V1c2VfY3RzX3Byb3QsXG5AQCAtMTgzLDYgJiM0MzsxOTYsNDMgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtdXRleCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYXIgdGhlIHdjaWQgVGFibGUgKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgMTI4OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHByZSBUQlRUIHRvIDZtcyAqL1xuJiM0MztcdG10NzZfcm13X2ZpZWxkKGRldiwgTVRfSU5UX1RJTUVSX0NGRywgTVRfSU5UX1RJTUVSX0NGR19QUkVfVEJUVCwgNik7XG4mIzQzO1x0bXQ3Nl9zZXQoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4mIzQzO1xuJiM0MztcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGxpbmtfY29uZi1cdTAwM2ViZWFjb25faW50KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2ID0gaHctXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XG4mIzQzO1xuJiM0MztcdG10NzZfY2xlYXIoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiBtdDc2X3djaWRfYWxsb2Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4ge1xuQEAgLTQxOSw2ICYjNDM7NDY5LDggQEAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XG4gXHQuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsXG4gXHQuY29uZmlndXJlX2ZpbHRlciA9IG10NzZfY29uZmlndXJlX2ZpbHRlcixcbiBcdC5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLFxuJiM0MztcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXG4mIzQzO1x0LnN0b3BfYXAgPSBtdDc2MDF1X3N0b3BfYXAsXG4gXHQuc3RhX2FkZCA9IG10NzYwMXVfc3RhX2FkZCxcbiBcdC5zdGFfcmVtb3ZlID0gbXQ3NjAxdV9zdGFfcmVtb3ZlLFxuIFx0LnN0YV9ub3RpZnkgPSBtdDc2MDF1X3N0YV9ub3RpZnksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaFxuaW5kZXggMTE4ZDQzNzA3ODUzNy4uNzM2NmUxYzQ3NjMzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaFxuQEAgLTM1OSw3ICYjNDM7MzU5LDggQEAgdm9pZCBtdDc2MDF1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfcHJvdGVjdGlvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBsZWdhY3lfcHJvdCxcbiBcdFx0XHRcdGludCBodF9tb2RlKTtcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4mIzQzO3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpO1xuIHZvaWRcbiBtdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpO1xuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXG5pbmRleCA1YWVlYWMwZGQ5ZmU3Li40N2M3OGM0ZmY1MTQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmNcbkBAIC0yNyw2ICYjNDM7MjcsMTQgQEAgc3RhdGljIHU4IHEyaHdxKHU4IHEpXG4gc3RhdGljIHU4IHNrYjJxKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHFpZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbiYjNDM7XHQgICAgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7XG4mIzQzO1x0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pO1xuJiM0MztcdFx0cmV0dXJuIHEyaHdxKE1UX1RYUV9WTyk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKFdBUk5fT04ocWlkIFx1MDAzZT0gTVRfVFhRX1BTRCkpIHtcbiBcdFx0cWlkID0gTVRfVFhRX0JFO1xuQEAgLTEzNCw2ICYjNDM7MTQyLDkgQEAgbXQ3NjAxdV9wdXNoX3R4d2koc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSBcdTAwMjZpbmZvLVx1MDAzZWNvbnRyb2wucmF0ZXNbMF07XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRib29sIGlzX21nbXQgPSBpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4mIzQzO1x0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cdTAwM2VhZGRyMSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBpc19wcm9iZTtcbiBcdHUzMiBwa3RfaWQ7XG5AQCAtMTQ4LDE0ICYjNDM7MTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIGluZm8tXHUwMDNlY29udHJvbC5yYXRlcywgMSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8ICFyYXRlLVx1MDAzZWNvdW50KVxuJiM0MztcdGlmICghaXNfbWdtdCBcdTAwMjZcdTAwMjYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8ICFyYXRlLVx1MDAzZWNvdW50KSlcbiBcdFx0cmF0ZV9jdGwgPSB3Y2lkLVx1MDAzZXR4X3JhdGU7XG4gXHRlbHNlXG4gXHRcdHJhdGVfY3RsID0gbXQ3Nl9tYWNfdHhfcmF0ZV92YWwoZGV2LCByYXRlLCBcdTAwMjZuc3MpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dHh3aS1cdTAwM2VyYXRlX2N0bCA9IGNwdV90b19sZTE2KHJhdGVfY3RsKTtcbiBcbi1cdGlmICghKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSlcbiYjNDM7XHRpZiAoIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgXHUwMDI2XHUwMDI2IHN0YSBcdTAwMjZcdTAwMjYgIWlzX21jYXN0KVxuIFx0XHR0eHdpLVx1MDAzZWFja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX1JFUTtcbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpXG4gXHRcdHR4d2ktXHUwMDNlYWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTtcbkBAIC0xOTcsNiAmIzQzOzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0c3RydWN0IG10NzZfc3RhICptc3RhID0gTlVMTDtcbiBcdHN0cnVjdCBtdDc2X3djaWQgKndjaWQgPSBkZXYtXHUwMDNlbW9uX3djaWQ7XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLVx1MDAzZWFkZHIxKTtcbiBcdGludCBwa3RfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGludCBod19xID0gc2tiMnEoc2tiKTtcbiBcbkBAIC0yMTEsNyAmIzQzOzIyNCw3IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0aWYgKHN0YSkge1xuIFx0XHRtc3RhID0gKHN0cnVjdCBtdDc2X3N0YSAqKSBzdGEtXHUwMDNlZHJ2X3ByaXY7XG4gXHRcdHdjaWQgPSBcdTAwMjZtc3RhLVx1MDAzZXdjaWQ7XG4tXHR9IGVsc2UgaWYgKHZpZikge1xuJiM0MztcdH0gZWxzZSBpZiAodmlmIFx1MDAyNlx1MDAyNiBpc19tY2FzdCkge1xuIFx0XHRzdHJ1Y3QgbXQ3Nl92aWYgKm12aWYgPSAoc3RydWN0IG10NzZfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuIFxuIFx0XHR3Y2lkID0gXHUwMDI2bXZpZi1cdTAwM2Vncm91cF93Y2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc2MDFVJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc2MDF1X21hY19zZXRfYmVhY29uJiMzNDssCiAgICAmIzM0O210NzYwMXVfbWFjX2NvbmZpZ190c2YmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9zdGFydF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0b3BfYXAmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyLiBJdCBtb2RpZmllcyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjNjM4MmEzNTllYjRlNDg2MmNiOGQ0MGFkNGM1MDU0Zjg4MDVhZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxMzo0OToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMKaW5kZXggNWQ5ZTk1MmIyOTY2NC4uZTg3MWY3YjYzY2IzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMKQEAgLTEyLDYgJiM0MzsxMiwyNSBAQAogCiAjaW5jbHVkZSAmIzM0O2luaXR2YWxzLmgmIzM0OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7CiYjNDM7CXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfSwKJiM0MzsJeyAubWF4ID0gOCwKJiM0MzsJICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAomIzQzOyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAomIzQzOwkJICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKJiM0MzsjZW5kaWYKJiM0MzsJCSAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHwKJiM0MzsJCSAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGlmX2NvbWJbXSA9IHsgewomIzQzOwkubGltaXRzID0gaWZfbGltaXRzLAomIzQzOwkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlmX2xpbWl0cyksCiYjNDM7CS5tYXhfaW50ZXJmYWNlcyA9IDIsCiYjNDM7CS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID0gMSwKJiM0MzsJLmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLAomIzQzO30gfTsKJiM0MzsKIHN0YXRpYyB2b2lkCiBtdDc2MDF1X3NldF93bGFuX3N0YXRlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgdmFsLCBib29sIGVuYWJsZSkKIHsKQEAgLTU5OSw2ICYjNDM7NjE4LDcgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogCWllZWU4MDIxMV9od19zZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTsKIAlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19SQ19UQUJMRSk7CiAJaWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpOwomIzQzOwlpZWVlODAyMTFfaHdfc2V0KGh3LCBORUVEU19VTklRVUVfU1RBX0FERFIpOwogCWh3LSZndDttYXhfcmF0ZXMgPSAxOwogCWh3LSZndDttYXhfcmVwb3J0X3JhdGVzID0gNzsKIAlody0mZ3Q7bWF4X3JhdGVfdHJpZXMgPSAxOwpAQCAtNjA3LDkgJiM0Mzs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogCWh3LSZndDt2aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtdDc2X3ZpZik7CiAKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgZGV2LSZndDttYWNhZGRyKTsKLQomIzQzOwl3aXBoeS0mZ3Q7aW50ZXJmYWNlX21vZGVzID0KJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAomIzQzOyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAomIzQzOwkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKJiM0MzsjZW5kaWYKJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHwKJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiYjNDM7CXdpcGh5LSZndDtpZmFjZV9jb21iaW5hdGlvbnMgPSBpZl9jb21iOwomIzQzOwl3aXBoeS0mZ3Q7bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpOwogCXdpcGh5LSZndDtmZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfQUNUSVZFX01PTklUT1I7Ci0Jd2lwaHktJmd0O2ludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKIAl3aXBoeS0mZ3Q7ZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTOwogCiAJd2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0NRTV9SU1NJX0xJU1QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMKaW5kZXggY2E5Y2Y2MjhlYjEwZC4uNWUyZGVjMTMxMzMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jCkBAIC0xMTgsMTkgJiM0MzsxMTgsMjcgQEAgdTE2IG10NzZfbWFjX3R4X3JhdGVfdmFsKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LAogCQlpZiAocmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkKIAkJCWJ3ID0gMTsKIAl9IGVsc2UgewotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnI7Ci0JCWludCBiYW5kID0gZGV2LSZndDtjaGFuZGVmLmNoYW4tJmd0O2JhbmQ7Ci0JCXUxNiB2YWw7Ci0KLQkJciA9ICZhbXA7ZGV2LSZndDtody0mZ3Q7d2lwaHktJmd0O2JhbmRzW2JhbmRdLSZndDtiaXRyYXRlc1tyYXRlLSZndDtpZHhdOwotCQlpZiAocmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKLQkJCXZhbCA9IHItJmd0O2h3X3ZhbHVlX3Nob3J0OwotCQllbHNlCi0JCQl2YWwgPSByLSZndDtod192YWx1ZTsKIAotCQlwaHkgPSB2YWwgJmd0OyZndDsgODsKLQkJcmF0ZV9pZHggPSB2YWwgJmFtcDsgMHhmZjsKLQkJYncgPSAwOwomIzQzOwkJaW50IGJhbmQgPSBkZXYtJmd0O2NoYW5kZWYuY2hhbi0mZ3Q7YmFuZDsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KJiM0MzsJCQlkZXYtJmd0O2h3LSZndDt3aXBoeS0mZ3Q7YmFuZHNbYmFuZF07CiYjNDM7CiYjNDM7CQlpZiAocmF0ZS0mZ3Q7aWR4ICZsdDsgMCB8fCByYXRlLSZndDtpZHggJmd0Oz0gc2JhbmQtJmd0O25fYml0cmF0ZXMpIHsKJiM0MzsJCQlwaHkgPSBNVF9QSFlfVFlQRV9DQ0s7CiYjNDM7CQkJcmF0ZV9pZHggPSAwOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPQomIzQzOwkJCQkmYW1wO3NiYW5kLSZndDtiaXRyYXRlc1tyYXRlLSZndDtpZHhdOwomIzQzOwkJCXUxNiB2YWw7CiYjNDM7CiYjNDM7CQkJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCiYjNDM7CQkJCXZhbCA9IHItJmd0O2h3X3ZhbHVlX3Nob3J0OwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJdmFsID0gci0mZ3Q7aHdfdmFsdWU7CiYjNDM7CiYjNDM7CQkJcGh5ID0gdmFsICZndDsmZ3Q7IDg7CiYjNDM7CQkJcmF0ZV9pZHggPSB2YWwgJmFtcDsgMHhmZjsKJiM0MzsJCX0KIAl9CiAKIAlyYXRldmFsID0gRklFTERfUFJFUChNVF9SWFdJX1JBVEVfTUNTLCByYXRlX2lkeCk7CkBAIC0yNjQsMTMgJiM0MzsyNzIsMTMgQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKQogCQltdDc2X2NsZWFyKGRldiwgTVRfQVVUT19SU1BfQ0ZHLCBNVF9BVVRPX1JTUF9QUkVBTUJfU0hPUlQpOwogfQogCi12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpCiYjNDM7dm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKQogewogCXUzMiB2YWwgPSBtdDc2MDF1X3JyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHKTsKIAotCXZhbCAmYW1wOz0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfAotCQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8Ci0JCSBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTik7CiYjNDM7CXZhbCAmYW1wOz0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHwKJiM0MzsJCSBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpOwogCiAJaWYgKCFlbmFibGUpIHsKIAkJbXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTsKQEAgLTI3OSw5ICYjNDM7Mjg3LDIyIEBAIHZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCkKIAogCXZhbCAmYW1wOz0gfk1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUw7CiAJdmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX0lOVFZBTCwgaW50ZXJ2YWwgJmx0OyZsdDsgNCkgfAotCQlNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfAotCQlNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHwKLQkJTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47CiYjNDM7CSAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTjsKJiM0MzsKJiM0MzsJLyogQVAgTW9kZSAqLwomIzQzOwlpZiAodmlmICZhbXA7JmFtcDsgKHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAomIzQzOwkJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9QMlBfR08pKQomIzQzOwkJdmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMykgfAomIzQzOwkJICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7CiYjNDM7CS8qIElCU1MgLyBBZC1Ib2MgTW9kZSAqLwomIzQzOwllbHNlIGlmICh2aWYgJmFtcDsmYW1wOyB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiYjNDM7CQl2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAyKSB8CiYjNDM7CQkgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWDsKJiM0MzsJLyogU3RhdGlvbiBtb2RlICovCiYjNDM7CWVsc2UKJiM0MzsJCXZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDEpOwomIzQzOwomIzQzOwltdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBtdDc2MDF1X2NoZWNrX21hY19lcnIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpCkBAIC0zOTMsNiAmIzQzOzQxNCwzOCBAQCB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpCiAJCSAgIEZJRUxEX1BSRVAoTVRfTUFYX0xFTl9DRkdfQU1QRFUsIG1pbl9mYWN0b3IpKTsKIH0KIAomIzQzO2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LSZndDtodywgdmlmLCAwKTsKJiM0MzsJc3RydWN0IG10NzZfdHh3aSAqdHh3aTsKJiM0MzsJaW50IGVyciwgd29yZHM7CiYjNDM7CiYjNDM7CWlmICghc2tiKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovCiYjNDM7CWVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHh3aSA9IChzdHJ1Y3QgbXQ3Nl90eHdpICopc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpOwomIzQzOwltZW1zZXQodHh3aSwgMCwgc2l6ZW9mKCp0eHdpKSk7CiYjNDM7CiYjNDM7CXR4d2ktJmd0O3djaWQgPSAwOwomIzQzOwl0eHdpLSZndDtsZW5fY3RsID0gY3B1X3RvX2xlMTYoc2tiLSZndDtsZW4gLSBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpOwomIzQzOwl0eHdpLSZndDtyYXRlX2N0bCA9IGNwdV90b19sZTE2KDApOwomIzQzOwomIzQzOwl3b3JkcyA9IERJVl9ST1VORF9VUChza2ItJmd0O2xlbiwgNCk7CiYjNDM7CWVyciA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX0JFQUNPTl9CQVNFLAomIzQzOwkJCQkgICAgICAgKGNvbnN0IHUzMiAqKXNrYi0mZ3Q7ZGF0YSwgd29yZHMpOwomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIG10NzZfbWFjX3Byb2Nlc3NfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLCB1MTYgcmF0ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oCmluZGV4IDU0YmQ0ZmFjNTRkODMuLjUyODc1NmNjZjQ3MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaApAQCAtMTY3LDUgJiM0MzsxNjcsNiBAQCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXMKIG10NzYwMXVfbWFjX2ZldGNoX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7CiB2b2lkIG10NzZfc2VuZF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3R4X3N0YXR1cyAqc3RhdCk7CiB2b2lkIG10NzYwMXVfc2V0X21hY2FkZHIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGNvbnN0IHU4ICphZGRyKTsKLQomIzQzO2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jCmluZGV4IDA1YmE0M2UxOTg1YzguLjQzODllMzMyZGZlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jCkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICoJIHJ0MngwMCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGJvdGhlcmVkIHRob3VnaC4KIAkJICovCiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby0mZ3Q7YnNzaWQpKQotCQkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIGZhbHNlLCAwKTsKJiM0MzsJCQltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7CiAJfQogCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKQEAgLTE2MSw3ICYjNDM7MTYxLDIwIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAl9CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKQotCQltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdHJ1ZSwgaW5mby0mZ3Q7YmVhY29uX2ludCk7CiYjNDM7CQltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLSZndDtiZWFjb25faW50KTsKJiM0MzsKJiM0MzsJaWYgKChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JFQUNPTikgJmFtcDsmYW1wOyB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiYjNDM7CQltdDc2MDF1X21hY19zZXRfYmVhY29uKGRldiwgdmlmLCBpbmZvKTsKJiM0MzsKJiM0MzsJaWYgKChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKJiM0MzsJCWlmIChpbmZvLSZndDtlbmFibGVfYmVhY29uKQomIzQzOwkJCW10NzZfc2V0KGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLAomIzQzOwkJCQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJbXQ3Nl9jbGVhcihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywKJiM0MzsJCQkJICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7CiYjNDM7CX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0hUIHx8IGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKQogCQltdDc2MDF1X21hY19zZXRfcHJvdGVjdGlvbihkZXYsIGluZm8tJmd0O3VzZV9jdHNfcHJvdCwKQEAgLTE4Myw2ICYjNDM7MTk2LDQzIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAltdXRleF91bmxvY2soJmFtcDtkZXYtJmd0O211dGV4KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody0mZ3Q7cHJpdjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtkZXYtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgdGhlIHdjaWQgVGFibGUgKi8KJiM0MzsJZm9yIChpbnQgaSA9IDE7IGkgJmx0OyAxMjg7IGkmIzQzOyYjNDM7KQomIzQzOwkJbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChkZXYsIGksIDAsIE5VTEwpOwomIzQzOwomIzQzOwkvKiBTZXQgcHJlIFRCVFQgdG8gNm1zICovCiYjNDM7CW10NzZfcm13X2ZpZWxkKGRldiwgTVRfSU5UX1RJTUVSX0NGRywgTVRfSU5UX1RJTUVSX0NGR19QUkVfVEJUVCwgNik7CiYjNDM7CW10NzZfc2V0KGRldiwgTVRfSU5UX1RJTUVSX0VOLCBNVF9JTlRfVElNRVJfRU5fUFJFX1RCVFRfRU4pOwomIzQzOwomIzQzOwltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBsaW5rX2NvbmYtJmd0O2JlYWNvbl9pbnQpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkZXYtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXQ3NjAxdV9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LSZndDtwcml2OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7CiYjNDM7CW10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTsKJiM0MzsKJiM0MzsJbXQ3Nl9jbGVhcihkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogbXQ3Nl93Y2lkX2FsbG9jKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogewpAQCAtNDE5LDYgJiM0Mzs0NjksOCBAQCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtdDc2MDF1X29wcyA9IHsKIAkuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIgPSBtdDc2X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQsCiYjNDM7CS5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsCiYjNDM7CS5zdG9wX2FwID0gbXQ3NjAxdV9zdG9wX2FwLAogCS5zdGFfYWRkID0gbXQ3NjAxdV9zdGFfYWRkLAogCS5zdGFfcmVtb3ZlID0gbXQ3NjAxdV9zdGFfcmVtb3ZlLAogCS5zdGFfbm90aWZ5ID0gbXQ3NjAxdV9zdGFfbm90aWZ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaAppbmRleCAxMThkNDM3MDc4NTM3Li43MzY2ZTFjNDc2MzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaApAQCAtMzU5LDcgJiM0MzszNTksOCBAQCB2b2lkIG10NzYwMXVfbWFjX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgbGVnYWN5X3Byb3QsCiAJCQkJaW50IGh0X21vZGUpOwogdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKTsKLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7CiYjNDM7dm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAomIzQzOwkJCSAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKTsKIHZvaWQKIG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7CiB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jCmluZGV4IDVhZWVhYzBkZDlmZTcuLjQ3Yzc4YzRmZjUxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmMKQEAgLTI3LDYgJiM0MzsyNywxNCBAQCBzdGF0aWMgdTggcTJod3EodTggcSkKIHN0YXRpYyB1OCBza2IycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwomIzQzOwomIzQzOwlpZiAoaWVlZTgwMjExX2lzX21nbXQoaGRyLSZndDtmcmFtZV9jb250cm9sKSB8fAomIzQzOwkgICAgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CiYjNDM7CQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pOwomIzQzOwkJcmV0dXJuIHEyaHdxKE1UX1RYUV9WTyk7CiYjNDM7CX0KIAogCWlmIChXQVJOX09OKHFpZCAmZ3Q7PSBNVF9UWFFfUFNEKSkgewogCQlxaWQgPSBNVF9UWFFfQkU7CkBAIC0xMzQsNiAmIzQzOzE0Miw5IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSAmYW1wO2luZm8tJmd0O2NvbnRyb2wucmF0ZXNbMF07CiAJc3RydWN0IG10NzZfdHh3aSAqdHh3aTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJYm9vbCBpc19tZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLSZndDtmcmFtZV9jb250cm9sKTsKJiM0MzsJYm9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0mZ3Q7YWRkcjEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBpc19wcm9iZTsKIAl1MzIgcGt0X2lkOwpAQCAtMTQ4LDE0ICYjNDM7MTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBpbmZvLSZndDtjb250cm9sLnJhdGVzLCAxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JaWYgKHJhdGUtJmd0O2lkeCAmbHQ7IDAgfHwgIXJhdGUtJmd0O2NvdW50KQomIzQzOwlpZiAoIWlzX21nbXQgJmFtcDsmYW1wOyAocmF0ZS0mZ3Q7aWR4ICZsdDsgMCB8fCAhcmF0ZS0mZ3Q7Y291bnQpKQogCQlyYXRlX2N0bCA9IHdjaWQtJmd0O3R4X3JhdGU7CiAJZWxzZQogCQlyYXRlX2N0bCA9IG10NzZfbWFjX3R4X3JhdGVfdmFsKGRldiwgcmF0ZSwgJmFtcDtuc3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAl0eHdpLSZndDtyYXRlX2N0bCA9IGNwdV90b19sZTE2KHJhdGVfY3RsKTsKIAotCWlmICghKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKJiM0MzsJaWYgKCEoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICZhbXA7JmFtcDsgc3RhICZhbXA7JmFtcDsgIWlzX21jYXN0KQogCQl0eHdpLSZndDthY2tfY3RsIHw9IE1UX1RYV0lfQUNLX0NUTF9SRVE7CiAJaWYgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKIAkJdHh3aS0mZ3Q7YWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTsKQEAgLTE5Nyw2ICYjNDM7MjA4LDggQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJc3RydWN0IG10NzZfc3RhICptc3RhID0gTlVMTDsKIAlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gZGV2LSZndDttb25fd2NpZDsKIAlzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwomIzQzOwlib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLSZndDthZGRyMSk7CiAJaW50IHBrdF9sZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgaHdfcSA9IHNrYjJxKHNrYik7CiAKQEAgLTIxMSw3ICYjNDM7MjI0LDcgQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJaWYgKHN0YSkgewogCQltc3RhID0gKHN0cnVjdCBtdDc2X3N0YSAqKSBzdGEtJmd0O2Rydl9wcml2OwogCQl3Y2lkID0gJmFtcDttc3RhLSZndDt3Y2lkOwotCX0gZWxzZSBpZiAodmlmKSB7CiYjNDM7CX0gZWxzZSBpZiAodmlmICZhbXA7JmFtcDsgaXNfbWNhc3QpIHsKIAkJc3RydWN0IG10NzZfdmlmICptdmlmID0gKHN0cnVjdCBtdDc2X3ZpZiAqKXZpZi0mZ3Q7ZHJ2X3ByaXY7CiAKIAkJd2NpZCA9ICZhbXA7bXZpZi0mZ3Q7Z3JvdXBfd2NpZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtdDc2MDF1YCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgdGhlIGBtdDc2MDF1YCBkcml2ZXIg4oCTIGEgTWVkaWFUZWsgTVQ3NjAxVSBVU0IgV2lyZWxlc3MgTEFOIGRyaXZlciwgc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyB0b3VjaGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgaW5pdC5jYCwgYG1hYy5jYCwgYG1hYy5oYCwgYG1haW4uY2AsIGBtdDc2MDF1LmhgLCBhbmQgYHR4LmNgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBhIHdob2xlIHNsZXcgb2Ygd2lyZWxlc3MgbW9kZXM6IEFQLCBNZXNoIFBvaW50LCBQMlAgQ2xpZW50LCBQMlAgR08sIGFuZCBBZC1Ib2MuIEl0JiMzOTtzIG1vZGlmeWluZyB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHRvIHNldCBpbnRlcmZhY2UgbW9kZXMgYW5kIGNvbWJpbmF0aW9ucy4gSXQgaGFzIG5ldyBmdW5jdGlvbnMgZm9yIGJlYWNvbiBzZXR0aW5nLCBzdGFydGluZyBhbmQgc3RvcHBpbmcgQVAgbW9kZSwgYW5kIGFsdGVycyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdCBmcmFtZXMuIFN0YW5kYXJkIHN0dWZmIGZvciBhZGRpbmcgd2lyZWxlc3MgbW9kZXMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gSSBldmVuIGZ1enogdGhpcyB0aGluZz8gVGhlIHByb21wdCBnaXZlcyBtZSBwYXVzZSwgaXQgc2F5cyBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuIE9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhpcyBtZXRob2RpY2FsbHkuIGBtdDc2MDF1YCBpcyBhIFVTQiBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgcmlnaHQ/IEkgY2FuIHByb2JhYmx5IHVzZSBgdmhjaWAgKFVTQiBnYWRnZXQvZHVtbXkgSENEKSwgb3IgU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB3aXRoIGB2aGNpYC4KCldhaXQgYSBtaW51dGUsIEkgaGF2ZSB0byByZWFkIHRoZSBwcm9tcHQgY2xvc2VseS4gSXQgc2F5cyBjb2RlIHBhdGhzICppbXBvc3NpYmxlKiB0byByZWFjaCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFRoYXQgbWVhbnMgaWYgSSAqY2FuKiByZWFjaCBpdCB3aXRoIGB2aGNpYCAob3Igc2ltaWxhciksIGl0JiMzOTtzIHdvcnRoIGZ1enppbmchIFllcywgaXQgc2F5cyAmIzM0O2V2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU28sIHNpbmNlIFVTQiBkcml2ZXJzICphcmUqIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKHN5emthbGxlci92aGNpKSwgdGhpcyBpcyBnb29kLiBUaGUgcHJvbXB0IGluZGljYXRlcyB0aGF0JiMzOTtzIGEgcG9zaXRpdmUgc2lnbmFsLiBBbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiwgU3l6a2FsbGVyIGhhcyB0aGUgVVNCIGZ1enppbmcgdG9vbHMuCgpSaWdodCwgc28gdG8gYmUgY29tcGxldGVseSBzdXJlLCBgbXQ3NjAxdWAgaXMgYSBVU0IgZHJpdmVyOyB0aGF0JiMzOTtzIHZlcmlmaWVkLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgZnV6emluZyBzaG90LiBMZXQgbWUgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1UNzYwMVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L0tjb25maWc6Mjpjb25maWcgTVQ3NjAxVVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc2MDFVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTU2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1UNzYwMVUgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBgTVQ3NjAxVWAgcHJvamVjdC4gQmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IHRvdWNoaW5nIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgYW55IG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lIGFuZCBlbnN1cmluZyBhIHNtb290aCBpbnRlZ3JhdGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBvdGhlciBsaWJyYXJpZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgdGhpcyBiZWFzdCByZWxpZXMgb24uIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbj8gRG9lcyBpdCBuZWVkIGFueSBjdXN0b20gZmlybXdhcmUgYmxvYnM/IEFyZSB0aGVyZSBhbnkgdGhpcmQtcGFydHkgbGlicmFyaWVzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoaWNoIHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eT8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBzdXNwZWN0cyAtIHRoZSBzdGFuZGFyZCB3aXJlbGVzcyBzdGFjayBjb21wb25lbnRzLCBhbnkgY3VzdG9tIEhBTCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGJvYXJkLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLgoKTmV4dCwgSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBXaGF0IGJ1aWxkIHRvb2xzIGFyZSB1c2VkPyBJcyBpdCBNYWtlLCBDTWFrZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYE1ha2VmaWxlYCBvciBgQ01ha2VMaXN0cy50eHRgIGZpbGVzLCBsb29raW5nIGZvciBpbmNsdWRlIHBhdGhzLCBsaWJyYXJ5IGxpbmtzLCBhbmQgYW55IHByZS0gb3IgcG9zdC1idWlsZCBzdGVwcy4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgaW5zaWdodC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxscy4gSXQmIzM5O3MgZWFzeSB0byBnZXQgbG9zdCBpbiBhIHdlYiBvZiBkZXBlbmRlbmNpZXMsIHNvIEkgbmVlZCB0byBiZSBzeXN0ZW1hdGljLiBJIHdpbGwgbG9vayBmb3IgYW55IGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGNhdXNlIGJ1aWxkIGVycm9ycy4gSSYjMzk7bGwgYWxzbyBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSB2ZXJzaW9uIGNvbnN0cmFpbnRzLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgY29uZmxpY3RzISBJIGNhbiBoYW5kbGUgdGhpcyBjYXJlZnVsbHkuCgpGaW5hbGx5LCBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gZG9jdW1lbnQgZXZlcnl0aGluZy4gQSBkZXBlbmRlbmN5IGdyYXBoLCBldmVuIGEgc2ltcGxlIG9uZSwgd2lsbCBiZSBpbnZhbHVhYmxlIGRvd24gdGhlIHJvYWQsIGVzcGVjaWFsbHkgaWYgSSBuZWVkIHRvIG1vZGlmeSBvciBkZWJ1ZyB0aGlzIG1vZHVsZSBsYXRlci4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGVzc2VudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNVDc2MDFVXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc2MDFVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDU6XHRcdGRlcGVuZHMgb24gVVNCXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MDFVLWJhc2VkIFVTQiB3aXJlbGVzcyBkb25nbGVzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTM0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNVDc2MDFVIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBNVDc2MDFVYCBkcml2ZXIsIGFuZCBteSBicmFpbiBpcyBpbW1lZGlhdGVseSBtYWtpbmcgY29ubmVjdGlvbnMuIEl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgYSB3aXJlbGVzcyBjaGlwc2V0LiBUaGUgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIEFQIG1vZGUgc3VwcG9ydCwgd2hpY2ggaW5zdGFudGx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBgTUFDODAyMTFfTUVTSGAgKGdvb2QgY2F0Y2ggb24gdGhhdCBgI2lmZGVmYCkuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEkgc2VlIHRoZXkmIzM5O3JlIGBpZWVlODAyMTFfb3BzYCBjYWxsYmFja3MsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiAgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IGEgZnV6emluZyBzdHJhdGVneS4gVGhlIHBsYW4gd2lsbCBiZSB0byBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlIGFuZCB0aGVuIHVzZSBuZXRsaW5rIGNvbW1hbmRzIHRvIHRyaWdnZXIgQVAgc3RhcnR1cCB2aWEgbWFjODAyMTEuICBUaGF0IHNob3VsZCBsZXQgbWUgaGl0IHRoZXNlIGZ1bmN0aW9ucy4KClNvLCB3aGVyZSBzaG91bGQgSSBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlc2UgZml2ZSBmdW5jdGlvbnMgYXMgdGFyZ2V0czogYG10NzYwMXVfc3RhcnRfYXBgLCBgbXQ3NjAxdV9zdG9wX2FwYCwgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3B1c2hfdHh3aWAsIGFuZCBgbXQ3NjAxdV90eGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBwcm9tcHQhIEl0JiMzOTtzIHRlbGxpbmcgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIHRvIGdldCBhIG1vcmUgZXZlbiBkaXN0cmlidXRpb24gb2YgdGVzdHMuICBgbXQ3NjAxdV90eGAgYW5kIGBtdDc2MDF1X3B1c2hfdHh3aWAgYXJlIGRlZmluaXRlbHkgaG90LXBhdGgsIHNvIHNjcmF0Y2ggdGhvc2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBsaXN0LgoKT2theSwgbGV0JiMzOTtzIHJlZm9jdXMuIE15IGNvcmUgdGFyZ2V0cyB3aWxsIGJlIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYW5kIGBtdDc2MDF1X21hY19jb25maWdfdHNmYC4gTGV0IG1lIGNoZWNrIGlmIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCBpcyBzdGF0aWMuIEl0JiMzOTtzIGluIGBtYWMuY2AgYW5kIGV4cG9zZWQgdmlhIGBtYWMuaGAsIHNvIGl0JiMzOTtzIG5vbi1zdGF0aWMuIEdvb2QuIE5vdywgd2hhdCBhYm91dCBgbXQ3NjAxdV9zdGFydF9hcGAgYW5kIGBtdDc2MDF1X3N0b3BfYXBgPyBUaGV5JiMzOTtyZSBpbiBgbWFpbi5jYCBhbmQgdGhleSBhcmUgZGVjbGFyZWQgc3RhdGljLiBCdXQsIHdhaXQuLi50aGV5IGFyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AuIFNpbmNlIHRoZXkgYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJiMzOTt0KiBpbmxpbmUgdGhlbS4gQnV0LCB0byBiZSBzYWZlLCBJJiMzOTtsbCBpbmNsdWRlIHRoZW0gaW4gbXkgbGlzdCBvZiBmdXp6aW5nIHRhcmdldHMuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYD8gSXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gZ29vZCB0byBnby4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGdvdCBtb2RpZmllZC4gYG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlYCBpcyBtb2RpZmllZCwgYnV0IHRoYXQmIzM5O3MganVzdCBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgSSYjMzk7bSBub3QgdGhhdCB3b3JyaWVkIGFib3V0IHRoYXQuIEhtbSwgYG10NzZfbWFjX3R4X3JhdGVfdmFsYCBpcyBhbHNvIG1vZGlmaWVkLCBhbmQgdGhhdCBpcyBpbiBgbWFjLmNgLiBJIHNob3VsZCBwcm9iYWJseSBpbnZlc3RpZ2F0ZSB0aGF0IG9uZSBhcyB3ZWxsLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIG9mIGBtdDc2MDF1X3N0YXJ0X2FwYCBhbmQgYG10NzYwMXVfc3RvcF9hcGAuIEdvdHRhIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGlucHV0IGFuZCBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9zdGFydF9hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTEzND1tdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTk5OnN0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIwMC1cdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTQ1OD1jb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtdDc2MDF1X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzEtXHQuYnNzX2luZm9fY2hhbmdlZCA9IG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjQ3MjpcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzMtXHQuc3RvcF9hcCA9IG10NzYwMXVfc3RvcF9hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGVtYmVkZGVkIHN5c3RlbXMgYW5kIDgwMi4xMSBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTEgT3BlcmF0aW9ucyBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyB0aGF0IHNvbWV0aGluZyBpcyBiZWluZyAmIzM0O2Fzc2lnbmVkIHRvIGBpZWVlODAyMTFfb3BzYCYjMzQ7LiBSaWdodCwgdGhvc2Ugb3BlcmF0aW9ucyBhcmUgcHJldHR5IG11Y2ggc3RhdGljLCBhcmVuJiMzOTt0IHRoZXk/IFRoZXkmIzM5O3JlIGRlZmluZWQgYXQgY29tcGlsZSB0aW1lIGFuZCBob29rZWQgaW50byB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIGRyaXZlciB3b3VsZCB0aGVuIHBvcHVsYXRlIHRoZSBgaWVlZTgwMjExX29wc2Agd2l0aCBpdCYjMzk7cyBzcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycy4KClNvLCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBhbmQgZmlndXJlIG91dCB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0LiBUaGUgbm90ZSBtZW50aW9ucyBhIGZ1bmN0aW9uLCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhhdCBmdW5jdGlvbiBkaXJlY3RseSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBhc3NpZ25lZCB0byB0aGlzIHNwZWNpZmljIG9wZXJhdGlvbmFsIHN0cnVjdHVyZSwgYW5kIGluIHRoaXMgY2FzZSwgaXQgYXBwZWFycyB3ZSBhcmUgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIGJlYWNvbiBmdW5jdGlvbmFsaXR5LiBXZSBtYXkgd2FudCB0byBhbHNvIGNoZWNrIGZvciByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBpbnZvbHZlIHRoZSBoYXJkd2FyZSBhbmQgbWVkaXVtIGFjY2VzcyBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MDF1X21hY19zZXRfYmVhY29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYz0zOTI9dm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYzo0MTc6aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxOC1cdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmg9MTY5PXZvaWQgbXQ3NjAxdV9zZXRfbWFjYWRkcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaDoxNzA6aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oLTE3MS1cdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2Ni1cdGlmICgoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoxNjc6XHRcdG10NzYwMXVfbWFjX3NldF9iZWFjb24oZGV2LCB2aWYsIGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBTdGF0ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIGlzc3VlLiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBXaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyB2YXJpYWJsZSBzdGF0ZT8gTGV0JiMzOTtzIHpvb20gaW4gb24gYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2Qgc3RhcnQuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IHRvIHNlZSBpZiB0aGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gdGltZSBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb24gKFRTRikgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1BQyBsYXllciwgb3IsIGluZGVlZCwgc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbC4gR290dGEgY2hlY2sgaXRzIHZhbHVlcywgaW50ZXJhY3Rpb25zLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBlbGVtZW50IGNoYW5nZXMgZHluYW1pY2FsbHkgaXMga2V5IHRvIHRyb3VibGVzaG9vdGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MDF1X21hY19jb25maWdfdHNmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYz0yNjc9dm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtMjc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYzoyNzU6dm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYy0yNzYtXHRcdFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MTM0PW10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0xNTEtXHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2Vic3NpZCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoxNTI6XHRcdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTUzLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2My1cdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTY0Olx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTY1LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTE5OT1zdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MjE1Olx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgbGlua19jb25mLVx1MDAzZWJlYWNvbl9pbnQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjE2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTIyMj1zdGF0aWMgdm9pZCBtdDc2MDF1X3N0b3BfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MjI5Olx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjMwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oPTM2MT12b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg6MzYyOnZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oLTM2My1cdFx0XHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjA2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgdGhlIG1vZGlmaWNhdGlvbnMuIExldCBtZSBzZWUuLi4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGluIHJlbGF0aW9uIHRvIHRoZSBNVDc2MDFVIGRyaXZlci4gRmlyc3QsIHRoZXJlJiMzOTtzIGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAsIGBtdDc2X21hY190eF9yYXRlX3ZhbGAsIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgLCBgbXQ3NjAxdV9zdGFydF9hcGAsIGBtdDc2MDF1X3N0b3BfYXBgLCBgbXQ3NjAxdV9wdXNoX3R4d2lgLCBhbmQgYG10NzYwMXVfdHhgLgoKQWxyaWdodCwgYSBmZXcgb2YgdGhlc2UgYXJlIGNsZWFybHkgaW1wb3J0YW50LiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBiZWluZyBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wcy5ic3NfaW5mb19jaGFuZ2VkYCwgd2hpY2ggaXMgYSBrZXkgY2FsbGJhY2suIGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIHVzZWQgYnkgYG10NzYwMXVfcHVzaF90eHdpYC4gU28gbGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHJlYWxseSBmb2N1cyBvbiB0aG9zZSBzeW1ib2xzOgoKYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYC4KCkhtbSwgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCBhcmUgc3RhdGljLiBJIHdpbGwgaW5jbHVkZSB0aGVtIGFueXdheSwganVzdCBpbiBjYXNlLgoKTm93IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQuIFRoZSBwYXRjaCByZWZlcmVuY2VzIGAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hgLiBTbywgYE1BQzgwMjExX01FU0hgIHNob3VsZCBiZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0IHdvdWxkIGJlIHdpc2UgdG8gYWRkIGBNVDc2MDFVYCB0byBgRW5hYmxlQ29uZmlnc2AgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmb3IgYE1BQzgwMjExX01FU0hgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfTUVTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnPTYwPWNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE1BQzgwMjExX01FU0hgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBsYW5kc2NhcGUgYXJvdW5kIGBNQUM4MDIxMV9NRVNIYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgbWVudGFsbHkgY2hlY2tpbmcgZm9yIGFueSBkZXBlbmRlbnQgbW9kdWxlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCwgZ2l2ZW4gaXRzIG5hdHVyZSwgdGhlcmUgKndpbGwqIGJlIGRlcGVuZGVuY2llcy4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGV5LCBhbmQgaG93IGRlZXBseSBpbnRlcnR3aW5lZCBpcyB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByZWxpYW5jZSBvbiBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHRoZSBicm9hZGVyIGtlcm5lbC4gSXMgaXQgdGlnaHRseSBjb3VwbGVkLCBvciBjYW4gSSBjb25zaWRlciBpdCBtb3JlIG1vZHVsYXI/IFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IHRyZWUgaXMgY3J1Y2lhbCBmb3IgYW55IGtpbmQgb2YgZGV2ZWxvcG1lbnQgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCBtYWM4MDIxMSBpbnRlcm5hbHMgd2l0aCBrdW5pdC5cbiAgNjc6XHRcbiAgNjg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgTUFDODAyMTFfTUVTSFxuICA3MTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSA4MDIuMTEgbWVzaCBvcGVyYXRpb24gaW4gbWFjODAyMTFcbiAgNzU6XHRcdCAgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQuICA4MDIuMTEgbWVzaCBjb25uZWN0cyBtdWx0aXBsZSBzdGF0aW9uc1xuICA3NjpcdFx0ICBvdmVyIChwb3NzaWJseSBtdWx0aS1ob3ApIHdpcmVsZXNzIGxpbmtzIHRvIGZvcm0gYSBzaW5nbGUgbG9naWNhbFxuICA3NzpcdFx0ICBMQU4uXG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnIE1BQzgwMjExX0xFRFNcbiAgODA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuICA4MTpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICA4MjpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuICA4MzpcdFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiAgODQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIGRlZXBseToKCioqRGVlcCBEaXZlIGludG8gTUFDODAyMTEgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoaW5nZXMgb24gYE1BQzgwMjExYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGVyZWZvcmUsIHRvIGdldCB0aGlzIHJpZ2h0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbmVlZHMgdG8gaW5jbHVkZSBgTVQ3NjAxVWAgYW5kIGBNQUM4MDIxMV9NRVNIYC4gVGhhdCBtYWtlcyBzZW5zZTsgYE1BQzgwMjExX01FU0hgIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVzaCBuZXR3b3JraW5nIGNhcGFiaWxpdGllcywgd2hpY2ggbGlrZWx5IHJlbHkgaGVhdmlseSBvbiBgTUFDODAyMTFgIGl0c2VsZi4KCk5vdywgaG9sZCBvbi4uLiBgTVQ3NjAxVWAgYWxzbyBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGJ1dCBhbHNvIG9uIGBVU0JgLiBUaGlzIGlzIHR5cGljYWwgZm9yIGEgVVNCIHdpcmVsZXNzIGRldmljZS4gVGhpcyBVU0IgZGVwZW5kZW5jeSBtYWtlcyBtZSB3b25kZXIgYWJvdXQgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIFVTQiBob3N0IGludGVyZmFjZS4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgc3R1ZmYsIHRob3VnaCBJIG5lZWQgdG8ga2VlcCBpdCBpbiBtaW5kIGFzIEkgYnVpbGQgdGhlIGNvbmZpZ3VyYXRpb24uCgpCZWZvcmUgSSBsb2NrIHRoaXMgZG93biwgSSBzaG91bGQgZG8gYSBxdWljayByZXZpZXcgb2YgdGhlIGBNVDc2MDFVYCBzZXR0aW5ncyBvbmNlIG1vcmUsIGp1c3QgdG8gZW5zdXJlIHRoYXQgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSBvdGhlciBkZXBlbmRlbmN5IGFuZCBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gQSBmaW5hbCBsb29rIHdpbGwgaGVscCBtZSBmZWVsIGNvbmZpZGVudCB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1UNzYwMVVcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzYwMVUgKFVTQikgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzYwMVUtYmFzZWQgVVNCIHdpcmVsZXNzIGRvbmdsZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTM0CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVQ3NjAxVSBNZXNoIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGJhc2VkIG9uIHRoZSBwcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uLCBpdCBsb29rcyBsaWtlIHRoZSBgTVQ3NjAxVWAgZHJpdmVyLCBjb21iaW5lZCB3aXRoIGBNQUM4MDIxMV9NRVNIYCBmdW5jdGlvbmFsaXR5LCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHRhc2suIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzLCB0aGUgb25lcyB0aGF0IHJlYWxseSBkcml2ZSB0aGUgYmVoYXZpb3I6IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLCBgbXQ3NjAxdV9zdGFydF9hcGAsIGBtdDc2MDF1X3N0b3BfYXBgLCBhbmQgYG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZGAuCgpBaCwgaGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQuIEl0IHNlZW1zIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIGNvcnJlY3QsIG5vdyBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZS4gSXQgYXBwZWFycyB0aGUgbW9kaWZpY2F0aW9uIGlzIHRvIGVuc3VyZSB0aGF0LCB3aGVuZXZlciBCU1MgaW5mbyBjaGFuZ2VzLCBpdCBub3cgY2FsbHMgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgIHdpdGggYm90aCBgdmlmYCBhbmQgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGNvbWJpbmF0aW9uIOKAkyBpdCBwcm9iYWJseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGltZSBzeW5jaHJvbml6YXRpb24gYW5kIGJlYWNvbiB1cGRhdGVzLCBhbGlnbmluZyB3aXRoIHdoYXQgSSBleHBlY3QgZnJvbSBhIG1lc2ggaW1wbGVtZW50YXRpb24uCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBpbXBvcnRhbnQgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgZHJpdmVyLiBJIG11c3QgY29uZmlybSBpZiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZSBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzYwMXVfYnNzX2luZm9fY2hhbmdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTEzMz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTM0Om10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTEzNS1cdFx0XHQgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTY0IGNoYW5nZWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9NDU4PWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzYwMXVfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTQ3MC1cdC5jb25maWd1cmVfZmlsdGVyID0gbXQ3Nl9jb25maWd1cmVfZmlsdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6NDcxOlx0LmJzc19pbmZvX2NoYW5nZWQgPSBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzItXHQuc3RhcnRfYXAgPSBtdDc2MDF1X3N0YXJ0X2FwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0MAoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiA1NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIG10NzYwMXUgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBpbml0aWFsIGFzc3VtcHRpb24gdGhhdCBldmVyeXRoaW5nIGlzIHN0YXRpYyBuZWVkcyByZXZpc2lvbi4gSSBzZWUgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGFuZCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAgYXJlIGRlZmluaXRlbHkgbm90IHN0YXRpYywgc28gdGhvc2UgYXJlIGtleSBlbnRyeSBwb2ludHMuIEkmIzM5O2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCBhbG9uZyB3aXRoIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCwgYXMgdGhleSBzZWVtIHJlbGV2YW50IHRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCkkgZ2xhbmNlZCBhdCBgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2VgLCBidXQgaXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCBJJiMzOTttIGdlbmVyYWxseSBub3QgYXMgaW50ZXJlc3RlZCBpbiB0aG9zZSBmb3IgZnV6emluZy4gU2ltaWxhcmx5LCBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyBkZWVwbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSB0cmFuc21pdCBwYXRoLCB3aGljaCBtYWtlcyBpdCBsZXNzIGNyaXRpY2FsIGhlcmUuIEkmIzM5O20gcHJpb3JpdGl6aW5nIGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBuZXcgQVAvTWVzaCBmdW5jdGlvbmFsaXR5LgoKSSByZWNoZWNrZWQgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCwgYW5kIHllcywgdGhleSAqYXJlKiBzdGF0aWMsIGJ1dCBzaW5jZSB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AsIHRoZXkmIzM5O3JlIGNhbGxlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5JiMzOTtyZSB2YWxpZCB0YXJnZXRzLiBUaGV5IGFyZSBpbXBvcnRhbnQuCgpOb3csIG9uIHRoZSBjb25maWcgc2lkZTogYE1BQzgwMjExYCBhbmQgYFVTQmAgYXJlIHN0YW5kYXJkLCBvYnZpb3VzbHkuIGBNVDc2MDFVYCBpcyB0aGUgZHJpdmVyLCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCBjcml0aWNhbGx5LCBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIGZvciB0aGUgbWVzaCBhc3BlY3QuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgYXMgYW4gZW5hYmxlciB0b28uCgpTbywgdGhlIHN1bW1hcnkgb2YgbXkgZGVjaXNpb25zIGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGUgbmV3IEFQLCBNZXNoLCBQMlAsIGFuZCBBZC1Ib2MgZnVuY3Rpb25hbGl0aWVzIG1ha2UgdGhpcyBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IFVTQiBkZXZpY2VzIGFyZSBlbXVsYXRhYmxlLgoqICAgKipGb2N1c1N5bWJvbHM6KioKICAgICogICBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAKICAgICogICBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAKICAgICogICBgbXQ3NjAxdV9zdGFydF9hcGAKICAgICogICBgbXQ3NjAxdV9zdG9wX2FwYAogICAgKiAgIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KioKICAgICogICBgTVQ3NjAxVWAKICAgICogICBgTUFDODAyMTFfTUVTSGAKCk15IHJlYXNvbmluZyBpcyB0aGUgYWRkaXRpb24gb2YgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyIGJ5IG1vZGlmeWluZyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzYwMVUmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzYwMXVfbWFjX3NldF9iZWFjb24mIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9tYWNfY29uZmlnX3RzZiYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0YXJ0X2FwJiMzNDssCiAgICAmIzM0O210NzYwMXVfc3RvcF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIG1vZGVzIHRvIHRoZSBtdDc2MDF1IFVTQiB3aXJlbGVzcyBkcml2ZXIuIEl0IG1vZGlmaWVzIG1hYzgwMjExIGNhbGxiYWNrcyB0byBoYW5kbGUgYmVhY29uIHNldHVwLCBUU0YgY29uZmlndXJhdGlvbiwgYW5kIEFQIHN0YXJ0L3N0b3Agb3BlcmF0aW9ucy4gU2luY2UgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGRldmljZXMgKHZoY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc2MDFVJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc2MDF1X21hY19zZXRfYmVhY29uJiMzNDssCiAgICAmIzM0O210NzYwMXVfbWFjX2NvbmZpZ190c2YmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9zdGFydF9hcCYjMzQ7LAogICAgJiMzNDttdDc2MDF1X3N0b3BfYXAmIzM0OywKICAgICYjMzQ7bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyLiBJdCBtb2RpZmllcyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXG5cbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTM6NDk6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jCmluZGV4IDVkOWU5NTJiMjk2NjQuLmU4NzFmN2I2M2NiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jCkBAIC0xMiw2ICYjNDM7MTIsMjUgQEAKIAogI2luY2x1ZGUgJiMzNDtpbml0dmFscy5oJiMzNDsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IGlmX2xpbWl0c1tdID0gewomIzQzOwl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIH0sCiYjNDM7CXsgLm1heCA9IDgsCiYjNDM7CSAgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKJiM0MzsjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKJiM0MzsJCSAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CiYjNDM7I2VuZGlmCiYjNDM7CQkgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8CiYjNDM7CQkgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpZl9jb21iW10gPSB7IHsKJiM0MzsJLmxpbWl0cyA9IGlmX2xpbWl0cywKJiM0MzsJLm5fbGltaXRzID0gQVJSQVlfU0laRShpZl9saW1pdHMpLAomIzQzOwkubWF4X2ludGVyZmFjZXMgPSAyLAomIzQzOwkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsCiYjNDM7CS5iZWFjb25faW50X2luZnJhX21hdGNoID0gdHJ1ZSwKJiM0Mzt9IH07CiYjNDM7CiBzdGF0aWMgdm9pZAogbXQ3NjAxdV9zZXRfd2xhbl9zdGF0ZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIHZhbCwgYm9vbCBlbmFibGUpCiB7CkBAIC01OTksNiAmIzQzOzYxOCw3IEBAIGludCBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldikKIAlpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7CiAJaWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpOwogCWllZWU4MDIxMV9od19zZXQoaHcsIE1GUF9DQVBBQkxFKTsKJiM0MzsJaWVlZTgwMjExX2h3X3NldChodywgTkVFRFNfVU5JUVVFX1NUQV9BRERSKTsKIAlody0mZ3Q7bWF4X3JhdGVzID0gMTsKIAlody0mZ3Q7bWF4X3JlcG9ydF9yYXRlcyA9IDc7CiAJaHctJmd0O21heF9yYXRlX3RyaWVzID0gMTsKQEAgLTYwNyw5ICYjNDM7NjI3LDE2IEBAIGludCBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldikKIAlody0mZ3Q7dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpOwogCiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi0mZ3Q7bWFjYWRkcik7Ci0KJiM0MzsJd2lwaHktJmd0O2ludGVyZmFjZV9tb2RlcyA9CiYjNDM7CQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKJiM0MzsjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKJiM0MzsJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CiYjNDM7I2VuZGlmCiYjNDM7CQlCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8CiYjNDM7CQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwomIzQzOwl3aXBoeS0mZ3Q7aWZhY2VfY29tYmluYXRpb25zID0gaWZfY29tYjsKJiM0MzsJd2lwaHktJmd0O25faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRShpZl9jb21iKTsKIAl3aXBoeS0mZ3Q7ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SOwotCXdpcGh5LSZndDtpbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAJd2lwaHktJmd0O2ZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUzsKIAogCXdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9DUU1fUlNTSV9MSVNUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jCmluZGV4IGNhOWNmNjI4ZWIxMGQuLjVlMmRlYzEzMTMzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYwpAQCAtMTE4LDE5ICYjNDM7MTE4LDI3IEBAIHUxNiBtdDc2X21hY190eF9yYXRlX3ZhbChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwKIAkJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpCiAJCQlidyA9IDE7CiAJfSBlbHNlIHsKLQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyOwotCQlpbnQgYmFuZCA9IGRldi0mZ3Q7Y2hhbmRlZi5jaGFuLSZndDtiYW5kOwotCQl1MTYgdmFsOwotCi0JCXIgPSAmYW1wO2Rldi0mZ3Q7aHctJmd0O3dpcGh5LSZndDtiYW5kc1tiYW5kXS0mZ3Q7Yml0cmF0ZXNbcmF0ZS0mZ3Q7aWR4XTsKLQkJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCi0JCQl2YWwgPSByLSZndDtod192YWx1ZV9zaG9ydDsKLQkJZWxzZQotCQkJdmFsID0gci0mZ3Q7aHdfdmFsdWU7CiAKLQkJcGh5ID0gdmFsICZndDsmZ3Q7IDg7Ci0JCXJhdGVfaWR4ID0gdmFsICZhbXA7IDB4ZmY7Ci0JCWJ3ID0gMDsKJiM0MzsJCWludCBiYW5kID0gZGV2LSZndDtjaGFuZGVmLmNoYW4tJmd0O2JhbmQ7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiYjNDM7CQkJZGV2LSZndDtody0mZ3Q7d2lwaHktJmd0O2JhbmRzW2JhbmRdOwomIzQzOwomIzQzOwkJaWYgKHJhdGUtJmd0O2lkeCAmbHQ7IDAgfHwgcmF0ZS0mZ3Q7aWR4ICZndDs9IHNiYW5kLSZndDtuX2JpdHJhdGVzKSB7CiYjNDM7CQkJcGh5ID0gTVRfUEhZX1RZUEVfQ0NLOwomIzQzOwkJCXJhdGVfaWR4ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID0KJiM0MzsJCQkJJmFtcDtzYmFuZC0mZ3Q7Yml0cmF0ZXNbcmF0ZS0mZ3Q7aWR4XTsKJiM0MzsJCQl1MTYgdmFsOwomIzQzOwomIzQzOwkJCWlmIChyYXRlLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQomIzQzOwkJCQl2YWwgPSByLSZndDtod192YWx1ZV9zaG9ydDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXZhbCA9IHItJmd0O2h3X3ZhbHVlOwomIzQzOwomIzQzOwkJCXBoeSA9IHZhbCAmZ3Q7Jmd0OyA4OwomIzQzOwkJCXJhdGVfaWR4ID0gdmFsICZhbXA7IDB4ZmY7CiYjNDM7CQl9CiAJfQogCiAJcmF0ZXZhbCA9IEZJRUxEX1BSRVAoTVRfUlhXSV9SQVRFX01DUywgcmF0ZV9pZHgpOwpAQCAtMjY0LDEzICYjNDM7MjcyLDEzIEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYikKIAkJbXQ3Nl9jbGVhcihkZXYsIE1UX0FVVE9fUlNQX0NGRywgTVRfQVVUT19SU1BfUFJFQU1CX1NIT1JUKTsKIH0KIAotdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKQomIzQzO3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCkKIHsKIAl1MzIgdmFsID0gbXQ3NjAxdV9ycihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyk7CiAKLQl2YWwgJmFtcDs9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwKLQkJIE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfAotCQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4pOwomIzQzOwl2YWwgJmFtcDs9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8CiYjNDM7CQkgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTsKIAogCWlmICghZW5hYmxlKSB7CiAJCW10NzYwMXVfd3IoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsIHZhbCk7CkBAIC0yNzksOSAmIzQzOzI4NywyMiBAQCB2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpCiAKIAl2YWwgJmFtcDs9IH5NVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMOwogCXZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUwsIGludGVydmFsICZsdDsmbHQ7IDQpIHwKLQkJTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwKLQkJTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8Ci0JCU1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOOwomIzQzOwkgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47CiYjNDM7CiYjNDM7CS8qIEFQIE1vZGUgKi8KJiM0MzsJaWYgKHZpZiAmYW1wOyZhbXA7ICh2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKJiM0MzsJCSAgICB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSkKJiM0MzsJCXZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDMpIHwKJiM0MzsJCSAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYOwomIzQzOwkvKiBJQlNTIC8gQWQtSG9jIE1vZGUgKi8KJiM0MzsJZWxzZSBpZiAodmlmICZhbXA7JmFtcDsgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQomIzQzOwkJdmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMikgfAomIzQzOwkJICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7CiYjNDM7CS8qIFN0YXRpb24gbW9kZSAqLwomIzQzOwllbHNlCiYjNDM7CQl2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAxKTsKJiM0MzsKJiM0MzsJbXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTsKIH0KIAogc3RhdGljIHZvaWQgbXQ3NjAxdV9jaGVja19tYWNfZXJyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQpAQCAtMzkzLDYgJiM0Mzs0MTQsMzggQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KQogCQkgICBGSUVMRF9QUkVQKE1UX01BWF9MRU5fQ0ZHX0FNUERVLCBtaW5fZmFjdG9yKSk7CiB9CiAKJiM0MztpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldi0mZ3Q7aHcsIHZpZiwgMCk7CiYjNDM7CXN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7CiYjNDM7CWludCBlcnIsIHdvcmRzOwomIzQzOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBVU0IgZGV2aWNlcyBhbHJlYWR5IHJlc2VydmUgZW5vdWdoIHNrYiBoZWFkcm9vbSAqLwomIzQzOwllcnIgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXR4d2kgPSAoc3RydWN0IG10NzZfdHh3aSAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTsKJiM0MzsJbWVtc2V0KHR4d2ksIDAsIHNpemVvZigqdHh3aSkpOwomIzQzOwomIzQzOwl0eHdpLSZndDt3Y2lkID0gMDsKJiM0MzsJdHh3aS0mZ3Q7bGVuX2N0bCA9IGNwdV90b19sZTE2KHNrYi0mZ3Q7bGVuIC0gc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTsKJiM0MzsJdHh3aS0mZ3Q7cmF0ZV9jdGwgPSBjcHVfdG9fbGUxNigwKTsKJiM0MzsKJiM0MzsJd29yZHMgPSBESVZfUk9VTkRfVVAoc2tiLSZndDtsZW4sIDQpOwomIzQzOwllcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSwKJiM0MzsJCQkJICAgICAgIChjb25zdCB1MzIgKilza2ItJmd0O2RhdGEsIHdvcmRzKTsKJiM0MzsJZGV2X2tmcmVlX3NrYihza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBtdDc2X21hY19wcm9jZXNzX3JhdGUoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywgdTE2IHJhdGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaAppbmRleCA1NGJkNGZhYzU0ZDgzLi41Mjg3NTZjY2Y0NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmgKQEAgLTE2Nyw1ICYjNDM7MTY3LDYgQEAgc3RydWN0IG10NzZfdHhfc3RhdHVzCiBtdDc2MDF1X21hY19mZXRjaF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpOwogdm9pZCBtdDc2X3NlbmRfdHhfc3RhdHVzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXMgKnN0YXQpOwogdm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7Ci0KJiM0MztpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYwppbmRleCAwNWJhNDNlMTk4NWM4Li40Mzg5ZTMzMmRmZTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAqCSBydDJ4MDAgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBib3RoZXJlZCB0aG91Z2guCiAJCSAqLwogCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2Jzc2lkKSkKLQkJCW10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCBmYWxzZSwgMCk7CiYjNDM7CQkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApOwogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7CkBAIC0xNjEsNyAmIzQzOzE2MSwyMCBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJfQogCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkKLQkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHRydWUsIGluZm8tJmd0O2JlYWNvbl9pbnQpOwomIzQzOwkJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgaW5mby0mZ3Q7YmVhY29uX2ludCk7CiYjNDM7CiYjNDM7CWlmICgoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9CRUFDT04pICZhbXA7JmFtcDsgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQomIzQzOwkJbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihkZXYsIHZpZiwgaW5mbyk7CiYjNDM7CiYjNDM7CWlmICgoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7ZW5hYmxlX2JlYWNvbikKJiM0MzsJCQltdDc2X3NldChkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywKJiM0MzsJCQkJIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpOwomIzQzOwkJZWxzZQomIzQzOwkJCW10NzZfY2xlYXIoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsCiYjNDM7CQkJCSAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpOwomIzQzOwl9CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9IVCB8fCBjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkKIAkJbXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oZGV2LCBpbmZvLSZndDt1c2VfY3RzX3Byb3QsCkBAIC0xODMsNiAmIzQzOzE5Niw0MyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiYjNDM7CQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc2MDF1X2RldiAqZGV2ID0gaHctJmd0O3ByaXY7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRoZSB3Y2lkIFRhYmxlICovCiYjNDM7CWZvciAoaW50IGkgPSAxOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCW10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogU2V0IHByZSBUQlRUIHRvIDZtcyAqLwomIzQzOwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0lOVF9USU1FUl9DRkcsIE1UX0lOVF9USU1FUl9DRkdfUFJFX1RCVFQsIDYpOwomIzQzOwltdDc2X3NldChkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTsKJiM0MzsKJiM0MzsJbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgbGlua19jb25mLSZndDtiZWFjb25faW50KTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDttdXRleCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rldi0mZ3Q7bXV0ZXgpOwomIzQzOwomIzQzOwltdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7CiYjNDM7CiYjNDM7CW10NzZfY2xlYXIoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rldi0mZ3Q7bXV0ZXgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQKIG10NzZfd2NpZF9hbGxvYyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldikKIHsKQEAgLTQxOSw2ICYjNDM7NDY5LDggQEAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7CiAJLmNvbmZpZyA9IG10NzYwMXVfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyID0gbXQ3Nl9jb25maWd1cmVfZmlsdGVyLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLAomIzQzOwkuc3RhcnRfYXAgPSBtdDc2MDF1X3N0YXJ0X2FwLAomIzQzOwkuc3RvcF9hcCA9IG10NzYwMXVfc3RvcF9hcCwKIAkuc3RhX2FkZCA9IG10NzYwMXVfc3RhX2FkZCwKIAkuc3RhX3JlbW92ZSA9IG10NzYwMXVfc3RhX3JlbW92ZSwKIAkuc3RhX25vdGlmeSA9IG10NzYwMXVfc3RhX25vdGlmeSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgKaW5kZXggMTE4ZDQzNzA3ODUzNy4uNzM2NmUxYzQ3NjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgKQEAgLTM1OSw3ICYjNDM7MzU5LDggQEAgdm9pZCBtdDc2MDF1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGxlZ2FjeV9wcm90LAogCQkJCWludCBodF9tb2RlKTsKIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYik7Ci12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpOwomIzQzO3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7CiB2b2lkCiBtdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpOwogdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYwppbmRleCA1YWVlYWMwZGQ5ZmU3Li40N2M3OGM0ZmY1MTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jCkBAIC0yNyw2ICYjNDM7MjcsMTQgQEAgc3RhdGljIHU4IHEyaHdxKHU4IHEpCiBzdGF0aWMgdTggc2tiMnEoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcWlkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsKJiM0MzsJaWYgKGllZWU4MDIxMV9pc19tZ210KGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgfHwKJiM0MzsJICAgIChpbmZvLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkgewomIzQzOwkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgTVRfVFhRX1ZPKTsKJiM0MzsJCXJldHVybiBxMmh3cShNVF9UWFFfVk8pOwomIzQzOwl9CiAKIAlpZiAoV0FSTl9PTihxaWQgJmd0Oz0gTVRfVFhRX1BTRCkpIHsKIAkJcWlkID0gTVRfVFhRX0JFOwpAQCAtMTM0LDYgJiM0MzsxNDIsOSBAQCBtdDc2MDF1X3B1c2hfdHh3aShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlID0gJmFtcDtpbmZvLSZndDtjb250cm9sLnJhdGVzWzBdOwogCXN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItJmd0O2RhdGE7CiYjNDM7CWJvb2wgaXNfbWdtdCA9IGllZWU4MDIxMV9pc19tZ210KGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiYjNDM7CWJvb2wgaXNfbWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItJmd0O2FkZHIxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgaXNfcHJvYmU7CiAJdTMyIHBrdF9pZDsKQEAgLTE0OCwxNCAmIzQzOzE1OSwxNCBAQCBtdDc2MDF1X3B1c2hfdHh3aShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICAgaW5mby0mZ3Q7Y29udHJvbC5yYXRlcywgMSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwotCWlmIChyYXRlLSZndDtpZHggJmx0OyAwIHx8ICFyYXRlLSZndDtjb3VudCkKJiM0MzsJaWYgKCFpc19tZ210ICZhbXA7JmFtcDsgKHJhdGUtJmd0O2lkeCAmbHQ7IDAgfHwgIXJhdGUtJmd0O2NvdW50KSkKIAkJcmF0ZV9jdGwgPSB3Y2lkLSZndDt0eF9yYXRlOwogCWVsc2UKIAkJcmF0ZV9jdGwgPSBtdDc2X21hY190eF9yYXRlX3ZhbChkZXYsIHJhdGUsICZhbXA7bnNzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJdHh3aS0mZ3Q7cmF0ZV9jdGwgPSBjcHVfdG9fbGUxNihyYXRlX2N0bCk7CiAKLQlpZiAoIShpbmZvLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCiYjNDM7CWlmICghKGluZm8tJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmYW1wOyZhbXA7IHN0YSAmYW1wOyZhbXA7ICFpc19tY2FzdCkKIAkJdHh3aS0mZ3Q7YWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfUkVROwogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpCiAJCXR4d2ktJmd0O2Fja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX05TRVE7CkBAIC0xOTcsNiAmIzQzOzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAogCXN0cnVjdCBtdDc2X3N0YSAqbXN0YSA9IE5VTEw7CiAJc3RydWN0IG10NzZfd2NpZCAqd2NpZCA9IGRldi0mZ3Q7bW9uX3djaWQ7CiAJc3RydWN0IG10NzZfdHh3aSAqdHh3aTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJYm9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0mZ3Q7YWRkcjEpOwogCWludCBwa3RfbGVuID0gc2tiLSZndDtsZW47CiAJaW50IGh3X3EgPSBza2IycShza2IpOwogCkBAIC0yMTEsNyAmIzQzOzIyNCw3IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAogCWlmIChzdGEpIHsKIAkJbXN0YSA9IChzdHJ1Y3QgbXQ3Nl9zdGEgKikgc3RhLSZndDtkcnZfcHJpdjsKIAkJd2NpZCA9ICZhbXA7bXN0YS0mZ3Q7d2NpZDsKLQl9IGVsc2UgaWYgKHZpZikgewomIzQzOwl9IGVsc2UgaWYgKHZpZiAmYW1wOyZhbXA7IGlzX21jYXN0KSB7CiAJCXN0cnVjdCBtdDc2X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3Nl92aWYgKil2aWYtJmd0O2Rydl9wcml2OwogCiAJCXdjaWQgPSAmYW1wO212aWYtJmd0O2dyb3VwX3djaWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UNzYwMVUgRHJpdmVyIFBhdGNoIGZvciBNdWx0aS1JbnRlcmZhY2UgU3VwcG9ydCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGVuaGFuY2luZyB0aGUgYG10NzYwMXVgIGRyaXZlciB0byBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgbGlrZSBBUCwgTWVzaCwgUDJQLCBBZGhvYywgYW5kIFN0YXRpb24gbW9kZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCBzdGVwLCBleHBhbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRyaXZlciBjb25zaWRlcmFibHkuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOgoKRmlyc3QsIGluIGBpbml0LmNgLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBpZl9saW1pdHNgIGFuZCBgaWZfY29tYmAgaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZmxleGlibGUgYXJjaGl0ZWN0dXJlIGNhcGFibGUgb2YgbWFuYWdpbmcgbXVsdGlwbGUgY29uY3VycmVudCBpbnRlcmZhY2VzLCBhbmQgaXQmIzM5O3MgYWxzbyBzZXR0aW5nIG5lY2Vzc2FyeSBpbnRlcmZhY2UgbW9kZXMuIFNldHRpbmcgYE5FRURTX1VOSVFVRV9TVEFfQUREUmAgaW4gdGhlIGhhcmR3YXJlIGhpbnRzIGF0IHRoZSBkcml2ZXImIzM5O3MgY2FwYWJpbGl0eSB0byBoYW5kbGUgdW5pcXVlIE1BQyBhZGRyZXNzZXMgZm9yIHN0YXRpb25zIGluIGRpZmZlcmVudCBtb2Rlcy4KCk1vdmluZyB0byBgbWFjLmNgLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGFyZSBzdHJhaWdodGZvcndhcmQg4oCTIGFkZHJlc3NpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUga2V5IGhlcmUsIHRob3VnaCwgaXMgdGhlIGNoYW5nZSB0byBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAuIEl0JiMzOTtzIG5vdyB0YWtpbmcgYSBgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZmAgd2hpY2ggaXMgY3J1Y2lhbCwgYmVjYXVzZSB0aGlzIGNoYW5nZSwgY291cGxlZCB3aXRoIHRoZSBhZGRpdGlvbnMgaW4gYG1haW4uY2AgYWxsb3dzIG1lIHRvIGNvbmZpZ3VyZSBUU0YgKFRpbWVzdGFtcCBjb3VudGVyKSBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgaW50ZXJmYWNlIHR5cGUgKEFQLCBBZC1Ib2MsIG9yIFN0YXRpb24pLiBUaGUgbmV3IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZzsgaXQgYWxsb2NhdGVzIGFuIFNLQiBmb3IgdGhlIGJlYWNvbiwgcHVzaGVzIGEgYHN0cnVjdCBtdDc2X3R4d2lgIGhlYWRlciwgaW5pdGlhbGl6ZXMgaXQsIGFuZCB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgZGV2aWNlIHVzaW5nIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLgoKSW4gYG1haW4uY2AsIHRoZSB1cGRhdGVzIHRvIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgIGFyZSBjcml0aWNhbC4gQ2FsbGluZyBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAgd2l0aCBgdmlmYCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgbmV3IGhhbmRsaW5nIGZvciBgQlNTX0NIQU5HRURfQkVBQ09OYCBhbmQgYEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEYCBpcyBleHBlY3RlZCBhbmQgcmVxdWlyZWQgZm9yIG1hbmFnaW5nIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uLiBBZGRpbmcgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCB0byBgaWVlZTgwMjExX29wc2AgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBlbnRyeSBwb2ludHMgZm9yIEFQIG1hbmFnZW1lbnQsIHdoaWNoIHdpbGwgYmUgZXNzZW50aWFsLgoKRmluYWxseSwgYHR4LmNgIGhhcyBjaGFuZ2VzIGNlbnRlcmVkIGFyb3VuZCBmcmFtZSBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWUgbWFuYWdlbWVudC4gVGhlIG1vZGlmaWNhdGlvbiB0byBgc2tiMnFgIGZvciBtYW5hZ2VtZW50IGFuZCBpbmplY3RlZCBmcmFtZXMgbWFrZXMgc2Vuc2UgZm9yIFFvUy4gYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYG10NzYwMXVfdHhgIGhhdmUgdGhlIHJpZ2h0IGNoZWNrcyBmb3IgbXVsdGljYXN0cyBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIHdoaWNoIGlzIHNvbWV0aGluZyBJJiMzOTtkIGV4cGVjdCB0byBzZWUuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGFzIGl0IGNvbmNlcm5zIG1lIGhlcmUsIEkgd2FudCB0byBhc3Nlc3MgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgcHJldHR5IGNsZWFuLiBUaGUgYHR4d2lgIGlzIGRlZmluaXRlbHkgemVyb2VkLiBUaGUgZGF0YSB3cml0dGVuIHZpYSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBvcmlnaW5hdGVzIGZyb20gYHNrYmAuIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYCBpcyB1c2VkLCBhbmQgdGhlIGJlYWNvbiBpcyBidWlsdCBieSBtYWM4MDIxMS4gV2hhdCYjMzk7cyBjb25jZXJuaW5nIGlzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgdG8gVVNCIGRvZXNuJiMzOTt0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuIEtNU0FOIHdvdWxkbiYjMzk7dCBjb21wbGFpbiBhYm91dCBkYXRhIGJlaW5nIHNlbnQgdG8gaGFyZHdhcmUgdmlhIGEgVVNCIHNpbmNlIGl0IGNhbiYjMzk7dCBkZXRlY3QgaXQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2FmZS4gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2Agd3JpdGVzIHRvIFVTQiBkaXJlY3RseSwgc28gSSB3YW50IHRvIGtub3cgaWYgaXQgdXNlcyBETUEuIEkgc2hvdWxkIGNoZWNrIHRoYXQgZnVuY3Rpb24gdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jPTE5MT1zdGF0aWMgaW50IG10NzYwMXVfaW5pdF93Y2lkX21lbShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYzoyMDU6XHRyZXQgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9XQ0lEX0FERFJfQkFTRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jLTIwNi1cdFx0XHRcdCAgICAgICB2YWxzLCBOX1dDSURTICogMik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmM9MjEyPXN0YXRpYyBpbnQgbXQ3NjAxdV9pbml0X2tleV9tZW0oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjE1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmM6MjE2Olx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX1NLRVlfTU9ERV9CQVNFXzAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMTctXHRcdFx0XHRcdHZhbHMsIEFSUkFZX1NJWkUodmFscykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jPTIyMD1zdGF0aWMgaW50IG10NzYwMXVfaW5pdF93Y2lkX2F0dHJfbWVtKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jLTIzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jOjIzMjpcdHJldCA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX1dDSURfQVRUUl9CQVNFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjMzLVx0XHRcdFx0ICAgICAgIHZhbHMsIE5fV0NJRFMgKiAyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQ0MS1cdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYzo0NDI6XHRlcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDQzLVx0XHRcdFx0ICAgICAgIChjb25zdCB1MzIgKilza2ItXHUwMDNlZGF0YSwgd29yZHMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM9MjEwPWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjIzOTppbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNDAtXHRcdFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyNjQ6XHRyZXR1cm4gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgb2Zmc2V0ICYjNDM7IGNudCAqIDQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTI2NS1cdFx0XHRcdFx0ZGF0YSAmIzQzOyBjbnQsIG4gLSBjbnQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oPTMyNj1pbnQgbXQ3NjAxdV93cml0ZV9yZWdfcGFpcnMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBiYXNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI3LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3Nl9yZWdfcGFpciAqZGF0YSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaDozMjg6aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oLTMyOS1cdFx0XHQgICAgIGNvbnN0IHUzMiAqZGF0YSwgaW50IG4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdXNiLmM9MjEzPXZvaWQgbXQ3NjAxdV93cl9jb3B5KHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdXNiLmMtMjE4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYzoyMTk6XHRtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBvZmZzZXQsIGRhdGEsIGxlbiAvIDQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYy0yMjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGJ1cnN0IHdyaXRlIG9wZXJhdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCB3aXRoaW4gdGhlIGBtY3UuY2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgZnVuY3Rpb24uIFRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBmb3IgcGVyZm9ybWFuY2UsIG9yIHBlcmhhcHMgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgc29tZSBxdWlya3kgaGFyZHdhcmUgYmVoYXZpb3IgdGhhdCBuZWVkcyBhIGNsb3NlciBpbnNwZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHRoZSByZWdpc3RlciB3cml0ZXMuIElzIGl0IG9wdGltaXplZD8gQXJlIHRoZXkgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBvciBkYXRhIGJ1ZmZlciBpc3N1ZXM/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIHBvdGVudGlhbCBpbnRlcnJ1cHQgZGlzYWJsaW5nLCBjYWNoZSBmbHVzaGluZywgb3Igc3BlY2lmaWMgdGltaW5nIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJlIGNvbW1vbmx5IG5lZWRlZCB3aXRoIGJ1cnN0IHdyaXRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMTA9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTIzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjM5OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTI0MC1cdFx0XHQgICAgIGNvbnN0IHUzMiAqZGF0YSwgaW50IG4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg9MzI2PWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zMjctXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtdDc2X3JlZ19wYWlyICpkYXRhLCBpbnQgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oOjMyODppbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI5LVx0XHRcdCAgICAgY29uc3QgdTMyICpkYXRhLCBpbnQgbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzQ4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgY29kZSByZWZlcmVuY2U6CgoqKkRpdmluZyBpbnRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoYXQgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgZnVuY3Rpb24gd2l0aGluIGBtY3UuY2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgYnVyc3QgcmVnaXN0ZXIgd3JpdGluZyBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGNvbmZpZ3VyaW5nIGFuZCBjb250cm9sbGluZyB0aGUgZGV2aWNlLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYWRkcmVzc2luZyBzY2hlbWUsIHRoZSBkYXRhIGZvcm1hdCBpdCBleHBlY3RzLCBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBpdOKAmXMgdGFyZ2V0aW5nLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBvcHRpbWl6aW5nIHRoZSB3cml0ZSBwcm9jZXNzLCBtYXliZSBieSBncm91cGluZyB3cml0ZXMgdG8gcmVkdWNlIG92ZXJoZWFkLCB0byBlbnN1cmUgZWZmaWNpZW5jeS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBpdCYjMzk7cyB1c2luZyAobGlrZWx5IFVTQiBvciBTUEksIGdpdmVuIHRoZSBjb250ZXh0KSBhbmQgd2hldGhlciBpdCBtYW5hZ2VzIGFueSBkYXRhIGJ1ZmZlcmluZyBvciBlcnJvciBjaGVja2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBNVDc2MDFVIGRyaXZlciBhcmNoaXRlY3R1cmUgdG9vLCB3aGVyZSBkb2VzIHRoaXMgZml0PyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIG9mIGdldHRpbmcgdGhpcyBjaGlwc2V0IG9wZXJhdGluZywgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBhdCBhIHZlcnkgZ3JhbnVsYXIgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM5Olx0aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcbiAyNDA6XHRcdFx0XHQgICAgIGNvbnN0IHUzMiAqZGF0YSwgaW50IG4pXG4gMjQxOlx0e1xuIDI0MjpcdFx0Y29uc3QgaW50IG1heF9yZWdzX3Blcl9jbWQgPSBJTkJBTkRfUEFDS0VUX01BWF9MRU4gLyA0IC0gMTtcbiAyNDM6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMjQ0Olx0XHRpbnQgY250LCBpLCByZXQ7XG4gMjQ1Olx0XG4gMjQ2Olx0XHRpZiAoIW4pXG4gMjQ3Olx0XHRcdHJldHVybiAwO1xuIDI0ODpcdFxuIDI0OTpcdFx0Y250ID0gbWluKG1heF9yZWdzX3Blcl9jbWQsIG4pO1xuIDI1MDpcdFxuIDI1MTpcdFx0c2tiID0gYWxsb2Nfc2tiKGNudCAqIDQgJiM0MzsgTVRfRE1BX0hEUl9MRU4gJiM0MzsgNCwgR0ZQX0tFUk5FTCk7XG4gMjUyOlx0XHRpZiAoIXNrYilcbiAyNTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjU0Olx0XHRza2JfcmVzZXJ2ZShza2IsIE1UX0RNQV9IRFJfTEVOKTtcbiAyNTU6XHRcbiAyNTY6XHRcdHNrYl9wdXRfbGUzMihza2IsIE1UX01DVV9NRU1NQVBfV0xBTiAmIzQzOyBvZmZzZXQpO1xuIDI1NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOylcbiAyNTg6XHRcdFx0c2tiX3B1dF9sZTMyKHNrYiwgZGF0YVtpXSk7XG4gMjU5Olx0XG4gMjYwOlx0XHRyZXQgPSBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0JVUlNUX1dSSVRFLCBjbnQgPT0gbik7XG4gMjYxOlx0XHRpZiAocmV0KVxuIDI2MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDI2MzpcdFxuIDI2NDpcdFx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIG9mZnNldCAmIzQzOyBjbnQgKiA0LFxuIDI2NTpcdFx0XHRcdFx0XHRkYXRhICYjNDM7IGNudCwgbiAtIGNudCk7XG4gMjY2Olx0fVxuIDI2NzpcdFxuIDI2ODpcdHN0cnVjdCBtdDc2X2Z3X2hlYWRlciB7XG4gMjY5Olx0XHRfX2xlMzIgaWxtX2xlbjtcbiAyNzA6XHRcdF9fbGUzMiBkbG1fbGVuO1xuIDI3MTpcdFx0X19sZTE2IGJ1aWxkX3ZlcjtcbiAyNzI6XHRcdF9fbGUxNiBmd192ZXI7XG4gMjczOlx0XHR1OCBwYWRbNF07XG4gMjc0Olx0XHRjaGFyIGJ1aWxkX3RpbWVbMTZdO1xuIDI3NTpcdH07XG4gMjc2Olx0XG4gMjc3Olx0c3RydWN0IG10NzZfZncge1xuIDI3ODpcdFx0c3RydWN0IG10NzZfZndfaGVhZGVyIGhkcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQmVhY29uIEZyYW1lIEludGVncml0eSBpbiBNVDc2MDFVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBiZWFjb24gZnJhbWVzIGFyZSBoYW5kbGVkIGluIHRoZSBNVDc2MDFVIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgdGhlbSB0byB0aGUgaGFyZHdhcmUuIEl0IHNlZW1zIHRoYXQgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB0YWtpbmcgdGhlIGJlYWNvbiBkYXRhLCBjb3B5aW5nIGl0IGludG8gYSBuZXcgU0tCLCBhbmQgdGhlbiB0cmFuc21pdHRpbmcgaXQgdXNpbmcgYG10NzYwMXVfbWN1X21zZ19zZW5kYC4gVGhlIGRhdGEgaXRzZWxmIG9yaWdpbmF0ZXMgZnJvbSBgc2tiLSZndDtkYXRhYCB3aXRoaW4gdGhlIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbi4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgc3RhcnRpbmcgdG8gcmluZy4gIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgNC1ieXRlIHdvcmRzIHRvIGJlIHdyaXR0ZW4gdXNpbmcgYERJVl9ST1VORF9VUChza2ItJmd0O2xlbiwgNClgIGFuZCBJIGFtIHRoaW5raW5nIHRoYXQgaWYgYHNrYi0mZ3Q7bGVuYCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbGVuZ3RoIG9mIHRoZSBiZWFjb24gZGF0YSwgaXNuJiMzOTt0IGEgbXVsdGlwbGUgb2YgNCwgdGhpcyBkaXZpc2lvbiB3aWxsIHJlYWQgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHByb3ZpZGVkIGRhdGEsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBjb25jZXJuaW5nLCBzaW5jZSBpdCBtZWFucyB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2UgZGF0YSB0aGF0IGlzbiYjMzk7dCBwYXJ0IG9mIHRoZSBiZWFjb24uCgpJIHJlYWxseSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgYHNrYmAgdXNlZCBoZXJlIGlzIHJldHVybmVkIGJ5IGBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtJmd0O2h3LCB2aWYsIDApYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGF0KiBmdW5jdGlvbiBpcyBhbGxvY2F0aW5nIGFuZCBwb3B1bGF0aW5nIHRoZSBgc2tiYCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkaXR5IG9mIG91ciB3cml0ZSBvcGVyYXRpb24uIEkgbmVlZCB0byBrbm93IHRoZSBsZW5ndGggb2YgdGhpcyBgc2tiYCBhbmQgaG93IGl0cyBkYXRhIGZpZWxkIGlzIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBteSBhbnN3ZXIuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGllZWU4MDIxMV9iZWFjb25fZ2V0YCBhbmQgY2hlY2sgdGhhdCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGJlYWNvbiBkYXRhIGVuc3VyZSB0aGUgc2FmZXR5IG9mIHRoaXMgd3JpdGUgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfYmVhY29uX2dldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTY2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvODAyMTEvbWFjODAyMTEtYWR2YW5jZWQucnN0PTc1PXN1cHBvcnQgZm9yIHBvd2Vyc2F2aW5nIGNsaWVudHNcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvODAyMTEvbWFjODAyMTEtYWR2YW5jZWQucnN0LTgzLVx0aWVlZTgwMjExX2dldF9idWZmZXJlZF9iY1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpLzgwMjExL21hYzgwMjExLWFkdmFuY2VkLnJzdDo4NDpcdGllZWU4MDIxMV9iZWFjb25fZ2V0XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvODAyMTEvbWFjODAyMTEtYWR2YW5jZWQucnN0LTg1LVx0aWVlZTgwMjExX3N0YV9lb3NwXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYz0xNjQ4PXN0YXRpYyBpbnQgYXRoMTBrX21hY19zZXR1cF9iY25fdG1wbChzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy0xNjYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzoxNjY0Olx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXHUwMDI2b2ZmcywgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTE2NjUtXHRpZiAoIWJjbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmM9Mzg0MT12b2lkIGF0aDEwa193bWlfZXZlbnRfaG9zdF9zd2JhKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmMtMzkxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmM6MzkxOTpcdFx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoYXItXHUwMDNlaHcsIGFydmlmLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jLTM5MjAtXHRcdGlmICghYmNuKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYz0xNTQ2PXN0YXRpYyBpbnQgYXRoMTFrX21hY19zZXR1cF9iY25fdG1wbF9lbWEoc3RydWN0IGF0aDExa192aWYgKmFydmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTU1NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM6MTU1NTpcdGJlYWNvbnMgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCh0eF9hcnZpZi1cdTAwM2Vhci1cdTAwM2VodyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTU1Ni1cdFx0XHRcdFx0XHRcdCB0eF9hcnZpZi1cdTAwM2V2aWYsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM9MTYwMz1zdGF0aWMgaW50IGF0aDExa19tYWNfc2V0dXBfYmNuX3RtcGxfbWJzc2lkKHN0cnVjdCBhdGgxMWtfdmlmICphcnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE2MjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jOjE2MjE6XHRiY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcdTAwMjZvZmZzLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTYyMi1cdGlmICghYmNuKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNzUxPXN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9iY25fdG1wbF9lbWEoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNzYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNzYxOlx0YmVhY29ucyA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KGF0aDEya19hcl90b19odyh0eF9hcnZpZi1cdTAwM2VhciksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE3NjItXHRcdFx0XHRcdFx0XHQgdHhfYXJ2aWYtXHUwMDNlYWh2aWYtXHUwMDNldmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTgwMD1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfYmNuX3RtcGwoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xODM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxODM1Olx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoYXRoMTJrX2FyX3RvX2h3KHR4X2FydmlmLVx1MDAzZWFyKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTgzNi1cdFx0XHRcdFx0ICAgIHR4X2FydmlmLVx1MDAzZWFodmlmLVx1MDAzZXZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jPTE5Mzg9YXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jLTE5NDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jOjE5NTA6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMtMTk1MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmM9MTEyPXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoOWtfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYy0xMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmM6MTM4Olx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMtMTM5LVx0aWYgKHNrYiA9PSBOVUxMKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTE5MT1zdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTIxNy1cdC8qIEdldCBhIG5ldyBiZWFjb24gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjIxODpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yMTktXHRpZiAoIWJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jPTE2MTY9aW50IGNhcmw5MTcwX3VwZGF0ZV9iZWFjb24oc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IGJvb2wgc3VibWl0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jLTE2MjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYzoxNjMwOlx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFyLVx1MDAzZWh3LCBjYXJsOTE3MF9nZXRfdmlmKGN2aWYpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMtMTYzMS1cdFx0XHRcdCAgICAgICBOVUxMLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmM9Nzk5PXN0YXRpYyB2b2lkIHdjbjM2eHhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTM4LVx0XHRcdFx0XHQgICAgICAgdmlmLVx1MDAzZWFkZHIsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L21haW4uYzo5Mzk6XHRcdFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFx1MDAyNnRpbV9vZmYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTQwLVx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZ0aW1fbGVuLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jPTE4MjE9c3RhdGljIHZvaWQgYjQzX3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M193bCAqd2wpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL21haW4uYy0xODM1LVx0ICogU2ltcGx5IHJlcXVlc3QgYSBuZXcgYmVhY29uIGFuZCBsZXQgbWFjODAyMTEgZG8gdGhlIGhhcmQgd29yay4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9tYWluLmM6MTgzNjpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVx1MDAzZWh3LCB3bC1cdTAwM2V2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL21haW4uYy0xODM3LVx0aWYgKHVubGlrZWx5KCFiZWFjb24pKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9tYWluLmM9MTIzMj1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyhzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvbWFpbi5jLTEyNDMtXHQgKiBtYWM4MDIxMSBkbyB0aGUgaGFyZCB3b3JrLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYzoxMjQ0Olx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod2wtXHUwMDNlaHcsIHdsLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvbWFpbi5jLTEyNDUtXHRpZiAodW5saWtlbHkoIWJlYWNvbikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9NTg1PWJyY21zX29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTY4Mi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNndsLVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6NjgzOlx0XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHZpZiwgXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy02ODQtXHRcdGJyY21zX2Nfc2V0X25ld19iZWFjb24od2wtXHUwMDNld2xjLCBiZWFjb24sIHRpbV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9OTQ0PXN0YXRpYyBpbnQgYnJjbXNfb3BzX2JlYWNvbl9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTk1Mi1cdGlmICh3bC1cdTAwM2V3bGMtXHUwMDNldmlmKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6OTUzOlx0XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHdsLVx1MDAzZXdsYy1cdTAwM2V2aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy05NTQtXHRcdFx0XHRcdFx0ICBcdTAwMjZ0aW1fb2Zmc2V0LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2xlZ2FjeS9jb21tb24uYz01MjUyPWlsX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmMtNTI1Ni1cdF9fbGU2NCB0aW1lc3RhbXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2xlZ2FjeS9jb21tb24uYzo1MjU3Olx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmMtNTI1OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjY0PXN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjg2LVx0LyogUHVsbCB1cGRhdGVkIEFQIGJlYWNvbiBmcm9tIG1hYzgwMjExLiB3aWxsIGZhaWwgaWYgbm90IGluIEFQIG1vZGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoyODc6XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZWJlYWNvbl9jdHgtXHUwMDNldmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yODgtXHRpZiAoIWJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4b24uYz0xODA9c3RhdGljIGludCBpd2xhZ25fdXBkYXRlX2JlYWNvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jLTE4NS1cdGRldl9rZnJlZV9za2IocHJpdi1cdTAwM2ViZWFjb25fc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4b24uYzoxODY6XHRwcml2LVx1MDAzZWJlYWNvbl9za2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LVx1MDAzZWh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jLTE4Ny1cdGlmICghcHJpdi1cdTAwM2ViZWFjb25fc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FwLmM9MTU0PWludCBpd2xfbWxkX3VwZGF0ZV9iZWFjb25fdGVtcGxhdGUoc3RydWN0IGl3bF9tbGQgKm1sZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jLTE3OC0jZW5kaWZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FwLmM6MTc5Olx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobWxkLVx1MDAzZWh3LCB2aWYsIE5VTEwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jLTE4MC1cdFx0XHRcdFx0ICAgICAgIGxpbmtfY29uZi1cdTAwM2VsaW5rX2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmM9Njg3PV9pd2xfZGJnZnNfaW5qZWN0X2JlYWNvbl9pZShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2RlYnVnZnMuYy03MTctXHRcdHN0cnVjdCBza19idWZmICpiZWFjb24gPVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZGVidWdmcy5jOjcxODpcdFx0XHRpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtbGQtXHUwMDNlaHcsIHZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2RlYnVnZnMuYy03MTktXHRcdFx0XHRcdFx0ICAgICAgTlVMTCwgbGlua19pZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jPTEzMDk9c3RhdGljIGludCBfaXdsX2RiZ2ZzX2luamVjdF9iZWFjb25faWUoc3RydWN0IGl3bF9tdm0gKm12bSwgY2hhciAqYmluLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2RlYnVnZnMuYy0xMzQ5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jOjEzNTA6XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdm0tXHUwMDNlaHcsIHZpZiwgTlVMTCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kZWJ1Z2ZzLmMtMTM1MS1cdGlmICghYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM9MTE4MD1pbnQgaXdsX212bV9tYWNfY3R4dF9iZWFjb25fY2hhbmdlZChzdHJ1Y3QgaXdsX212bSAqbXZtLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMtMTE4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTE5MDpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKG12bS1cdTAwM2VodywgdmlmLCBOVUxMLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xMTkxLVx0XHRcdFx0XHQgICAgICAgbGlua19jb25mLVx1MDAzZWxpbmtfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM9MTM1PXN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYy0xNDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jOjE0MjpcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbWFpbi5jLTE0My1cdGlmICghYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jPTQxNz1zdGF0aWMgdm9pZCBsYnRmX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmMtNDI5LVx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYzo0MzA6XHRcdFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy00MzEtXHRcdFx0aWYgKGJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jPTY3OT12b2lkIGxidGZfYmNuX3NlbnQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy02OTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYzo2OTk6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy03MDAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2w4ay5jPTUxODI9bXdsOGtfYnNzX2luZm9fY2hhbmdlZF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmMtNTIyMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsOGsuYzo1MjIxOlx0XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsOGsuYy01MjIyLVx0XHRpZiAoc2tiICE9IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9iZWFjb24uYz0zMD1tdDc2MDNfdXBkYXRlX2JlYWNvbl9pdGVyKHZvaWQgKnByaXYsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MDMvYmVhY29uLmMtNDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9iZWFjb24uYzo0MjpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG10NzZfaHcoZGV2KSwgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jLTQzLVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9NjY3PW10NzYxNV9tY3VfYWRkX2JlYWNvbl9vZmZsb2FkKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtNzAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6NzAxOlx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXHUwMDI2b2ZmcywgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy03MDItXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0xMDM3PW10NzYxNV9tY3VfdW5pX2FkZF9iZWFjb25fb2ZmbG9hZChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEwODItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxMDgzOlx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobXQ3Nl9odyhkZXYpLCB2aWYsIFx1MDAyNm9mZnMsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTA4NC1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYz0xMzc9bXQ3NngwMl91cGRhdGVfYmVhY29uX2l0ZXIodm9pZCAqcHJpdiwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MDJfYmVhY29uLmMtMTQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDAyX2JlYWNvbi5jOjE0NzpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG10NzZfaHcoZGV2KSwgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYy0xNDgtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yMDU3PWludCBtdDc5MTVfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjA4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjIwODY6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcdTAwMjZvZmZzLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTIwODctXHRpZiAoIXNrYikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTEyNTA9bXQ3OTIxX21jdV91bmlfYWRkX2JlYWNvbl9vZmZsb2FkKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtMTI5OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjEyOTk6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdDc2X2h3KGRldiksIHZpZiwgXHUwMDI2b2ZmcywgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzAwLVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MjM4Mj1tdDc5MjVfbWN1X3VuaV9hZGRfYmVhY29uX29mZmxvYWQoc3RydWN0IG10NzkyeF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0yNDMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MjQzMjpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKG10NzZfaHcoZGV2KSwgdmlmLCBcdTAwMjZvZmZzLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTI0MzMtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYz0zMTYzPWludCBtdDc5OTZfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtMzE5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjMxOTE6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcdTAwMjZvZmZzLCBsaW5rX2NvbmYtXHUwMDNlbGlua19pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy0zMTkyLVx0aWYgKGVuYWJsZWQgXHUwMDI2XHUwMDI2ICFza2IpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxOS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQyMDpcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQyMS1cdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz00NDg9c3RhdGljIHZvaWQgbW04MXhfbWFjX2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTQ3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6NDcyOlx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobW9ycy1cdTAwM2VodywgdmlmLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTQ3My1cdGlmICghYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYz0xMTU9aW50IHBsZnhsY19yZXN0b3JlX3NldHRpbmdzKHN0cnVjdCBwbGZ4bGNfbWFjICptYWMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTEyOC1cdGlmIChtYWMtXHUwMDNldmlmKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6MTI5Olx0XHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChtYWMtXHUwMDNlaHcsIG1hYy1cdTAwM2V2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTEzMC1cdFx0aWYgKGJlYWNvbikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYz01ODA9c3RhdGljIHZvaWQgcGxmeGxjX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTU5Ni1cdGlmIChjaGFuZ2VzIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT04pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzo1OTc6XHRcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy01OTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jPTc0Mz1pbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JhbGluay9ydDJ4MDAvcnQyeDAwcXVldWUuYy03NTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvcnQyeDAwL3J0MngwMHF1ZXVlLmM6NzU4Olx0aW50Zi1cdTAwM2ViZWFjb24tXHUwMDNlc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocnQyeDAwZGV2LVx1MDAzZWh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jLTc1OS1cdGlmICghaW50Zi1cdTAwM2ViZWFjb24tXHUwMDNlc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTgwL2Rldi5jPTEyODM9c3RhdGljIHZvaWQgcnRsODE4MF9iZWFjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmMtMTI5Ny1cdC8qIGdyYWIgYSBmcmVzaCBiZWFjb24gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTgwL2Rldi5jOjEyOTg6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4MC9kZXYuYy0xMjk5LVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmM9MTA3NT1zdGF0aWMgdm9pZCBydGw4MTg3X2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYy0xMDg5LVx0LyogZ3JhYiBhIGZyZXNoIGJlYWNvbiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmM6MTA5MDpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldiwgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jLTEwOTEtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYz01NjEwPXN0YXRpYyB2b2lkIHJ0bDh4eHh1X3NlbmRfYmVhY29uX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsOHh4eHUvY29yZS5jLTU2MTMtXHRzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAqcHJpdiA9IGh3LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYzo1NjE0Olx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4eHh4dS9jb3JlLmMtNTYxNS1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNldWRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2NvcmUuYz05NzY9c3RhdGljIHZvaWQgc2VuZF9iZWFjb25fZnJhbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2NvcmUuYy05NzktXHRzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvY29yZS5jOjk4MDpcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9jb3JlLmMtOTgxLVx0c3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcGNpLmM9MTAyMT1zdGF0aWMgdm9pZCBfcnRsX3BjaV9wcmVwYXJlX2Jjbl90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcGNpLmMtMTA1NC1cdC8qTkI6IHRoZSBiZWFjb24gZGF0YSBidWZmZXIgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYzoxMDU1Olx0cHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCBtYWMtXHUwMDNldmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYy0xMDU2LVx0aWYgKCFwc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYz0xMjI2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnR3X2dldF9yc3ZkX3BhZ2Vfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYy0xMjUxLVx0Y2FzZSBSU1ZEX0JFQUNPTjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYzoxMjUyOlx0XHRza2JfbmV3ID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFx1MDAyNnRpbV9vZmZzZXQsIE5VTEwsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jLTEyNTMtXHRcdHJzdmRfcGt0LVx1MDAzZXRpbV9vZmZzZXQgPSB0aW1fb2Zmc2V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYz00Njk5PWludCBydHc4OV9md19oMmNfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jLTQ3MjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmM6NDcyNDpcdHNrYl9iZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0ocnR3ZGV2LVx1MDAzZWh3LCB2aWYsIFx1MDAyNnRpbV9vZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmMtNDcyNS1cdFx0XHRcdFx0ICAgICAgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jPTQ3Nzk9aW50IHJ0dzg5X2Z3X2gyY191cGRhdGVfYmVhY29uX2JlKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2Rldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmMtNDgwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYzo0ODAzOlx0c2tiX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShydHdkZXYtXHUwMDNlaHcsIHZpZiwgXHUwMDI2dGltX29mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYy00ODA0LVx0XHRcdFx0XHQgICAgICBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz00MjU9aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ0Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0NDc6XHRtYWNfYmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFkYXB0ZXItXHUwMDNlaHcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NDgtXHRcdFx0XHRcdCAgIHZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jPTMyMT1zdGF0aWMgaW50IHdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHN0cnVjdCB3ZnhfdmlmICp3dmlmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtMzI1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYzozMjY6XHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLVx1MDAzZXdkZXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTMyNy1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9MzQwPXN0YXRpYyBpbnQgd2Z4X3NldF9tZnBfYXAoc3RydWN0IHdmeF92aWYgKnd2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYy0zNDItXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd3ZpZl90b192aWYod3ZpZik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jOjM0MzpcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLVx1MDAzZXdkZXYtXHUwMDNlaHcsIHZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTM0NC1cdGNvbnN0IGludCBpZW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9NTg4PXN0YXRpYyBpbnQgd2Z4X3VwZGF0ZV90aW0oc3RydWN0IHdmeF92aWYgKnd2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYy01OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jOjU5NTpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSh3dmlmLVx1MDAzZXdkZXYtXHUwMDNlaHcsIHZpZiwgXHUwMDI2dGltX29mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtNTk2LVx0XHRcdFx0ICAgICAgIFx1MDAyNnRpbV9sZW5ndGgsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYz0xNjY0PXN0YXRpYyBpbnQgY3cxMjAwX3NldF90aW1faW1wbChzdHJ1Y3QgY3cxMjAwX2NvbW1vbiAqcHJpdiwgYm9vbCBhaWQwX2JpdF9zZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jLTE2NzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvc3RhLmM6MTY3NTpcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZXZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0xNjc2LVx0XHRcdFx0ICAgICAgIFx1MDAyNnRpbV9vZmZzZXQsIFx1MDAyNnRpbV9sZW5ndGgsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYz0yMTg5PXN0YXRpYyBpbnQgY3cxMjAwX3VwbG9hZF9iZWFjb24oc3RydWN0IGN3MTIwMF9jb21tb24gKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jLTIyMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvc3RhLmM6MjIwODpcdGZyYW1lLnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVx1MDAzZWh3LCBwcml2LVx1MDAzZXZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0yMjA5LVx0XHRcdFx0XHQgICAgIFx1MDAyNnRpbV9vZmZzZXQsIFx1MDAyNnRpbV9sZW4sIDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmM9MTA3OD1zdGF0aWMgdm9pZCB3bDEyNTFfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jLTExODktXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jOjExOTA6XHRcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxMjUxL21haW4uYy0xMTkxLVx0XHRpZiAoIWJlYWNvbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jPTQxMTc9c3RhdGljIGludCB3bGNvcmVfc2V0X2JlYWNvbl90ZW1wbGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTQxMjUtXHRpbnQgaWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmM6NDEyNjpcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldCh3bC1cdTAwM2VodywgdmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMtNDEyNy1cdHUxNiB0bXBsX2lkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmM9NTU2Mz1zdGF0aWMgY29uc3Qgdm9pZCAqd2xjb3JlX2dldF9iZWFjb25faWUoc3RydWN0IHdsMTI3MSAqd2wsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL21haW4uYy01NTY4LVx0c3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jOjU1Njk6XHRcdGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVx1MDAzZWh3LCB3bDEyeHhfd2x2aWZfdG9fdmlmKHdsdmlmKSwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTU1NzAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MjQ1Nz1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9iZWFjb25fdHgodm9pZCAqYXJnLCB1OCAqbWFjLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTI0ODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoyNDg5Olx0XHRlbWEgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdChodywgdmlmLCBsaW5rX2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTI0OTAtXHRcdGlmICghZW1hIHx8ICFlbWEtXHUwMDNlY250KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTI0OTktXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MjUwMDpcdFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgbGlua19pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNTAxLVx0XHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYz0zNTc9aW50IHpkX3Jlc3RvcmVfc2V0dGluZ3Moc3RydWN0IHpkX21hYyAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTQwMC1cdFx0aWYgKG1hYy1cdTAwM2V2aWYgIT0gTlVMTCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM6NDAxOlx0XHRcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1hYy1cdTAwM2VodywgbWFjLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy00MDItXHRcdFx0aWYgKGJlYWNvbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYz0xMTUxPXN0YXRpYyB2b2lkIHpkX2JlYWNvbl9kb25lKHN0cnVjdCB6ZF9tYWMgKm1hYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xMTcyLVx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYzoxMTczOlx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobWFjLVx1MDAzZWh3LCBtYWMtXHUwMDNldmlmLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTExNzQtXHRpZiAoYmVhY29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jPTEyODE9c3RhdGljIHZvaWQgemRfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xMjk1LVx0XHRpZiAoY2hhbmdlcyBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYzoxMjk2Olx0XHRcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTI5Ny1cdFx0XHRcdFx0XHRcdFx0ICAgICAgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM9MTQzMT1zdGF0aWMgdm9pZCBiZWFjb25fd2F0Y2hkb2dfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTQ1OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jOjE0NTk6XHRcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1hYy1cdTAwM2VodywgbWFjLVx1MDAzZXZpZiwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xNDYwLVx0XHRpZiAoYmVhY29uKSB7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD00MDY4PXN0cnVjdCBpZWVlODAyMTFfcHJlcF90eF9pbmZvIHtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTQ1OTQtICpcdGRlY3JlbWVudGVkLCBhbmQgd2hlbiB0aGV5IHJlYWNoIDEgdGhlIGRyaXZlciBtdXN0IGNhbGxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NDU5NTogKlx0aWVlZTgwMjExX2NzYV9maW5pc2goKS4gRHJpdmVycyB3aGljaCB1c2UgaWVlZTgwMjExX2JlYWNvbl9nZXQoKVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC00NTk2LSAqXHRnZXQgdGhlIGNzYSBjb3VudGVyIGRlY3JlbWVudGVkIGJ5IG1hYzgwMjExLCBidXQgbXVzdCBjaGVjayBpZiBpdCBpc1xuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NTc1NT1zdHJ1Y3QgaWVlZTgwMjExX211dGFibGVfb2Zmc2V0cyB7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzYzLS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NzY0OiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlIC0gYmVhY29uIHRlbXBsYXRlIGdlbmVyYXRpb24gZnVuY3Rpb25cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc2NS0gKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS5cbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU3ODQ9c3RydWN0IHNrX2J1ZmYgKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1Nzg1OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01Nzg2LVx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzkwLS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NzkxOiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9pbmRleCAtIEVNQSBiZWFjb24gdGVtcGxhdGUgZ2VuZXJhdGlvblxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzkyLSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc5OC0gKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1Nzk5OiAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgc2FtZSBydWxlcyBhcyBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZSgpXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4MDAtICogYnV0IHJldHVybnMgYSBiZWFjb24gdGVtcGxhdGUgd2hpY2ggaW5jbHVkZXMgbXVsdGlwbGUgQlNTSUQgZWxlbWVudCBhdCB0aGVcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4MDU9c3RydWN0IHNrX2J1ZmYgKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODA2OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgwNy1cdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4MjA9c3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyB7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODI4LS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODI5OiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0IC0gRU1BIGJlYWNvbiB0ZW1wbGF0ZSBnZW5lcmF0aW9uXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4MzAtICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODMzLSAqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4MzQ6ICogVGhpcyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKClcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzNS0gKiBidXQgYWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBsaXN0IG9mIGFsbCBiZWFjb24gdGVtcGxhdGVzIHJlcXVpcmVkXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODQ0PXN0cnVjdCBpZWVlODAyMTFfZW1hX2JlYWNvbnMgKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODQ1OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODQ2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODUzLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmcmVlIGEgbGlzdCBwcmV2aW91c2x5IGFjcXVpcmVkIGJ5IGNhbGxpbmdcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg1NDogKiBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCgpXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4NTUtICovXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4NTY9dm9pZCBpZWVlODAyMTFfYmVhY29uX2ZyZWVfZW1hX2xpc3Qoc3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqZW1hX2JlYWNvbnMpO1xuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg1OC0vKipcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg1OTogKiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0gLSBiZWFjb24gZ2VuZXJhdGlvbiBmdW5jdGlvblxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODYwLSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg4MS0gKi9cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg4MjpzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODgzLVx0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4ODctLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4ODg6ICogaWVlZTgwMjExX2JlYWNvbl9nZXQgLSBiZWFjb24gZ2VuZXJhdGlvbiBmdW5jdGlvblxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODg5LSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg5My0gKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk0OiAqIFNlZSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oKS5cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg5NS0gKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk2OiAqIFJldHVybjogU2VlIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSgpLlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODk3LSAqL1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk4OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9iZWFjb25fZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODk5LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01OTAxLXtcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTkwMjpcdHJldHVybiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHZpZiwgTlVMTCwgTlVMTCwgbGlua19pZCk7XG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU5MDMtfVxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkxMS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbXBsaWNpdGx5IHdoZW5cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTkxMjogKiBpZWVlODAyMTFfYmVhY29uX2dldC9pZWVlODAyMTFfYmVhY29uX2dldF90aW0gYXJlIGNhbGxlZCwgaG93ZXZlciBpZiB0aGVcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkxMy0gKiBiZWFjb24gZnJhbWVzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGRldmljZSwgdGhlIGRyaXZlciBzaG91bGQgY2FsbCB0aGlzXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD02MTI5PV9fbGUxNiBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTYxNDktICogTm90ZTogYnVmZmVyZWQgZnJhbWVzIGFyZSByZXR1cm5lZCBvbmx5IGFmdGVyIERUSU0gYmVhY29uIGZyYW1lIHdhc1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo2MTUwOiAqIGdlbmVyYXRlZCB3aXRoIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgYW5kIHRoZSBsb3ctbGV2ZWwgZHJpdmVyIG11c3QgdGh1c1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo2MTUxOiAqIGNhbGwgaWVlZTgwMjExX2JlYWNvbl9nZXQoKSBmaXJzdC4gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYygpIHJldHVybnNcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNjE1Mi0gKiBOVUxMIGlmIHRoZSBwcmV2aW91cyBnZW5lcmF0ZWQgYmVhY29uIHdhcyBub3QgRFRJTSwgc28gdGhlIGxvdy1sZXZlbCBkcml2ZXJcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0xNDQ4PXN0cnVjdCBpZWVlODAyMTFfbG9jYWwge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE1MDgtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNTA5Olx0Ym9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTEwLVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTUyMDk9c3RhdGljIGludCBpZWVlODAyMTFfYmVhY29uX2FkZF90aW0oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNTIxNy1cdCAqIE5vdCB2ZXJ5IG5pY2UsIGJ1dCB3ZSB3YW50IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gY2FsbFxubmV0L21hYzgwMjExL3R4LmM6NTIxODpcdCAqIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgYXMgYSByZXNwb25zZSB0byB0aGUgc2V0X3RpbSgpXG5uZXQvbWFjODAyMTEvdHguYy01MjE5LVx0ICogY2FsbGJhY2suIFRoYXQsIGhvd2V2ZXIsIGlzIGFscmVhZHkgaW52b2tlZCB1bmRlciB0aGVcbi0tXG5uZXQvbWFjODAyMTEvdHguYz01NTA5PXN0YXRpYyB2b2lkXG5uZXQvbWFjODAyMTEvdHguYzo1NTEwOmllZWU4MDIxMV9iZWFjb25fZ2V0X2ZpbmlzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbm5ldC9tYWM4MDIxMS90eC5jLTU1MTEtXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NTU5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L21hYzgwMjExL3R4LmM6NTU5NjpfX2llZWU4MDIxMV9iZWFjb25fZ2V0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL3R4LmMtNTU5Ny1cdFx0XHQgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNTY1OC1cbm5ldC9tYWM4MDIxMS90eC5jOjU2NTk6XHRpZWVlODAyMTFfYmVhY29uX2dldF9maW5pc2goaHcsIHZpZiwgbGluaywgb2ZmcywgYmVhY29uLCBza2IsXG5uZXQvbWFjODAyMTEvdHguYy01NjYwLVx0XHRcdFx0ICAgIGNoYW5jdHhfY29uZiwgY3NhX29mZl9iYXNlKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz01Njc4PWllZWU4MDIxMV9zMWdfc2hvcnRfYmVhY29uX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy01NzAzLVxubmV0L21hYzgwMjExL3R4LmM6NTcwNDpcdGllZWU4MDIxMV9iZWFjb25fZ2V0X2ZpbmlzaChodywgdmlmLCBsaW5rLCBOVUxMLCBOVUxMLCBza2IsXG5uZXQvbWFjODAyMTEvdHguYy01NzA1LVx0XHRcdFx0ICAgIGNoYW5jdHhfY29uZiwgMCk7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NTcwOT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L21hYzgwMjExL3R4LmM6NTcxMDppZWVlODAyMTFfYmVhY29uX2dldF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbm5ldC9tYWM4MDIxMS90eC5jLTU3MTEtXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNTcyMC1cdCAgICBpZWVlODAyMTFfczFnX25lZWRfbG9uZ19iZWFjb24oc2RhdGEsIGxpbmspKVxubmV0L21hYzgwMjExL3R4LmM6NTcyMTpcdFx0cmV0dXJuIF9faWVlZTgwMjExX2JlYWNvbl9nZXRfYXAoaHcsIHZpZiwgbGluaywgb2Zmcyxcbm5ldC9tYWM4MDIxMS90eC5jLTU3MjItXHRcdFx0XHRcdFx0IGlzX3RlbXBsYXRlLCBiZWFjb24sXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NTcyOT1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqXG5uZXQvbWFjODAyMTEvdHguYzo1NzMwOmllZWU4MDIxMV9iZWFjb25fZ2V0X2FwX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL3R4LmMtNTczMS1cdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI4MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCZWFjb24gRnJhbWUgVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbiwgd2hpY2ggc2VlbXMgdG8gaGFuZGxlIHNldHRpbmcgdXAgdGhlIGJlYWNvbiBmcmFtZSBmb3IgdGhpcyBVU0IgV2ktRmkgZG9uZ2xlLiAgSSBjYW4gc2VlIHRoYXQgaXQgdXNlcyBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIHRvIGdyYWIgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIGNvbnRhaW5pbmcgdGhlIGJlYWNvbiBkYXRhLiBUaGUgZ29vZCBuZXdzIGlzLCBhY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnRzLCBtYWM4MDIxMSBmdWxseSBpbml0aWFsaXplcyB0aGF0IGBza2JgLCB3aGljaCBpcyBhIHBsdXMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBJIHNlZSBhIHNlY3Rpb24gd2hlcmUgaXQgc2VlbXMgdG8gYWRkIGEgaGVhZGVyLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBlbm91Z2ggaGVhZHJvb20gaXMgYXZhaWxhYmxlLCB0aGVuIGBza2JfcHVzaGAgdG8gbW92ZSB0aGUgZGF0YSBwb2ludGVyIGJhY2ssIGFuZCBgbWVtc2V0YCB0byBpbml0aWFsaXplIHRoaXMgbmV3IGBtdDc2X3R4d2lgIGhlYWRlci4gVGhhdCBhbGwgc2VlbXMgc3RhbmRhcmQsIHB1c2hpbmcgdGhlIHRyYW5zbWl0IFdpLUZpIGluZm9ybWF0aW9uIGludG8gdGhlIGBza2JgLiBUaGVuLCBpdCBjYWxjdWxhdGVzIGhvdyBtYW55IDMyLWJpdCB3b3JkcyBhcmUgaW4gdGhlIGBza2JgIHVzaW5nIGBESVZfUk9VTkRfVVBgLiBUaGF0IGNhbGN1bGF0aW9uIGlzIHdoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogaWYgdGhlIG9yaWdpbmFsIGJlYWNvbiBkYXRhIChwbHVzIHRoZSBoZWFkZXIpIGRvZXNuJiMzOTt0IHJlc3VsdCBpbiBhIGxlbmd0aCB0aGF0JiMzOTtzIGEgbXVsdGlwbGUgb2YgNCBieXRlcywgYERJVl9ST1VORF9VUGAgd2lsbCByb3VuZCB1cC4gVGhpcyBtZWFucyB0aGUgYnVyc3Qgd3JpdGUsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLCB3aWxsIHJlYWQgKnBhc3QqIHRoZSBpbnRlbmRlZCBkYXRhIGFuZCBwb3RlbnRpYWxseSBpbnRvIHRoZSBgc2tiYCYjMzk7cyB0YWlscm9vbS4gTXkgZ3V0IGlzIHRlbGxpbmcgbWUgdGhpcyBpcyBhbiBpc3N1ZS4KClRoZSBgc2tiYCBkYXRhIGlzIGFuIGFycmF5IG9mIGJ5dGVzLiBgc2tiLSZndDtsZW5gIHRlbGxzIHVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGluaXRpYWxpemVkIGRhdGEuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYHNrYmAgaGF2ZSB0YWlscm9vbT8gQW5kLCBpZiBzbywgYXJlIHRob3NlIHRhaWxyb29tIGJ5dGVzIGluaXRpYWxpemVkPyBMaWtlbHksIHRoZSB0YWlscm9vbSBleGlzdHMsIGJ1dCB0aGUgYnl0ZXMgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4KCklmIGl0IHJlYWRzIHBhc3QgYHNrYi0mZ3Q7bGVuYCwgdGhpcyBtZWFucyBpdCYjMzk7cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAodGhlIGBza2JgIHRhaWxyb29tKSBhbmQgc2VuZGluZyBpdCBvdmVyIFVTQiB0byB0aGUgV2ktRmkgZG9uZ2xlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBpbmZvLWxlYWsuIFRoaXMgaXMgYSBwb3RlbnRpYWwga2VybmVsIG1lbW9yeSBsZWFrLCBhbiBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHZ1bG5lcmFiaWxpdHkhCgpCdXQgdGhlbiBJIHJlY2FsbCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBLTVNBTiBzaG91bGQgZGV0ZWN0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHJlYWRzIHBhc3QgdGhlIGluaXRpYWxpemVkIGRhdGEsIEtNU0FOICpzaG91bGQqIGZsYWcgaXQgYXMgYSB1c2Utb2YtdW5pbml0aWFsaXplZC1tZW1vcnkgZXJyb3IuCgpPa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGtub3cgaG93IGl0IGhhbmRsZXMgdGhlIHdvcmQgY291bnQgYW5kIHRoZSBkYXRhIHBvaW50ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XHRcdFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxuIDI0MTpcdHtcbiAyNDI6XHRcdGNvbnN0IGludCBtYXhfcmVnc19wZXJfY21kID0gSU5CQU5EX1BBQ0tFVF9NQVhfTEVOIC8gNCAtIDE7XG4gMjQzOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDI0NDpcdFx0aW50IGNudCwgaSwgcmV0O1xuIDI0NTpcdFxuIDI0NjpcdFx0aWYgKCFuKVxuIDI0NzpcdFx0XHRyZXR1cm4gMDtcbiAyNDg6XHRcbiAyNDk6XHRcdGNudCA9IG1pbihtYXhfcmVnc19wZXJfY21kLCBuKTtcbiAyNTA6XHRcbiAyNTE6XHRcdHNrYiA9IGFsbG9jX3NrYihjbnQgKiA0ICYjNDM7IE1UX0RNQV9IRFJfTEVOICYjNDM7IDQsIEdGUF9LRVJORUwpO1xuIDI1MjpcdFx0aWYgKCFza2IpXG4gMjUzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI1NDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBNVF9ETUFfSERSX0xFTik7XG4gMjU1Olx0XG4gMjU2Olx0XHRza2JfcHV0X2xlMzIoc2tiLCBNVF9NQ1VfTUVNTUFQX1dMQU4gJiM0Mzsgb2Zmc2V0KTtcbiAyNTc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspXG4gMjU4Olx0XHRcdHNrYl9wdXRfbGUzMihza2IsIGRhdGFbaV0pO1xuIDI1OTpcdFxuIDI2MDpcdFx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xuIDI2MTpcdFx0aWYgKHJldClcbiAyNjI6XHRcdFx0cmV0dXJuIHJldDtcbiAyNjM6XHRcbiAyNjQ6XHRcdHJldHVybiBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBvZmZzZXQgJiM0MzsgY250ICogNCxcbiAyNjU6XHRcdFx0XHRcdFx0ZGF0YSAmIzQzOyBjbnQsIG4gLSBjbnQpO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHRzdHJ1Y3QgbXQ3Nl9md19oZWFkZXIge1xuIDI2OTpcdFx0X19sZTMyIGlsbV9sZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTI5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFZ1bG5lcmFiaWxpdHkgaW4gQmVhY29uIEZyYW1lIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzYwMXVgIGRyaXZlciBjb2RlIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZvdW5kIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlLiBJdCYjMzk7cyBpbiB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBiZWFjb24gZnJhbWUgc2V0dXAgaW4gYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLgoKV2hhdCYjMzk7cyBoYXBwZW5pbmcgaXMgdGhpczogdGhlIGNvZGUgaXMgaXRlcmF0aW5nIHRocm91Z2ggYSBkYXRhIGJ1ZmZlciAoYGRhdGFgKSBhbmQgd3JpdGluZyAzMi1iaXQgdmFsdWVzIHRvIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApIHVzaW5nIGBza2JfcHV0X2xlMzJgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBkYXRhYCBpcyBlc3NlbnRpYWxseSBhIHBvaW50ZXIgdG8gdGhlIGBza2ItJmd0O2RhdGFgLCBhbmQgaWYgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgYmVhY29uIGZyYW1lIChgc2tiLSZndDtsZW5gKSBpc24mIzM5O3QgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLCB0aGVuIHRoZSBsYXN0IHJlYWQgb2YgYGRhdGFbaV1gIHdpbGwgYmUgcmVhZGluZyBieXRlcyBiZXlvbmQgdGhlIGluaXRpYWxpemVkIHNlY3Rpb24gb2YgdGhlIGJ1ZmZlci4KCk5vdywgYHNrYmBzIGFsbG9jYXRlZCBieSBtYWM4MDIxMSB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tLCB0aGF0IGlzLCBleHRyYSBidWZmZXIgc3BhY2UgYWxsb2NhdGVkIGFmdGVyIHRoZSAmIzM0O3ZhbGlkJiMzNDsgZGF0YS4gU28sIHdoaWxlIHRoZSByZWFkcyB3b3VsZCBmYWxsIHdpdGhpbiBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29udGVudHMgb2YgdGhhdCB0YWlscm9vbSBhcmUgdW5pbml0aWFsaXplZCBieXRlcy4gV2hlbiBgc2tiX3B1dF9sZTMyYCByZWFkcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGFuZCB3cml0ZXMgdGhlbSB0byB0aGUgbmV3IGBza2JgLCB0aGUgbmV3IGBza2JgIGlzIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UgdmlhIGBtdDc2MDF1X21jdV9tc2dfc2VuZGAuIFRoaXMgY3JlYXRlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGNvbmRpdGlvbi4KCkluaXRpYWxseSwgSSB3b25kZXJlZCBpZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB3b3VsZCBjYXRjaCB0aGlzLiBLQVNBTiBjYXRjaGVzIG91dC1vZi1ib3VuZHMgcmVhZHMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIHJlYWQgc3RheXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIChpbmNsdWRpbmcgdGFpbHJvb20pLCBLQVNBTiB3b24mIzM5O3QgZmxhZyBpdC4gQnV0LCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIHRyYWNrcyBieXRlLWxldmVsIGluaXRpYWxpemF0aW9uLiBTaW5jZSB0aGUgYnl0ZXMgaW4gdGhlIHRhaWxyb29tIGFyZSB1bmluaXRpYWxpemVkLCBLTVNBTiB3aWxsIGFic29sdXRlbHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZmluZC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBza2ItJmd0O2xlbmAgaXNuJiMzOTt0IGFsd2F5cyBhIG11bHRpcGxlIG9mIDQ7IHRoZSBiZWFjb24gZnJhbWUmIzM5O3MgbGVuZ3RoIGRlcGVuZHMgb24gSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgc28gaXQmIzM5O3Mgbm90IGd1YXJhbnRlZWQuIFRoZW4sIEkgbG9va2VkIGF0IGhvdyBgc2tiYCBpcyBhbGxvY2F0ZWQgd2l0aCBgc2tiX2Nvd19oZWFkYC4gSSBzZWUgbm93IHRoYXQgYHNrYl9jb3dfaGVhZGAgbWlnaHQgcmVhbGxvY2F0ZSB0aGUgc2tiIGlmIHRoZXJlIGlzbiYjMzk7dCBlbm91Z2ggaGVhZHJvb20uIElmIGl0IHJlYWxsb2NhdGVzLCB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ5dGVzIGFyZSB1bmluaXRpYWxpemVkLiBJZiBpdCBkb2VzbiYjMzk7dCByZWFsbG9jYXRlLCB0aGVuIHRoZSB0YWlscm9vbSBpcyBhbHNvIHVuaW5pdGlhbGl6ZWQuIFNvLCByZWFkaW5nIHVwIHRvIGBESVZfUk9VTkRfVVAoc2tiLSZndDtsZW4sIDQpICogNGAgYnl0ZXMgd2lsbCByZWFkIDEtMyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKSSBhbHNvIGNoZWNrZWQgb3RoZXIgZnVuY3Rpb25zLiBJbiBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIGl0IGFwcGVhcnMgdGhhdCB0aGUgYHR4d2lgIHN0cnVjdCBpcyBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXRgLCBzbyB0aGF0JiMzOTtzIG5vdCBhIHByb2JsZW0uCgpGaW5hbGx5LCBJIGNoZWNrZWQgYG10NzYwMXVfc3RhcnRfYXBgLiBJIG5vdGljZWQgYG10NzYwMXVfbWFjX3djaWRfc2V0dXBgIHRha2VzIGBOVUxMYCBmb3IgYG1hY2AuIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCBpcyBoYW5kbGVkIHRvIHNlZSBpZiBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBpc3N1ZXMgbWlnaHQgc3VyZmFjZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTM3NT12b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjM3NjptdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTM3Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MTk5PXN0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0yMDgtXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgMTI4OyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjIwOTpcdFx0bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChkZXYsIGksIDAsIE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTI1OT1tdDc2MDF1X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjc3LVx0bXN0YS1cdTAwM2V3Y2lkLmh3X2tleV9pZHggPSAtMTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjI3ODpcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpZHgsIG12aWYtXHUwMDNlaWR4LCBzdGEtXHUwMDNlYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0yNzktXHRtdDc2X2NsZWFyKGRldiwgTVRfV0NJRF9EUk9QKGlkeCksIE1UX1dDSURfRFJPUF9NQVNLKGlkeCkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTI5MD1tdDc2MDF1X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMzAwLVx0ZGV2LVx1MDAzZXdjaWRfbWFza1tpZHggLyBCSVRTX1BFUl9MT05HXSBcdTAwMjY9IH5CSVQoaWR4ICUgQklUU19QRVJfTE9ORyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzozMDE6XHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaWR4LCAwLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTMwMi1cdG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3IoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaD0zNjQ9dm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg6MzY1Om10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zNjYtdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MTUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBtdDc2MDF1X21hY193Y2lkX3NldHVwYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2xsZXIpIHNldHVwIGlzIGhhbmRsZWQgZm9yIHRoZSBNVDc2MDFVIGNoaXBzZXQsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSB3Y2lkIChXaXJlbGVzcyBDbGllbnQgSUQpIGNvbnRleHQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgYXNzb2NpYXRpb25zIGJldHdlZW4gYSBzdGF0aW9uIGFuZCB0aGUgZHJpdmVyIGFyZSBtYW5hZ2VkIGFuZCBob3cgdGhlIE1BQyBpcyBjb25maWd1cmVkLCBwcm9iYWJseSB3aXRoIHNvbWUgcmVnaXN0ZXIgd3JpdGVzIHRvIHNldCB1cCBrZXkgc2VjdXJpdHkgcGFyYW1ldGVycywgYWRkcmVzcyBmaWx0ZXJzLCBhbmQgdHJhbnNtaXQvcmVjZWl2ZSBxdWV1ZSBtYXBwaW5ncyBiYXNlZCBvbiB0aGUgd2NpZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG51YW5jZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBhcyB0aGUgTVQ3NjAxVSBpcyBhIHNvbWV3aGF0IG9sZGVyIGNoaXBzZXQsIGFuZCBob3cgdGhpcyBjb2RlIGFjY291bnRzIGZvciBwb3RlbnRpYWwgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB0YWtpbmcgYSBkaXJlY3QgYXBwcm9hY2ggb3IgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlcm5lc3MgaW4gaGFuZGxpbmcgdGhlIHZhcmlvdXMgc3RhdGVzIG9mIHRoZSB3Y2lkLCBsaWtlIGluaXRpYWxpemluZyBpdCwgaGFuZGxpbmcgYXV0aGVudGljYXRpb24sIGFzc29jaWF0aW9uLCBhbmQgZGF0YSB0cmFuc2Zlci4gSSB3YW50IHRvIHNlZSB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMgYXJlIGJlaW5nIHRvdWNoZWQgYW5kIHdoYXQgdGhlIHJhdGlvbmFsZSBpcyBiZWhpbmQgZWFjaCBvZiB0aGUgdmFsdWVzLiBBbHNvLCBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFzIGNsZWFyIGVudHJ5IHBvaW50cyBhbmQgZXhpdHMsIGFuZCB0aGF0IGl0JiMzOTtzIHJvYnVzdCBpbiBoYW5kbGluZyBlcnJvciBjb25kaXRpb25zLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGlzIGlzIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24gd2l0aCBwbGVudHkgb2Ygb3Bwb3J0dW5pdHkgZm9yIHN1YnRsZSBidWdzLiBJJiMzOTtsbCBtZW50YWxseSBjb21wYXJlIHRoaXMgd2l0aCBzaW1pbGFyIGZ1bmN0aW9ucyBJJiMzOTt2ZSBsb29rZWQgYXQgaW4gb3RoZXIgZHJpdmVycyBhbmQgc2VlIGhvdyB0aGlzIG1lYXN1cmVzIHVwIGluIHRlcm1zIG9mIGNsYXJpdHkgYW5kIGVmZmljaWVuY3kuIEZpbmFsbHksIEkmIzM5O2xsIGFsc28gbG9vayBmb3IgY29tbWVudHMsIGFzIHRoZXkgd2lsbCB1bmRvdWJ0ZWRseSBiZSB1c2VmdWwgdG8gZ2V0IGEgcHJvcGVyIGNvbnRleHQgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc1Olx0dm9pZFxuIDM3NjpcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYylcbiAzNzc6XHR7XG4gMzc4Olx0XHR1OCB6bWFjW0VUSF9BTEVOXSA9IHt9O1xuIDM3OTpcdFx0dTMyIGF0dHI7XG4gMzgwOlx0XG4gMzgxOlx0XHRhdHRyID0gRklFTERfUFJFUChNVF9XQ0lEX0FUVFJfQlNTX0lEWCwgdmlmX2lkeCBcdTAwMjYgNykgfFxuIDM4MjpcdFx0ICAgICAgIEZJRUxEX1BSRVAoTVRfV0NJRF9BVFRSX0JTU19JRFhfRVhULCAhISh2aWZfaWR4IFx1MDAyNiA4KSk7XG4gMzgzOlx0XG4gMzg0Olx0XHRtdDc2X3dyKGRldiwgTVRfV0NJRF9BVFRSKGlkeCksIGF0dHIpO1xuIDM4NTpcdFxuIDM4NjpcdFx0aWYgKG1hYylcbiAzODc6XHRcdFx0bWVtY3B5KHptYWMsIG1hYywgc2l6ZW9mKHptYWMpKTtcbiAzODg6XHRcbiAzODk6XHRcdG10NzYwMXVfYWRkcl93cihkZXYsIE1UX1dDSURfQUREUihpZHgpLCB6bWFjKTtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0dm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIDM5MzpcdHtcbiAzOTQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTA0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrIGluIEJlYWNvbiBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cGAgZnVuY3Rpb24gaGFuZGxlcyBgbWFjID09IE5VTExgIGNhc2VzIGdyYWNlZnVsbHkgdXNpbmcgYSB6ZXJvLWluaXRpYWxpemVkIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uLiBMZXQmIzM5O3MgcmV2aXNpdCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuCgpUaGUgY29yZSBpc3N1ZSBpcyBpbiBob3cgdGhlIGJlYWNvbiBmcmFtZSBpcyB3cml0dGVuIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLiBUaGUgY2FsY3VsYXRpb24gYHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi0mZ3Q7bGVuLCA0KWAgaXMga2V5LiBXZSYjMzk7cmUgZGl2aWRpbmcgdGhlIGxlbmd0aCBvZiB0aGUgKmVudGlyZSogYHNrYmAgKGluY2x1ZGluZyB0aGUgYHN0cnVjdCBtdDc2X3R4d2lgIGhlYWRlciwgd2hpY2ggd2Uga25vdyBpcyAyNCBieXRlcyBhbmQgYSBtdWx0aXBsZSBvZiA0KSBieSA0IGFuZCByb3VuZGluZyB1cC4gVGhlIGJlYWNvbiBmcmFtZSBpdHNlbGYgaXMgY29uc3RydWN0ZWQgYnkgbWFjODAyMTEuIENydWNpYWxseSwgdGhlIGxlbmd0aCBvZiA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMsIGVzcGVjaWFsbHkgYmVhY29ucywgY2FuIGJlICphcmJpdHJhcnkqLCBiZWNhdXNlIG9mIHRoZSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgZnJhbWUuCgpUaGVyZWZvcmUsIGBza2ItJmd0O2xlbmAgaXMgKm5vdCogZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gSWYgaXQmIzM5O3MgKm5vdCogYSBtdWx0aXBsZSBvZiA0LCB0aGVuIGB3b3JkcyAqIDRgIHdpbGwgYmUgdXAgdG8gYHNrYi0mZ3Q7bGVuICYjNDM7IDNgLiBUaGlzIG1lYW5zIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHJlYWRzIHVwIHRvIDMgYnl0ZXMgYmV5b25kIHRoZSAmIzM5O2VuZCYjMzk7IG9mIHRoZSBhY3R1YWwgYmVhY29uIGRhdGEsIHdoaWNoIGFyZSBieXRlcyBmcm9tIHRoZSB0YWlscm9vbSBvZiB0aGUgYHNrYmAuIFRoZSBgc2tiYCBpcyBhbGxvY2F0ZWQgYnkgYGllZWU4MDIxMV9iZWFjb25fZ2V0YCBhbmQgdXN1YWxseSBjb250YWlucyB0YWlscm9vbS4KClRoZSBmdW5jdGlvbiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCByZWFkcyAzMi1iaXQgaW50ZWdlcnMgZnJvbSB0aGUgYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlci4gSWYgYHNrYi0mZ3Q7bGVuYCBpc24mIzM5O3QgYSBtdWx0aXBsZSBvZiA0LCB0aGUgbGFzdCAzMi1iaXQgcmVhZCB3aWxsIGluY2x1ZGUgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIHRoZSB0YWlscm9vbS4gVGhpcyB1bmluaXRpYWxpemVkIGRhdGEgaXMgdGhlbiBzZW50IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLiBUaGlzIGlzIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgbWVtb3J5IHRvIGEgaGFyZHdhcmUgZGV2aWNlIQoKS01TQU4gKnNob3VsZCogY2F0Y2ggdGhpcywgYmVjYXVzZSBpdCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtBU0FOICp3b24mIzM5O3QqIGRldGVjdCB0aGlzLCBiZWNhdXNlIHRoZSByZWFkIGlzIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGBza2JgIGJ1ZmZlci4KClRoZXJlJiMzOTtzIG5vIHBhZGRpbmcgYWRkZWQgdG8gdGhlIGRhdGEgYmV0d2VlbiB0aGUgdHh3aSBhbmQgdGhlIGJlYWNvbiBmcmFtZS4gYHNrYl9wdXRfbGUzMmAgcmVhZHMgZGlyZWN0bHkgZnJvbSB0aGUgYGRhdGFbaV1gLiBTbyBgc2tiLSZndDtkYXRhYCBpcyByZWFkIHVwIHRvIGB3b3JkcyAqIDRgIGJ5dGVzLgoKU28sIHRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBidWcgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0OiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgYHNrYmAgdGFpbHJvb20pIGFuZCB0cmFuc21pdHRpbmcgaXQgdG8gYSBoYXJkd2FyZSBkZXZpY2UgKHZpYSBVU0IpLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IEtNU0FOIGhhbmRsZXMgVVNCIHRyYW5zZmVycy4gWWVzLCBLTVNBTiBob29rcyBpbnRvIGB1c2Jfc3VibWl0X3VyYmAgdmlhIGBrbXNhbl9oYW5kbGVfdXJiYCBhbmQgY2FuIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyISBBbmQgYG10NzYwMXVfbWN1X21zZ19zZW5kYCBzZW5kcyB0aGUgYHNrYmAgdmlhIFVTQi4gVGhpcyBjb25maXJtcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4gV2UmIzM5O3ZlIGdvdCBpdC4gVGhpcyBpcyBhIHNvbGlkIHVzZSBjYXNlIGZvciBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjAxdV9tY3VfbXNnX3NlbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xMDk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoxMTA6bXQ3NjAxdV9tY3VfbXNnX3NlbmQoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTExMS1cdFx0ICAgICBlbnVtIG1jdV9jbWQgY21kLCBib29sIHdhaXRfcmVzcClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jPTE1NT1zdGF0aWMgaW50IG10NzYwMXVfbWN1X2Z1bmN0aW9uX3NlbGVjdChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTE2OS1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjE3MDpcdHJldHVybiBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0ZVTl9TRVRfT1AsIGZ1bmMgPT0gNSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTE3MS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xOTM9bXQ3NjAxdV9tY3VfY2FsaWJyYXRlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBlbnVtIG1jdV9jYWxpYnJhdGUgY2FsLCB1MzIgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjA2LVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjA3Olx0cmV0dXJuIG10NzYwMXVfbWN1X21zZ19zZW5kKGRldiwgc2tiLCBDTURfQ0FMSUJSQVRJT05fT1AsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMDgtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM9MjEwPWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjIzMjpcdHJldCA9IG10NzYwMXVfbWN1X21zZ19zZW5kKGRldiwgc2tiLCBDTURfUkFORE9NX1dSSVRFLCBjbnQgPT0gbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTIzMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMzk9aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTI1OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjYwOlx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNjEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjExNwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYwMVUgTUNVIE1lc3NhZ2UgU2VuZGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZXNzYWdlcyBhcmUgZ2V0dGluZyBzZW50IHRvIHRoZSBNQ1Ugb24gdGhlIE1UNzYwMVUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBtdDc2MDF1X21jdV9tc2dfc2VuZGAuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbWN1LmNgIGZpbGUgYW5kIHBpbnBvaW50IHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLCBoYW5kbGluZyBhbnkgYnVmZmVyaW5nLCBhbmQsIGNydWNpYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0Igb3Igd2hhdGV2ZXIgaW50ZXJmYWNlIGlzIHVzZWQgdG8gYWN0dWFsbHkgdHJhbnNtaXQgdGhpcyBkYXRhLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleGVzIG9yIHNlbWFwaG9yZXMgZm9yIHN5bmNocm9uaXphdGlvbiwgYW55IGVycm9yIGhhbmRsaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlcyBvciBVU0IgY2FsbHMgdGhhdCBpbml0aWF0ZSB0aGUgdHJhbnNmZXIuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBtZXNzYWdlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA5Olx0c3RhdGljIGludFxuIDExMDpcdG10NzYwMXVfbWN1X21zZ19zZW5kKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDExMTpcdFx0XHQgICAgIGVudW0gbWN1X2NtZCBjbWQsIGJvb2wgd2FpdF9yZXNwKVxuIDExMjpcdHtcbiAxMTM6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gbXQ3NjAxdV90b191c2JfZGV2KGRldik7XG4gMTE0Olx0XHR1bnNpZ25lZCBjbWRfcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LFxuIDExNTpcdFx0XHRcdFx0XHQgICAgZGV2LVx1MDAzZW91dF9lcHNbTVRfRVBfT1VUX0lOQkFORF9DTURdKTtcbiAxMTY6XHRcdGludCBzZW50LCByZXQ7XG4gMTE3Olx0XHR1OCBzZXEgPSAwO1xuIDExODpcdFxuIDExOTpcdFx0aWYgKHRlc3RfYml0KE1UNzYwMVVfU1RBVEVfUkVNT1ZFRCwgXHUwMDI2ZGV2LVx1MDAzZXN0YXRlKSkge1xuIDEyMDpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIDEyMTpcdFx0XHRyZXR1cm4gMDtcbiAxMjI6XHRcdH1cbiAxMjM6XHRcbiAxMjQ6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1jdS5tdXRleCk7XG4gMTI1Olx0XG4gMTI2Olx0XHRpZiAod2FpdF9yZXNwKVxuIDEyNzpcdFx0XHR3aGlsZSAoIXNlcSlcbiAxMjg6XHRcdFx0XHRzZXEgPSAmIzQzOyYjNDM7ZGV2LVx1MDAzZW1jdS5tc2dfc2VxIFx1MDAyNiAweGY7XG4gMTI5Olx0XG4gMTMwOlx0XHRtdDc2MDF1X2RtYV9za2Jfd3JhcF9jbWQoc2tiLCBzZXEsIGNtZCk7XG4gMTMxOlx0XG4gMTMyOlx0XHRpZiAoZGV2LVx1MDAzZW1jdS5yZXNwX2NtcGwuZG9uZSlcbiAxMzM6XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtFcnJvcjogTUNVIHJlc3BvbnNlIHByZS1jb21wbGV0ZWQhXFxuXCYjMzQ7KTtcbiAxMzQ6XHRcbiAxMzU6XHRcdHRyYWNlX210X21jdV9tc2dfc2VuZF9jcyhkZXYsIHNrYiwgd2FpdF9yZXNwKTtcbiAxMzY6XHRcdHRyYWNlX210X3N1Ym1pdF91cmJfc3luYyhkZXYsIGNtZF9waXBlLCBza2ItXHUwMDNlbGVuKTtcbiAxMzc6XHRcdHJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCBjbWRfcGlwZSwgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4sIFx1MDAyNnNlbnQsIDUwMCk7XG4gMTM4Olx0XHRpZiAocmV0KSB7XG4gMTM5Olx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RXJyb3I6IHNlbmQgTUNVIGNtZCBmYWlsZWQ6JWRcXG5cJiMzNDssIHJldCk7XG4gMTQwOlx0XHRcdGdvdG8gb3V0O1xuIDE0MTpcdFx0fVxuIDE0MjpcdFx0aWYgKHNlbnQgIT0gc2tiLVx1MDAzZWxlbilcbiAxNDM6XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtFcnJvcjogJXMgc2VudCAhPSBza2ItXHUwMDNlbGVuXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAod2FpdF9yZXNwKVxuIDE0NjpcdFx0XHRyZXQgPSBtdDc2MDF1X21jdV93YWl0X3Jlc3AoZGV2LCBzZXEpO1xuIDE0NzpcdG91dDpcbiAxNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbWN1Lm11dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMDkKCQkJCQkJCW91dHB1dDogMzQ0CgkJCQkJCQl0aG91Z2h0czogMTk4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTi1EZXRlY3RhYmxlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsgaW4gQmVhY29uIFRyYW5zbWlzc2lvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTt2ZSBmb3VuZC4gVGhlIHByaW1hcnkgY29uY2VybiBsaWVzIHdpdGhpbiBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLCBzcGVjaWZpY2FsbHkgaG93IGl0IHV0aWxpemVzIGB1c2JfYnVsa19tc2dgIHRvIHRyYW5zbWl0IGRhdGEgZnJvbSBhbiBgc2tiYCB0byB0aGUgVVNCIGRldmljZS4gSSBzZWUgdGhhdCBgdXNiX2J1bGtfbXNnYCB0YWtlcyBgc2tiLSZndDtkYXRhYCBhbmQgYHNrYi0mZ3Q7bGVuYC4gVGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGVtZXJnZXMgZHVyaW5nIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBjYWxsIHdpdGhpbiB0aGUgYmVhY29uIHNldHRpbmcgbWVjaGFuaXNtLgoKVGhlIGNvZGUgaXRlcmF0ZXMsIGNvcHlpbmcgZGF0YSBpbnRvIGEgbmV3IGBza2JgIHZpYSBgc2tiX3B1dF9sZTMyYCwgcmVhZGluZyBmcm9tIGBkYXRhW2ldYCwgd2hlcmUgYGRhdGFgIHBvaW50cyB0byB0aGUgYmVhY29uIGBza2ItJmd0O2RhdGFgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBgRElWX1JPVU5EX1VQKHNrYi0mZ3Q7bGVuLCA0KWAgY2FsY3VsYXRpb24uIElmIGBza2ItJmd0O2xlbmAgaXNuJiMzOTt0IGEgbXVsdGlwbGUgb2YgNCwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgYWN0dWFsIGluaXRpYWxpemVkIGRhdGEgaW4gdGhlIGBza2JgLCBwb3RlbnRpYWxseSBpbnRvIHRoZSB1bmluaXRpYWxpemVkIHRhaWxyb29tLiBgS01TQU5gIGlzIGNyaXRpY2FsIGhlcmU7IGl0IHdpbGwgdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSB0YWlscm9vbSBtZW1vcnksIGFuZCB0aHVzIHdpbGwgZGV0ZWN0IHRoZSBwcm9ibGVtLiBgS0FTQU5gIGlzIHVubGlrZWx5IHRvIGNhdGNoIHRoaXMgc2luY2UgdGhlIHJlYWQgaXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlZ2lvbiwgdGh1cyBubyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4mIzM5O3MgaW5zdHJ1bWVudGF0aW9uIG9mIGB1c2JfYnVsa19tc2dgIHdpbGwgdHJpZ2dlciBhbiBpbmZvLWxlYWsgcmVwb3J0LgoKSSBkb3VibGUtY2hlY2tlZCBvdGhlciBwb3RlbnRpYWwgYXJlYXMgbGlrZSBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCwgYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYHNrYjJxYCwgdG8gYmUgc3VyZS4gTm9uZSBvZiB0aGVtIHNob3cgYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgdnVsbmVyYWJpbGl0eS4gVGhleSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIG9yIHRoZXJlIGFyZSBjbGVhciBib3VuZHMsIGVuc3VyaW5nIGBLQVNBTmAgd291bGQgY2F0Y2ggYW55IE9PQiByZWFkcy4KClNvLCB0aGUgY3J1eCBpcyBpbiBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEEgYmVhY29uIHNrYiBpcyBhbGxvY2F0ZWQgKHRocm91Z2ggYGllZWU4MDIxMV9iZWFjb25fZ2V0YCksIGFuZCBpdHMgbGVuZ3RoIGlzIHVzZWQgaW4gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIHJvdW5kIHVwIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGF0IGFyZSB0byBiZSB3cml0dGVuLiBUaGlzIGxlbmd0aCBtaWdodCBub3QgYmUgYSBtdWx0aXBsZSBvZiA0LgoKVGhlIGNvbmNsdXNpb24gaXMgdGhhdCB3ZSYjMzk7cmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBgc2tiYCB0YWlscm9vbSBhbmQgc2VuZGluZyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZ2AuIFRoaXMgbWVtb3J5IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSB0YWlscm9vbSwgd2hpY2ggaXMgdW5pbml0aWFsaXplZCB3aGVuIGFsbG9jYXRlZC4gS01TQU4gZXhjZWxzIGF0IGNhdGNoaW5nIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gYmVjYXVzZSBpdCB0cmFja3MgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIG1lbW9yeSBhbmQgaG9va3MgYHVzYl9idWxrX21zZ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIGRvZXNuJiMzOTt0IGd1YXJhbnRlZSBhIG11bHRpcGxlLW9mLTQgbGVuZ3RoLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBhIHJlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHNrYiBkb2VzIG5vdCB6ZXJvIHRoZSB0YWlscm9vbSwgY29uZmlybWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBwb3RlbnRpYWxseSByZWFkLiBUaGlzIGluZGljYXRlcyBhIHN0cm9uZyBjYXNlIGZvciBhIEtNU0FOLWZvY3VzZWQgZnV6emluZyBzZXNzaW9uLiBUaGUgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIHB1c2hlcyBhIGBzdHJ1Y3QgbXQ3Nl90eHdpYCB0byB0aGUgc2tiIGFuZCB6ZXJvZXMgaXQgdmlhIGBtZW1zZXRgLCBhdm9pZGluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB0aGVyZS4KClRoZSBpc3N1ZSBib2lscyBkb3duIHRvIHRoZSBgRElWX1JPVU5EX1VQKHNrYi0mZ3Q7bGVuLCA0KWAgcmVhZCwgYW5kIEkgd2lsbCBiZSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgIGFuZCBzdXBwbHlpbmcgdGhpcyByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYG10NzYwMXVfbWFjX3NldF9iZWFjb24oKWAsIHdoaWNoIHJldHJpZXZlcyBhIGJlYWNvbiBza2IgdXNpbmcgYGllZWU4MDIxMV9iZWFjb25fZ2V0KClgLiBJdCB0aGVuIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdG8gd3JpdGUgdG8gdGhlIGRldmljZSB1c2luZyBgRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpYCBhbmQgcGFzc2VzIGBza2ItXHUwMDNlZGF0YWAgdG8gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYC5cblxuQmVjYXVzZSA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMgY2FuIGhhdmUgYXJiaXRyYXJ5IGxlbmd0aHMsIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdoZW4gYHNrYi1cdTAwM2VsZW5gIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAgd2lsbCByZWFkIHVwIHRvIDMgYnl0ZXMgcGFzdCBgc2tiLVx1MDAzZWxlbmAuIFNpbmNlIHNrYiBidWZmZXJzIHR5cGljYWxseSBoYXZlIHNvbWUgdGFpbHJvb20gKG1lbW9yeSB0aGF0IGlzIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCksIHRoaXMgcmVhZCB3aWxsIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIGFsbG9jYXRpb24uIEFzIGEgcmVzdWx0LCBLQVNBTiB3aWxsIE5PVCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXG5cbkhvd2V2ZXIsIHRoaXMgb3BlcmF0aW9uIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIHNrYiB0YWlscm9vbSBhbmQgc3Vic2VxdWVudGx5IHNlbmRzIGl0IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgdXNiX2J1bGtfbXNnKClgIChjYWxsZWQgYnkgYG10NzYwMXVfbWN1X21zZ19zZW5kKClgKS4gS01TQU4gdHJhY2tzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhdCB0aGUgYnl0ZSBsZXZlbCBhbmQgaG9va3MgaW50byBVU0IgVVJCIHN1Ym1pc3Npb25zLCBtYWtpbmcgaXQgdW5pcXVlbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBrZXJuZWwgbWVtb3J5IGluZm8tbGVhayB0byB0aGUgaGFyZHdhcmUgZGV2aWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXG5cbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OToyMi43MjgyOTEwMTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzMzY5ODY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3NjAxVVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzYwMXVfbWFjX3NldF9iZWFjb25cIixcbiAgICBcIm10NzYwMXVfbWFjX2NvbmZpZ190c2ZcIixcbiAgICBcIm10NzYwMXVfc3RhcnRfYXBcIixcbiAgICBcIm10NzYwMXVfc3RvcF9hcFwiLFxuICAgIFwibXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXFx1MDAzZWxlbiwgNClgIGFuZCBwYXNzZXMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYC5cXG5cXG5CZWNhdXNlIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyBjYW4gaGF2ZSBhcmJpdHJhcnkgbGVuZ3RocywgYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdoZW4gYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cXHUwMDNlbGVuYC4gU2luY2Ugc2tiIGJ1ZmZlcnMgdHlwaWNhbGx5IGhhdmUgc29tZSB0YWlscm9vbSAobWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkKSwgdGhpcyByZWFkIHdpbGwgc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGlvbi4gQXMgYSByZXN1bHQsIEtBU0FOIHdpbGwgTk9UIGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cXG5cXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWUsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyLiBJdCBtb2RpZmllcyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6MjIuNzI4Mjk5MjQxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE2MzQ0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDE1IDEzOjQ5OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcXG5pbmRleCA1ZDllOTUyYjI5NjY0Li5lODcxZjdiNjNjYjM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcXG5AQCAtMTIsNiArMTIsMjUgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJpbml0dmFscy5oXFxcIlxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7XFxuK1xcdHsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfSxcXG4rXFx0eyAubWF4ID0gOCxcXG4rXFx0ICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfFxcbisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG4rXFx0XFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcXG4rI2VuZGlmXFxuK1xcdFxcdCAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8IEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHxcXG4rXFx0XFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gaWZfY29tYltdID0geyB7XFxuK1xcdC5saW1pdHMgPSBpZl9saW1pdHMsXFxuK1xcdC5uX2xpbWl0cyA9IEFSUkFZX1NJWkUoaWZfbGltaXRzKSxcXG4rXFx0Lm1heF9pbnRlcmZhY2VzID0gMixcXG4rXFx0Lm51bV9kaWZmZXJlbnRfY2hhbm5lbHMgPSAxLFxcbitcXHQuYmVhY29uX2ludF9pbmZyYV9tYXRjaCA9IHRydWUsXFxuK30gfTtcXG4rXFxuIHN0YXRpYyB2b2lkXFxuIG10NzYwMXVfc2V0X3dsYW5fc3RhdGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiB2YWwsIGJvb2wgZW5hYmxlKVxcbiB7XFxuQEAgLTU5OSw2ICs2MTgsNyBAQCBpbnQgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuIFxcdGllZWU4MDIxMV9od19zZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTtcXG4gXFx0aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpO1xcbiBcXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBNRlBfQ0FQQUJMRSk7XFxuK1xcdGllZWU4MDIxMV9od19zZXQoaHcsIE5FRURTX1VOSVFVRV9TVEFfQUREUik7XFxuIFxcdGh3LVxcdTAwM2VtYXhfcmF0ZXMgPSAxO1xcbiBcXHRody1cXHUwMDNlbWF4X3JlcG9ydF9yYXRlcyA9IDc7XFxuIFxcdGh3LVxcdTAwM2VtYXhfcmF0ZV90cmllcyA9IDE7XFxuQEAgLTYwNyw5ICs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbiBcXHRody1cXHUwMDNldmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpO1xcbiBcXG4gXFx0U0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi1cXHUwMDNlbWFjYWRkcik7XFxuLVxcbitcXHR3aXBoeS1cXHUwMDNlaW50ZXJmYWNlX21vZGVzID1cXG4rXFx0XFx0QklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8XFxuKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbitcXHRcXHRCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfFxcbisjZW5kaWZcXG4rXFx0XFx0QklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxcbitcXHRcXHRCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpO1xcbitcXHR3aXBoeS1cXHUwMDNlaWZhY2VfY29tYmluYXRpb25zID0gaWZfY29tYjtcXG4rXFx0d2lwaHktXFx1MDAzZW5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRShpZl9jb21iKTtcXG4gXFx0d2lwaHktXFx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9BQ1RJVkVfTU9OSVRPUjtcXG4tXFx0d2lwaHktXFx1MDAzZWludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTtcXG4gXFx0d2lwaHktXFx1MDAzZWZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUztcXG4gXFxuIFxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9DUU1fUlNTSV9MSVNUKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcXG5pbmRleCBjYTljZjYyOGViMTBkLi41ZTJkZWMxMzEzMzFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXFxuQEAgLTExOCwxOSArMTE4LDI3IEBAIHUxNiBtdDc2X21hY190eF9yYXRlX3ZhbChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcXG4gXFx0XFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSClcXG4gXFx0XFx0XFx0YncgPSAxO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnI7XFxuLVxcdFxcdGludCBiYW5kID0gZGV2LVxcdTAwM2VjaGFuZGVmLmNoYW4tXFx1MDAzZWJhbmQ7XFxuLVxcdFxcdHUxNiB2YWw7XFxuLVxcbi1cXHRcXHRyID0gXFx1MDAyNmRldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2ViYW5kc1tiYW5kXS1cXHUwMDNlYml0cmF0ZXNbcmF0ZS1cXHUwMDNlaWR4XTtcXG4tXFx0XFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcXG4tXFx0XFx0XFx0dmFsID0gci1cXHUwMDNlaHdfdmFsdWVfc2hvcnQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0dmFsID0gci1cXHUwMDNlaHdfdmFsdWU7XFxuIFxcbi1cXHRcXHRwaHkgPSB2YWwgXFx1MDAzZVxcdTAwM2UgODtcXG4tXFx0XFx0cmF0ZV9pZHggPSB2YWwgXFx1MDAyNiAweGZmO1xcbi1cXHRcXHRidyA9IDA7XFxuK1xcdFxcdGludCBiYW5kID0gZGV2LVxcdTAwM2VjaGFuZGVmLmNoYW4tXFx1MDAzZWJhbmQ7XFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID1cXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWJhbmRzW2JhbmRdO1xcbitcXG4rXFx0XFx0aWYgKHJhdGUtXFx1MDAzZWlkeCBcXHUwMDNjIDAgfHwgcmF0ZS1cXHUwMDNlaWR4IFxcdTAwM2U9IHNiYW5kLVxcdTAwM2VuX2JpdHJhdGVzKSB7XFxuK1xcdFxcdFxcdHBoeSA9IE1UX1BIWV9UWVBFX0NDSztcXG4rXFx0XFx0XFx0cmF0ZV9pZHggPSAwO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPVxcbitcXHRcXHRcXHRcXHRcXHUwMDI2c2JhbmQtXFx1MDAzZWJpdHJhdGVzW3JhdGUtXFx1MDAzZWlkeF07XFxuK1xcdFxcdFxcdHUxNiB2YWw7XFxuK1xcbitcXHRcXHRcXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxcbitcXHRcXHRcXHRcXHR2YWwgPSByLVxcdTAwM2Vod192YWx1ZV9zaG9ydDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHR2YWwgPSByLVxcdTAwM2Vod192YWx1ZTtcXG4rXFxuK1xcdFxcdFxcdHBoeSA9IHZhbCBcXHUwMDNlXFx1MDAzZSA4O1xcbitcXHRcXHRcXHRyYXRlX2lkeCA9IHZhbCBcXHUwMDI2IDB4ZmY7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmF0ZXZhbCA9IEZJRUxEX1BSRVAoTVRfUlhXSV9SQVRFX01DUywgcmF0ZV9pZHgpO1xcbkBAIC0yNjQsMTMgKzI3MiwxMyBAQCB2b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpXFxuIFxcdFxcdG10NzZfY2xlYXIoZGV2LCBNVF9BVVRPX1JTUF9DRkcsIE1UX0FVVE9fUlNQX1BSRUFNQl9TSE9SVCk7XFxuIH1cXG4gXFxuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcXG4rdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbitcXHRcXHRcXHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcXG4ge1xcbiBcXHR1MzIgdmFsID0gbXQ3NjAxdV9ycihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyk7XFxuIFxcbi1cXHR2YWwgXFx1MDAyNj0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfFxcbi1cXHRcXHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XFxuLVxcdFxcdCBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTik7XFxuK1xcdHZhbCBcXHUwMDI2PSB+KE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxcbitcXHRcXHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcXG4gXFxuIFxcdGlmICghZW5hYmxlKSB7XFxuIFxcdFxcdG10NzYwMXVfd3IoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsIHZhbCk7XFxuQEAgLTI3OSw5ICsyODcsMjIgQEAgdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxcbiBcXG4gXFx0dmFsIFxcdTAwMjY9IH5NVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMO1xcbiBcXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMLCBpbnRlcnZhbCBcXHUwMDNjXFx1MDAzYyA0KSB8XFxuLVxcdFxcdE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8XFxuLVxcdFxcdE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxcbi1cXHRcXHRNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTjtcXG4rXFx0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xcbitcXG4rXFx0LyogQVAgTW9kZSAqL1xcbitcXHRpZiAodmlmIFxcdTAwMjZcXHUwMDI2ICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcXG4rXFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9QMlBfR08pKVxcbitcXHRcXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAzKSB8XFxuK1xcdFxcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xcbitcXHQvKiBJQlNTIC8gQWQtSG9jIE1vZGUgKi9cXG4rXFx0ZWxzZSBpZiAodmlmIFxcdTAwMjZcXHUwMDI2IHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQylcXG4rXFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMikgfFxcbitcXHRcXHQgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWDtcXG4rXFx0LyogU3RhdGlvbiBtb2RlICovXFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMSk7XFxuK1xcbitcXHRtdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtdDc2MDF1X2NoZWNrX21hY19lcnIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuQEAgLTM5Myw2ICs0MTQsMzggQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbiBcXHRcXHQgICBGSUVMRF9QUkVQKE1UX01BWF9MRU5fQ0ZHX0FNUERVLCBtaW5fZmFjdG9yKSk7XFxuIH1cXG4gXFxuK2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtXFx1MDAzZWh3LCB2aWYsIDApO1xcbitcXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xcbitcXHRpbnQgZXJyLCB3b3JkcztcXG4rXFxuK1xcdGlmICghc2tiKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovXFxuK1xcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHR0eHdpID0gKHN0cnVjdCBtdDc2X3R4d2kgKilza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XFxuK1xcdG1lbXNldCh0eHdpLCAwLCBzaXplb2YoKnR4d2kpKTtcXG4rXFxuK1xcdHR4d2ktXFx1MDAzZXdjaWQgPSAwO1xcbitcXHR0eHdpLVxcdTAwM2VsZW5fY3RsID0gY3B1X3RvX2xlMTYoc2tiLVxcdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpO1xcbitcXHR0eHdpLVxcdTAwM2VyYXRlX2N0bCA9IGNwdV90b19sZTE2KDApO1xcbitcXG4rXFx0d29yZHMgPSBESVZfUk9VTkRfVVAoc2tiLVxcdTAwM2VsZW4sIDQpO1xcbitcXHRlcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIChjb25zdCB1MzIgKilza2ItXFx1MDAzZWRhdGEsIHdvcmRzKTtcXG4rXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gbXQ3Nl9tYWNfcHJvY2Vzc19yYXRlKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsIHUxNiByYXRlKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXFxuaW5kZXggNTRiZDRmYWM1NGQ4My4uNTI4NzU2Y2NmNDcyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxcbkBAIC0xNjcsNSArMTY3LDYgQEAgc3RydWN0IG10NzZfdHhfc3RhdHVzXFxuIG10NzYwMXVfbWFjX2ZldGNoX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XFxuIHZvaWQgbXQ3Nl9zZW5kX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IG10NzZfdHhfc3RhdHVzICpzdGF0KTtcXG4gdm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XFxuLVxcbitpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXFxuaW5kZXggMDViYTQzZTE5ODVjOC4uNDM4OWUzMzJkZmUxOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXFxuQEAgLTE0OSw3ICsxNDksNyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdCAqXFx0IHJ0MngwMCBkb2Vzbid0IHNlZW0gdG8gYmUgYm90aGVyZWQgdGhvdWdoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVxcdTAwM2Vic3NpZCkpXFxuLVxcdFxcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCBmYWxzZSwgMCk7XFxuK1xcdFxcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykge1xcbkBAIC0xNjEsNyArMTYxLDIwIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKVxcbi1cXHRcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdHJ1ZSwgaW5mby1cXHUwMDNlYmVhY29uX2ludCk7XFxuK1xcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGluZm8tXFx1MDAzZWJlYWNvbl9pbnQpO1xcbitcXG4rXFx0aWYgKChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSBcXHUwMDI2XFx1MDAyNiB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXFxuK1xcdFxcdG10NzYwMXVfbWFjX3NldF9iZWFjb24oZGV2LCB2aWYsIGluZm8pO1xcbitcXG4rXFx0aWYgKChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWVuYWJsZV9iZWFjb24pXFxuK1xcdFxcdFxcdG10NzZfc2V0KGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLFxcbitcXHRcXHRcXHRcXHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyxcXG4rXFx0XFx0XFx0XFx0ICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfSFQgfHwgY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVClcXG4gXFx0XFx0bXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oZGV2LCBpbmZvLVxcdTAwM2V1c2VfY3RzX3Byb3QsXFxuQEAgLTE4Myw2ICsxOTYsNDMgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbXV0ZXgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4rXFxuK1xcdC8qIENsZWFyIHRoZSB3Y2lkIFRhYmxlICovXFxuK1xcdGZvciAoaW50IGkgPSAxOyBpIFxcdTAwM2MgMTI4OyBpKyspXFxuK1xcdFxcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTtcXG4rXFxuK1xcdC8qIFNldCBwcmUgVEJUVCB0byA2bXMgKi9cXG4rXFx0bXQ3Nl9ybXdfZmllbGQoZGV2LCBNVF9JTlRfVElNRVJfQ0ZHLCBNVF9JTlRfVElNRVJfQ0ZHX1BSRV9UQlRULCA2KTtcXG4rXFx0bXQ3Nl9zZXQoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XFxuK1xcbitcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBsaW5rX2NvbmYtXFx1MDAzZWJlYWNvbl9pbnQpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZilcXG4re1xcbitcXHRzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtdXRleCk7XFxuK1xcbitcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XFxuK1xcbitcXHRtdDc2X2NsZWFyKGRldiwgTVRfSU5UX1RJTUVSX0VOLCBNVF9JTlRfVElNRVJfRU5fUFJFX1RCVFRfRU4pO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiBtdDc2X3djaWRfYWxsb2Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuIHtcXG5AQCAtNDE5LDYgKzQ2OSw4IEBAIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzYwMXVfb3BzID0ge1xcbiBcXHQuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsXFxuIFxcdC5jb25maWd1cmVfZmlsdGVyID0gbXQ3Nl9jb25maWd1cmVfZmlsdGVyLFxcbiBcXHQuYnNzX2luZm9fY2hhbmdlZCA9IG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZCxcXG4rXFx0LnN0YXJ0X2FwID0gbXQ3NjAxdV9zdGFydF9hcCxcXG4rXFx0LnN0b3BfYXAgPSBtdDc2MDF1X3N0b3BfYXAsXFxuIFxcdC5zdGFfYWRkID0gbXQ3NjAxdV9zdGFfYWRkLFxcbiBcXHQuc3RhX3JlbW92ZSA9IG10NzYwMXVfc3RhX3JlbW92ZSxcXG4gXFx0LnN0YV9ub3RpZnkgPSBtdDc2MDF1X3N0YV9ub3RpZnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcXG5pbmRleCAxMThkNDM3MDc4NTM3Li43MzY2ZTFjNDc2MzM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcXG5AQCAtMzU5LDcgKzM1OSw4IEBAIHZvaWQgbXQ3NjAxdV9tYWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGxlZ2FjeV9wcm90LFxcbiBcXHRcXHRcXHRcXHRpbnQgaHRfbW9kZSk7XFxuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYik7XFxuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XFxuK3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpO1xcbiB2b2lkXFxuIG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7XFxuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xcbmluZGV4IDVhZWVhYzBkZDlmZTcuLjQ3Yzc4YzRmZjUxNDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXFxuQEAgLTI3LDYgKzI3LDE0IEBAIHN0YXRpYyB1OCBxMmh3cSh1OCBxKVxcbiBzdGF0aWMgdTggc2tiMnEoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRpbnQgcWlkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuK1xcdCAgICAoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkge1xcbitcXHRcXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pO1xcbitcXHRcXHRyZXR1cm4gcTJod3EoTVRfVFhRX1ZPKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKFdBUk5fT04ocWlkIFxcdTAwM2U9IE1UX1RYUV9QU0QpKSB7XFxuIFxcdFxcdHFpZCA9IE1UX1RYUV9CRTtcXG5AQCAtMTM0LDYgKzE0Miw5IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSA9IFxcdTAwMjZpbmZvLVxcdTAwM2Vjb250cm9sLnJhdGVzWzBdO1xcbiBcXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXHRib29sIGlzX21nbXQgPSBpZWVlODAyMTFfaXNfbWdtdChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbitcXHRib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLVxcdTAwM2VhZGRyMSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGJvb2wgaXNfcHJvYmU7XFxuIFxcdHUzMiBwa3RfaWQ7XFxuQEAgLTE0OCwxNCArMTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlY29udHJvbC5yYXRlcywgMSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdGlmIChyYXRlLVxcdTAwM2VpZHggXFx1MDAzYyAwIHx8ICFyYXRlLVxcdTAwM2Vjb3VudClcXG4rXFx0aWYgKCFpc19tZ210IFxcdTAwMjZcXHUwMDI2IChyYXRlLVxcdTAwM2VpZHggXFx1MDAzYyAwIHx8ICFyYXRlLVxcdTAwM2Vjb3VudCkpXFxuIFxcdFxcdHJhdGVfY3RsID0gd2NpZC1cXHUwMDNldHhfcmF0ZTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyYXRlX2N0bCA9IG10NzZfbWFjX3R4X3JhdGVfdmFsKGRldiwgcmF0ZSwgXFx1MDAyNm5zcyk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHR0eHdpLVxcdTAwM2VyYXRlX2N0bCA9IGNwdV90b19sZTE2KHJhdGVfY3RsKTtcXG4gXFxuLVxcdGlmICghKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKVxcbitcXHRpZiAoIShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSBcXHUwMDI2XFx1MDAyNiBzdGEgXFx1MDAyNlxcdTAwMjYgIWlzX21jYXN0KVxcbiBcXHRcXHR0eHdpLVxcdTAwM2VhY2tfY3RsIHw9IE1UX1RYV0lfQUNLX0NUTF9SRVE7XFxuIFxcdGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSlcXG4gXFx0XFx0dHh3aS1cXHUwMDNlYWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTtcXG5AQCAtMTk3LDYgKzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxcbiBcXHRzdHJ1Y3QgbXQ3Nl9zdGEgKm1zdGEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gZGV2LVxcdTAwM2Vtb25fd2NpZDtcXG4gXFx0c3RydWN0IG10NzZfdHh3aSAqdHh3aTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlYWRkcjEpO1xcbiBcXHRpbnQgcGt0X2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRpbnQgaHdfcSA9IHNrYjJxKHNrYik7XFxuIFxcbkBAIC0yMTEsNyArMjI0LDcgQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXFxuIFxcdGlmIChzdGEpIHtcXG4gXFx0XFx0bXN0YSA9IChzdHJ1Y3QgbXQ3Nl9zdGEgKikgc3RhLVxcdTAwM2VkcnZfcHJpdjtcXG4gXFx0XFx0d2NpZCA9IFxcdTAwMjZtc3RhLVxcdTAwM2V3Y2lkO1xcbi1cXHR9IGVsc2UgaWYgKHZpZikge1xcbitcXHR9IGVsc2UgaWYgKHZpZiBcXHUwMDI2XFx1MDAyNiBpc19tY2FzdCkge1xcbiBcXHRcXHRzdHJ1Y3QgbXQ3Nl92aWYgKm12aWYgPSAoc3RydWN0IG10NzZfdmlmICopdmlmLVxcdTAwM2VkcnZfcHJpdjtcXG4gXFxuIFxcdFxcdHdjaWQgPSBcXHUwMDI2bXZpZi1cXHUwMDNlZ3JvdXBfd2NpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6MjMuNDQwNzI0NDUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzE2MTgwMTI5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3NjAxVVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzYwMXVfbWFjX3NldF9iZWFjb25cIixcbiAgICBcIm10NzYwMXVfbWFjX2NvbmZpZ190c2ZcIixcbiAgICBcIm10NzYwMXVfc3RhcnRfYXBcIixcbiAgICBcIm10NzYwMXVfc3RvcF9hcFwiLFxuICAgIFwibXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIG1vZGVzIHRvIHRoZSBtdDc2MDF1IFVTQiB3aXJlbGVzcyBkcml2ZXIuIEl0IG1vZGlmaWVzIG1hYzgwMjExIGNhbGxiYWNrcyB0byBoYW5kbGUgYmVhY29uIHNldHVwLCBUU0YgY29uZmlndXJhdGlvbiwgYW5kIEFQIHN0YXJ0L3N0b3Agb3BlcmF0aW9ucy4gU2luY2UgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGRldmljZXMgKHZoY2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzYzODJhMzU5ZWI0ZTQ4NjJjYjhkNDBhZDRjNTA1NGY4ODA1YWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTM6NDk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXG5pbmRleCA1ZDllOTUyYjI5NjY0Li5lODcxZjdiNjNjYjM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jXG5AQCAtMTIsNiArMTIsMjUgQEBcbiBcbiAjaW5jbHVkZSBcImluaXR2YWxzLmhcIlxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IGlmX2xpbWl0c1tdID0ge1xuK1x0eyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB9LFxuK1x0eyAubWF4ID0gOCxcbitcdCAgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHxcbisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbitcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcbisjZW5kaWZcbitcdFx0ICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxuK1x0XHQgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpZl9jb21iW10gPSB7IHtcbitcdC5saW1pdHMgPSBpZl9saW1pdHMsXG4rXHQubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlmX2xpbWl0cyksXG4rXHQubWF4X2ludGVyZmFjZXMgPSAyLFxuK1x0Lm51bV9kaWZmZXJlbnRfY2hhbm5lbHMgPSAxLFxuK1x0LmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLFxuK30gfTtcbitcbiBzdGF0aWMgdm9pZFxuIG10NzYwMXVfc2V0X3dsYW5fc3RhdGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiB2YWwsIGJvb2wgZW5hYmxlKVxuIHtcbkBAIC01OTksNiArNjE4LDcgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aWVlZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUkNfVEFCTEUpO1xuIFx0aWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpO1xuK1x0aWVlZTgwMjExX2h3X3NldChodywgTkVFRFNfVU5JUVVFX1NUQV9BRERSKTtcbiBcdGh3LVx1MDAzZW1heF9yYXRlcyA9IDE7XG4gXHRody1cdTAwM2VtYXhfcmVwb3J0X3JhdGVzID0gNztcbiBcdGh3LVx1MDAzZW1heF9yYXRlX3RyaWVzID0gMTtcbkBAIC02MDcsOSArNjI3LDE2IEBAIGludCBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbiBcdGh3LVx1MDAzZXZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG10NzZfdmlmKTtcbiBcbiBcdFNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBkZXYtXHUwMDNlbWFjYWRkcik7XG4tXG4rXHR3aXBoeS1cdTAwM2VpbnRlcmZhY2VfbW9kZXMgPVxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHxcbisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbitcdFx0QklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHxcbisjZW5kaWZcbitcdFx0QklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfFxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpO1xuK1x0d2lwaHktXHUwMDNlaWZhY2VfY29tYmluYXRpb25zID0gaWZfY29tYjtcbitcdHdpcGh5LVx1MDAzZW5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRShpZl9jb21iKTtcbiBcdHdpcGh5LVx1MDAzZWZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9BQ1RJVkVfTU9OSVRPUjtcbi1cdHdpcGh5LVx1MDAzZWludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTtcbiBcdHdpcGh5LVx1MDAzZWZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUztcbiBcbiBcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9DUU1fUlNTSV9MSVNUKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuaW5kZXggY2E5Y2Y2MjhlYjEwZC4uNWUyZGVjMTMxMzMxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmNcbkBAIC0xMTgsMTkgKzExOCwyNyBAQCB1MTYgbXQ3Nl9tYWNfdHhfcmF0ZV92YWwoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsXG4gXHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKVxuIFx0XHRcdGJ3ID0gMTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcjtcbi1cdFx0aW50IGJhbmQgPSBkZXYtXHUwMDNlY2hhbmRlZi5jaGFuLVx1MDAzZWJhbmQ7XG4tXHRcdHUxNiB2YWw7XG4tXG4tXHRcdHIgPSBcdTAwMjZkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHNbYmFuZF0tXHUwMDNlYml0cmF0ZXNbcmF0ZS1cdTAwM2VpZHhdO1xuLVx0XHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbi1cdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuLVx0XHRlbHNlXG4tXHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZTtcbiBcbi1cdFx0cGh5ID0gdmFsIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRyYXRlX2lkeCA9IHZhbCBcdTAwMjYgMHhmZjtcbi1cdFx0YncgPSAwO1xuK1x0XHRpbnQgYmFuZCA9IGRldi1cdTAwM2VjaGFuZGVmLmNoYW4tXHUwMDNlYmFuZDtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPVxuK1x0XHRcdGRldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tiYW5kXTtcbitcbitcdFx0aWYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8IHJhdGUtXHUwMDNlaWR4IFx1MDAzZT0gc2JhbmQtXHUwMDNlbl9iaXRyYXRlcykge1xuK1x0XHRcdHBoeSA9IE1UX1BIWV9UWVBFX0NDSztcbitcdFx0XHRyYXRlX2lkeCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID1cbitcdFx0XHRcdFx1MDAyNnNiYW5kLVx1MDAzZWJpdHJhdGVzW3JhdGUtXHUwMDNlaWR4XTtcbitcdFx0XHR1MTYgdmFsO1xuK1xuK1x0XHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxuK1x0XHRcdFx0dmFsID0gci1cdTAwM2Vod192YWx1ZV9zaG9ydDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlO1xuK1xuK1x0XHRcdHBoeSA9IHZhbCBcdTAwM2VcdTAwM2UgODtcbitcdFx0XHRyYXRlX2lkeCA9IHZhbCBcdTAwMjYgMHhmZjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmF0ZXZhbCA9IEZJRUxEX1BSRVAoTVRfUlhXSV9SQVRFX01DUywgcmF0ZV9pZHgpO1xuQEAgLTI2NCwxMyArMjcyLDEzIEBAIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIHNob3J0X3ByZWFtYilcbiBcdFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0FVVE9fUlNQX0NGRywgTVRfQVVUT19SU1BfUFJFQU1CX1NIT1JUKTtcbiB9XG4gXG4tdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuK3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcbiB7XG4gXHR1MzIgdmFsID0gbXQ3NjAxdV9ycihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyk7XG4gXG4tXHR2YWwgXHUwMDI2PSB+KE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8XG4tXHRcdCBNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbi1cdFx0IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOKTtcbitcdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XG4rXHRcdCBNVF9CRUFDT05fVElNRV9DRkdfVEJUVF9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuIFxuIFx0aWYgKCFlbmFibGUpIHtcbiBcdFx0bXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTtcbkBAIC0yNzksOSArMjg3LDIyIEBAIHZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbClcbiBcbiBcdHZhbCBcdTAwMjY9IH5NVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMO1xuIFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX0lOVFZBTCwgaW50ZXJ2YWwgXHUwMDNjXHUwMDNjIDQpIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSB8XG4tXHRcdE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xuK1x0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19USU1FUl9FTiB8IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOO1xuK1xuK1x0LyogQVAgTW9kZSAqL1xuK1x0aWYgKHZpZiBcdTAwMjZcdTAwMjYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9QMlBfR08pKVxuK1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAzKSB8XG4rXHRcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xuK1x0LyogSUJTUyAvIEFkLUhvYyBNb2RlICovXG4rXHRlbHNlIGlmICh2aWYgXHUwMDI2XHUwMDI2IHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKVxuK1x0XHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFLCAyKSB8XG4rXHRcdCAgICAgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYO1xuK1x0LyogU3RhdGlvbiBtb2RlICovXG4rXHRlbHNlXG4rXHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDEpO1xuK1xuK1x0bXQ3NjAxdV93cihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRywgdmFsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NjAxdV9jaGVja19tYWNfZXJyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuQEAgLTM5Myw2ICs0MTQsMzggQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0XHQgICBGSUVMRF9QUkVQKE1UX01BWF9MRU5fQ0ZHX0FNUERVLCBtaW5fZmFjdG9yKSk7XG4gfVxuIFxuK2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldi1cdTAwM2VodywgdmlmLCAwKTtcbitcdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4rXHRpbnQgZXJyLCB3b3JkcztcbitcbitcdGlmICghc2tiKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFVTQiBkZXZpY2VzIGFscmVhZHkgcmVzZXJ2ZSBlbm91Z2ggc2tiIGhlYWRyb29tICovXG4rXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2Yoc3RydWN0IG10NzZfdHh3aSkpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHR0eHdpID0gKHN0cnVjdCBtdDc2X3R4d2kgKilza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XG4rXHRtZW1zZXQodHh3aSwgMCwgc2l6ZW9mKCp0eHdpKSk7XG4rXG4rXHR0eHdpLVx1MDAzZXdjaWQgPSAwO1xuK1x0dHh3aS1cdTAwM2VsZW5fY3RsID0gY3B1X3RvX2xlMTYoc2tiLVx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XG4rXHR0eHdpLVx1MDAzZXJhdGVfY3RsID0gY3B1X3RvX2xlMTYoMCk7XG4rXG4rXHR3b3JkcyA9IERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KTtcbitcdGVyciA9IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIE1UX0JFQUNPTl9CQVNFLFxuK1x0XHRcdFx0ICAgICAgIChjb25zdCB1MzIgKilza2ItXHUwMDNlZGF0YSwgd29yZHMpO1xuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIHZvaWRcbiBtdDc2X21hY19wcm9jZXNzX3JhdGUoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywgdTE2IHJhdGUpXG4ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG5pbmRleCA1NGJkNGZhYzU0ZDgzLi41Mjg3NTZjY2Y0NzI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaFxuQEAgLTE2Nyw1ICsxNjcsNiBAQCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXNcbiBtdDc2MDF1X21hY19mZXRjaF90eF9zdGF0dXMoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpO1xuIHZvaWQgbXQ3Nl9zZW5kX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IG10NzZfdHhfc3RhdHVzICpzdGF0KTtcbiB2b2lkIG10NzYwMXVfc2V0X21hY2FkZHIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGNvbnN0IHU4ICphZGRyKTtcbi1cbitpbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5pbmRleCAwNWJhNDNlMTk4NWM4Li40Mzg5ZTMzMmRmZTE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jXG5AQCAtMTQ5LDcgKzE0OSw3IEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0ICpcdCBydDJ4MDAgZG9lc24ndCBzZWVtIHRvIGJlIGJvdGhlcmVkIHRob3VnaC5cbiBcdFx0ICovXG4gXHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2Vic3NpZCkpXG4tXHRcdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIGZhbHNlLCAwKTtcbitcdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHtcbkBAIC0xNjEsNyArMTYxLDIwIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKVxuLVx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdHJ1ZSwgaW5mby1cdTAwM2ViZWFjb25faW50KTtcbitcdFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgdHJ1ZSwgaW5mby1cdTAwM2ViZWFjb25faW50KTtcbitcbitcdGlmICgoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQkVBQ09OKSBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXG4rXHRcdG10NzYwMXVfbWFjX3NldF9iZWFjb24oZGV2LCB2aWYsIGluZm8pO1xuK1xuK1x0aWYgKChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcbitcdFx0aWYgKGluZm8tXHUwMDNlZW5hYmxlX2JlYWNvbilcbitcdFx0XHRtdDc2X3NldChkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyxcbitcdFx0XHRcdCBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG10NzZfY2xlYXIoZGV2LCBNVF9CRUFDT05fVElNRV9DRkcsXG4rXHRcdFx0XHQgICBNVF9CRUFDT05fVElNRV9DRkdfQkVBQ09OX1RYKTtcbitcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9IVCB8fCBjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpXG4gXHRcdG10NzYwMXVfbWFjX3NldF9wcm90ZWN0aW9uKGRldiwgaW5mby1cdTAwM2V1c2VfY3RzX3Byb3QsXG5AQCAtMTgzLDYgKzE5Niw0MyBAQCBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbiB9XG4gXG4rc3RhdGljIGludCBtdDc2MDF1X3N0YXJ0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXG4re1xuK1x0c3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody1cdTAwM2Vwcml2O1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRldi1cdTAwM2VtdXRleCk7XG4rXG4rXHQvKiBDbGVhciB0aGUgd2NpZCBUYWJsZSAqL1xuK1x0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaSwgMCwgTlVMTCk7XG4rXG4rXHQvKiBTZXQgcHJlIFRCVFQgdG8gNm1zICovXG4rXHRtdDc2X3Jtd19maWVsZChkZXYsIE1UX0lOVF9USU1FUl9DRkcsIE1UX0lOVF9USU1FUl9DRkdfUFJFX1RCVFQsIDYpO1xuK1x0bXQ3Nl9zZXQoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4rXG4rXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBsaW5rX2NvbmYtXHUwMDNlYmVhY29uX2ludCk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mKVxuK3tcbitcdHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2ID0gaHctXHUwMDNlcHJpdjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbitcbitcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTtcbitcbitcdG10NzZfY2xlYXIoZGV2LCBNVF9JTlRfVElNRVJfRU4sIE1UX0lOVF9USU1FUl9FTl9QUkVfVEJUVF9FTik7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbit9XG4rXG4gc3RhdGljIGludFxuIG10NzZfd2NpZF9hbGxvYyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcbiB7XG5AQCAtNDE5LDYgKzQ2OSw4IEBAIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzYwMXVfb3BzID0ge1xuIFx0LmNvbmZpZyA9IG10NzYwMXVfY29uZmlnLFxuIFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSBtdDc2X2NvbmZpZ3VyZV9maWx0ZXIsXG4gXHQuYnNzX2luZm9fY2hhbmdlZCA9IG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZCxcbitcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXG4rXHQuc3RvcF9hcCA9IG10NzYwMXVfc3RvcF9hcCxcbiBcdC5zdGFfYWRkID0gbXQ3NjAxdV9zdGFfYWRkLFxuIFx0LnN0YV9yZW1vdmUgPSBtdDc2MDF1X3N0YV9yZW1vdmUsXG4gXHQuc3RhX25vdGlmeSA9IG10NzYwMXVfc3RhX25vdGlmeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXG5pbmRleCAxMThkNDM3MDc4NTM3Li43MzY2ZTFjNDc2MzM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oXG5AQCAtMzU5LDcgKzM1OSw4IEBAIHZvaWQgbXQ3NjAxdV9tYWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHZvaWQgbXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgbGVnYWN5X3Byb3QsXG4gXHRcdFx0XHRpbnQgaHRfbW9kZSk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKTtcbi12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpO1xuK3ZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHQgICAgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4gdm9pZFxuIG10NzYwMXVfbWFjX3djaWRfc2V0dXAoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHU4IGlkeCwgdTggdmlmX2lkeCwgdTggKm1hYyk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmNcbmluZGV4IDVhZWVhYzBkZDlmZTcuLjQ3Yzc4YzRmZjUxNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3R4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xuQEAgLTI3LDYgKzI3LDE0IEBAIHN0YXRpYyB1OCBxMmh3cSh1OCBxKVxuIHN0YXRpYyB1OCBza2IycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGludCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbitcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcbitcdGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbitcdCAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpIHtcbitcdFx0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgTVRfVFhRX1ZPKTtcbitcdFx0cmV0dXJuIHEyaHdxKE1UX1RYUV9WTyk7XG4rXHR9XG4gXG4gXHRpZiAoV0FSTl9PTihxaWQgXHUwMDNlPSBNVF9UWFFfUFNEKSkge1xuIFx0XHRxaWQgPSBNVF9UWFFfQkU7XG5AQCAtMTM0LDYgKzE0Miw5IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlID0gXHUwMDI2aW5mby1cdTAwM2Vjb250cm9sLnJhdGVzWzBdO1xuIFx0c3RydWN0IG10NzZfdHh3aSAqdHh3aTtcbitcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcdGJvb2wgaXNfbWdtdCA9IGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbitcdGJvb2wgaXNfbWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItXHUwMDNlYWRkcjEpO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgaXNfcHJvYmU7XG4gXHR1MzIgcGt0X2lkO1xuQEAgLTE0OCwxNCArMTU5LDE0IEBAIG10NzYwMXVfcHVzaF90eHdpKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIGluZm8tXHUwMDNlY29udHJvbC5yYXRlcywgMSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKHJhdGUtXHUwMDNlaWR4IFx1MDAzYyAwIHx8ICFyYXRlLVx1MDAzZWNvdW50KVxuK1x0aWYgKCFpc19tZ210IFx1MDAyNlx1MDAyNiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgIXJhdGUtXHUwMDNlY291bnQpKVxuIFx0XHRyYXRlX2N0bCA9IHdjaWQtXHUwMDNldHhfcmF0ZTtcbiBcdGVsc2VcbiBcdFx0cmF0ZV9jdGwgPSBtdDc2X21hY190eF9yYXRlX3ZhbChkZXYsIHJhdGUsIFx1MDAyNm5zcyk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR0eHdpLVx1MDAzZXJhdGVfY3RsID0gY3B1X3RvX2xlMTYocmF0ZV9jdGwpO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKVxuK1x0aWYgKCEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNiBzdGEgXHUwMDI2XHUwMDI2ICFpc19tY2FzdClcbiBcdFx0dHh3aS1cdTAwM2VhY2tfY3RsIHw9IE1UX1RYV0lfQUNLX0NUTF9SRVE7XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKVxuIFx0XHR0eHdpLVx1MDAzZWFja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX05TRVE7XG5AQCAtMTk3LDYgKzIwOCw4IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0c3RydWN0IG10NzZfc3RhICptc3RhID0gTlVMTDtcbiBcdHN0cnVjdCBtdDc2X3djaWQgKndjaWQgPSBkZXYtXHUwMDNlbW9uX3djaWQ7XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cdTAwM2VhZGRyMSk7XG4gXHRpbnQgcGt0X2xlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgaHdfcSA9IHNrYjJxKHNrYik7XG4gXG5AQCAtMjExLDcgKzIyNCw3IEBAIHZvaWQgbXQ3NjAxdV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0aWYgKHN0YSkge1xuIFx0XHRtc3RhID0gKHN0cnVjdCBtdDc2X3N0YSAqKSBzdGEtXHUwMDNlZHJ2X3ByaXY7XG4gXHRcdHdjaWQgPSBcdTAwMjZtc3RhLVx1MDAzZXdjaWQ7XG4tXHR9IGVsc2UgaWYgKHZpZikge1xuK1x0fSBlbHNlIGlmICh2aWYgXHUwMDI2XHUwMDI2IGlzX21jYXN0KSB7XG4gXHRcdHN0cnVjdCBtdDc2X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3Nl92aWYgKil2aWYtXHUwMDNlZHJ2X3ByaXY7XG4gXG4gXHRcdHdjaWQgPSBcdTAwMjZtdmlmLVx1MDAzZWdyb3VwX3djaWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OToyMy40NDA3MjYxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQxNTk3ODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtdDc2MDF1YCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgZm9yIHRoZSBgbXQ3NjAxdWAgZHJpdmVyIOKAkyBhIE1lZGlhVGVrIE1UNzYwMVUgVVNCIFdpcmVsZXNzIExBTiBkcml2ZXIsIHNwZWNpZmljYWxseS4gSXQncyB0b3VjaGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgaW5pdC5jYCwgYG1hYy5jYCwgYG1hYy5oYCwgYG1haW4uY2AsIGBtdDc2MDF1LmhgLCBhbmQgYHR4LmNgLiBTZWVtcyBsaWtlIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIGEgd2hvbGUgc2xldyBvZiB3aXJlbGVzcyBtb2RlczogQVAsIE1lc2ggUG9pbnQsIFAyUCBDbGllbnQsIFAyUCBHTywgYW5kIEFkLUhvYy4gSXQncyBtb2RpZnlpbmcgdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB0byBzZXQgaW50ZXJmYWNlIG1vZGVzIGFuZCBjb21iaW5hdGlvbnMuIEl0IGhhcyBuZXcgZnVuY3Rpb25zIGZvciBiZWFjb24gc2V0dGluZywgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIEFQIG1vZGUsIGFuZCBhbHRlcnMgdGhlIHRyYW5zbWl0IGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCBtYW5hZ2VtZW50IGFuZCBtdWx0aWNhc3QgZnJhbWVzLiBTdGFuZGFyZCBzdHVmZiBmb3IgYWRkaW5nIHdpcmVsZXNzIG1vZGVzLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gSSBldmVuIGZ1enogdGhpcyB0aGluZz8gVGhlIHByb21wdCBnaXZlcyBtZSBwYXVzZSwgaXQgc2F5cyBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgaXQncyBub3Qgd29ydGggZnV6emluZy4gT2theSwgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoaXMgbWV0aG9kaWNhbGx5LiBgbXQ3NjAxdWAgaXMgYSBVU0IgZHJpdmVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHJpZ2h0PyBJIGNhbiBwcm9iYWJseSB1c2UgYHZoY2lgIChVU0IgZ2FkZ2V0L2R1bW15IEhDRCksIG9yIFN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB3aXRoIGB2aGNpYC5cblxuV2FpdCBhIG1pbnV0ZSwgSSBoYXZlIHRvIHJlYWQgdGhlIHByb21wdCBjbG9zZWx5LiBJdCBzYXlzIGNvZGUgcGF0aHMgKmltcG9zc2libGUqIHRvIHJlYWNoIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBtZWFucyBpZiBJICpjYW4qIHJlYWNoIGl0IHdpdGggYHZoY2lgIChvciBzaW1pbGFyKSwgaXQncyB3b3J0aCBmdXp6aW5nISBZZXMsIGl0IHNheXMgXCJldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNvLCBzaW5jZSBVU0IgZHJpdmVycyAqYXJlKiByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChzeXprYWxsZXIvdmhjaSksIHRoaXMgaXMgZ29vZC4gVGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCdzIGEgcG9zaXRpdmUgc2lnbmFsLiBBbmQgSSdtIHByZXR0eSBzdXJlIEkgY2FuLCBTeXprYWxsZXIgaGFzIHRoZSBVU0IgZnV6emluZyB0b29scy5cblxuUmlnaHQsIHNvIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYG10NzYwMXVgIGlzIGEgVVNCIGRyaXZlcjsgdGhhdCdzIHZlcmlmaWVkLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgZnV6emluZyBzaG90LiBMZXQgbWUgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyODAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTozMy44NTY3MDgyNDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MTQ5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1UNzYwMVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvS2NvbmZpZzoyOmNvbmZpZyBNVDc2MDFVXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzYwMVUgKFVTQikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6MzMuOTAwNTI2OTM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0MjUwNjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTVQ3NjAxVSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgYE1UNzYwMVVgIHByb2plY3QuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCB0b3VjaGluZyB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSBuYXN0eSBzdXJwcmlzZXMgZG93biB0aGUgbGluZSBhbmQgZW5zdXJpbmcgYSBzbW9vdGggaW50ZWdyYXRpb24uXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBvdGhlciBsaWJyYXJpZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgdGhpcyBiZWFzdCByZWxpZXMgb24uIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbj8gRG9lcyBpdCBuZWVkIGFueSBjdXN0b20gZmlybXdhcmUgYmxvYnM/IEFyZSB0aGVyZSBhbnkgdGhpcmQtcGFydHkgbGlicmFyaWVzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoaWNoIHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eT8gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIHN1c3BlY3RzIC0gdGhlIHN0YW5kYXJkIHdpcmVsZXNzIHN0YWNrIGNvbXBvbmVudHMsIGFueSBjdXN0b20gSEFMIGltcGxlbWVudGF0aW9ucywgYW5kIHBvdGVudGlhbGx5IHNvbWUgYm9hcmQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cbk5leHQsIEknbGwgZGVsdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBXaGF0IGJ1aWxkIHRvb2xzIGFyZSB1c2VkPyBJcyBpdCBNYWtlLCBDTWFrZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgTWFrZWZpbGVgIG9yIGBDTWFrZUxpc3RzLnR4dGAgZmlsZXMsIGxvb2tpbmcgZm9yIGluY2x1ZGUgcGF0aHMsIGxpYnJhcnkgbGlua3MsIGFuZCBhbnkgcHJlLSBvciBwb3N0LWJ1aWxkIHN0ZXBzLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGltcG9ydGFudCBpbnNpZ2h0LlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxscy4gSXQncyBlYXN5IHRvIGdldCBsb3N0IGluIGEgd2ViIG9mIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIGJlIHN5c3RlbWF0aWMuIEkgd2lsbCBsb29rIGZvciBhbnkgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY2F1c2UgYnVpbGQgZXJyb3JzLiBJJ2xsIGFsc28gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdmVyc2lvbiBjb25zdHJhaW50cywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgbGlicmFyeSB1c2VkIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgY29uZmxpY3RzISBJIGNhbiBoYW5kbGUgdGhpcyBjYXJlZnVsbHkuXG5cbkZpbmFsbHksIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGRvY3VtZW50IGV2ZXJ5dGhpbmcuIEEgZGVwZW5kZW5jeSBncmFwaCwgZXZlbiBhIHNpbXBsZSBvbmUsIHdpbGwgYmUgaW52YWx1YWJsZSBkb3duIHRoZSByb2FkLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBtb2RpZnkgb3IgZGVidWcgdGhpcyBtb2R1bGUgbGF0ZXIuIFRoaXMgaW52ZXN0aWdhdGlvbiBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTozOS43NDMwMzU4MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNVDc2MDFVXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3NjAxVSAoVVNCKSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzYwMVUtYmFzZWQgVVNCIHdpcmVsZXNzIGRvbmdsZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjM5Ljc0MzA5MDc5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzcxNjgxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNVDc2MDFVIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTVQ3NjAxVWAgZHJpdmVyLCBhbmQgbXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgbWFraW5nIGNvbm5lY3Rpb25zLiBJdCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAgYW5kIGBVU0JgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgd2lyZWxlc3MgY2hpcHNldC4gVGhlIHBhdGNoIGlzIGFib3V0IGFkZGluZyBBUCBtb2RlIHN1cHBvcnQsIHdoaWNoIGluc3RhbnRseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggYE1BQzgwMjExX01FU0hgIChnb29kIGNhdGNoIG9uIHRoYXQgYCNpZmRlZmApLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIEkgc2VlIHRoZXkncmUgYGllZWU4MDIxMV9vcHNgIGNhbGxiYWNrcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuICBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBhIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBwbGFuIHdpbGwgYmUgdG8gZW11bGF0ZSB0aGUgVVNCIGRldmljZSBhbmQgdGhlbiB1c2UgbmV0bGluayBjb21tYW5kcyB0byB0cmlnZ2VyIEFQIHN0YXJ0dXAgdmlhIG1hYzgwMjExLiAgVGhhdCBzaG91bGQgbGV0IG1lIGhpdCB0aGVzZSBmdW5jdGlvbnMuXG5cblNvLCB3aGVyZSBzaG91bGQgSSBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlc2UgZml2ZSBmdW5jdGlvbnMgYXMgdGFyZ2V0czogYG10NzYwMXVfc3RhcnRfYXBgLCBgbXQ3NjAxdV9zdG9wX2FwYCwgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3B1c2hfdHh3aWAsIGFuZCBgbXQ3NjAxdV90eGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBwcm9tcHQhIEl0J3MgdGVsbGluZyBtZSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgdG8gZ2V0IGEgbW9yZSBldmVuIGRpc3RyaWJ1dGlvbiBvZiB0ZXN0cy4gIGBtdDc2MDF1X3R4YCBhbmQgYG10NzYwMXVfcHVzaF90eHdpYCBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCwgc28gc2NyYXRjaCB0aG9zZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGxpc3QuXG5cbk9rYXksIGxldCdzIHJlZm9jdXMuIE15IGNvcmUgdGFyZ2V0cyB3aWxsIGJlIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYW5kIGBtdDc2MDF1X21hY19jb25maWdfdHNmYC4gTGV0IG1lIGNoZWNrIGlmIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCBpcyBzdGF0aWMuIEl0J3MgaW4gYG1hYy5jYCBhbmQgZXhwb3NlZCB2aWEgYG1hYy5oYCwgc28gaXQncyBub24tc3RhdGljLiBHb29kLiBOb3csIHdoYXQgYWJvdXQgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYD8gVGhleSdyZSBpbiBgbWFpbi5jYCBhbmQgdGhleSBhcmUgZGVjbGFyZWQgc3RhdGljLiBCdXQsIHdhaXQuLi50aGV5IGFyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AuIFNpbmNlIHRoZXkgYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJ3QqIGlubGluZSB0aGVtLiBCdXQsIHRvIGJlIHNhZmUsIEknbGwgaW5jbHVkZSB0aGVtIGluIG15IGxpc3Qgb2YgZnV6emluZyB0YXJnZXRzLlxuXG5BbHJpZ2h0LCB3aGF0IGFib3V0IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYD8gSXQncyBub24tc3RhdGljLCBzbyBnb29kIHRvIGdvLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgZ290IG1vZGlmaWVkLiBgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2VgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCdzIGp1c3QgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIEknbSBub3QgdGhhdCB3b3JyaWVkIGFib3V0IHRoYXQuIEhtbSwgYG10NzZfbWFjX3R4X3JhdGVfdmFsYCBpcyBhbHNvIG1vZGlmaWVkLCBhbmQgdGhhdCBpcyBpbiBgbWFjLmNgLiBJIHNob3VsZCBwcm9iYWJseSBpbnZlc3RpZ2F0ZSB0aGF0IG9uZSBhcyB3ZWxsLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHNpZ25hdHVyZXMgb2YgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYC4gR290dGEgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMzQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTo1MS4xMTQ3NzUxOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMzI4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9zdGFydF9hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjE5OTpzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjAwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz00NTg9Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzEtXFx0LmJzc19pbmZvX2NoYW5nZWQgPSBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6NDcyOlxcdC5zdGFydF9hcCA9IG10NzYwMXVfc3RhcnRfYXAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtNDczLVxcdC5zdG9wX2FwID0gbXQ3NjAxdV9zdG9wX2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo0OTo1MS4xNjAwMTYyODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU3NDU0Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtcyBhbmQgODAyLjExIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipBbmFseXppbmcgdGhlIElFRUUgODAyLjExIE9wZXJhdGlvbnMgU3RydWN0dXJlKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyB0aGF0IHNvbWV0aGluZyBpcyBiZWluZyBcImFzc2lnbmVkIHRvIGBpZWVlODAyMTFfb3BzYFwiLiBSaWdodCwgdGhvc2Ugb3BlcmF0aW9ucyBhcmUgcHJldHR5IG11Y2ggc3RhdGljLCBhcmVuJ3QgdGhleT8gVGhleSdyZSBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSBhbmQgaG9va2VkIGludG8gdGhlIGRyaXZlcidzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIGRyaXZlciB3b3VsZCB0aGVuIHBvcHVsYXRlIHRoZSBgaWVlZTgwMjExX29wc2Agd2l0aCBpdCdzIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzLlxuXG5TbywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBhbmQgZmlndXJlIG91dCB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuIFRoZSBub3RlIG1lbnRpb25zIGEgZnVuY3Rpb24sIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgZnVuY3Rpb24gZGlyZWN0bHkgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBhc3NpZ25lZCB0byB0aGlzIHNwZWNpZmljIG9wZXJhdGlvbmFsIHN0cnVjdHVyZSwgYW5kIGluIHRoaXMgY2FzZSwgaXQgYXBwZWFycyB3ZSBhcmUgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIGJlYWNvbiBmdW5jdGlvbmFsaXR5LiBXZSBtYXkgd2FudCB0byBhbHNvIGNoZWNrIGZvciByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBpbnZvbHZlIHRoZSBoYXJkd2FyZSBhbmQgbWVkaXVtIGFjY2VzcyBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjU1LjIxNzQ3NDE3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNzMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9tYWNfc2V0X2JlYWNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTM5Mj12b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQxNzppbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQxOC1cXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaD0xNjk9dm9pZCBtdDc2MDF1X3NldF9tYWNhZGRyKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaDoxNzA6aW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaC0xNzEtXFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTY2LVxcdGlmICgoY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikgXFx1MDAyNlxcdTAwMjYgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjE2NzpcXHRcXHRtdDc2MDF1X21hY19zZXRfYmVhY29uKGRldiwgdmlmLCBpbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0xNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjU1LjI2MjY1NjcwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2OTc3Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgU3RhdGUqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBub24tc3RhdGljIGhlcmUsIHdoaWNoIGlzIHRoZSBpbW1lZGlhdGUgaXNzdWUuIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IFdoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgdmFyaWFibGUgc3RhdGU/IExldCdzIHpvb20gaW4gb24gYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLiBUaGF0J3Mgd2hlcmUgSSdkIHN0YXJ0LiBJdCdzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IHRvIHNlZSBpZiB0aGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gdGltZSBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb24gKFRTRikgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1BQyBsYXllciwgb3IsIGluZGVlZCwgc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbC4gR290dGEgY2hlY2sgaXRzIHZhbHVlcywgaW50ZXJhY3Rpb25zLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBlbGVtZW50IGNoYW5nZXMgZHluYW1pY2FsbHkgaXMga2V5IHRvIHRyb3VibGVzaG9vdGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzNSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjQ5OjU4LjU4OTYzNzQ0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMDA0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9tYWNfY29uZmlnX3RzZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTI2Nz12b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTI3NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjI3NTp2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYy0yNzYtXFx0XFx0XFx0ICAgIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzQ9bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTUxLVxcdFxcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cXHUwMDNlYnNzaWQpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjE1MjpcXHRcXHRcXHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCBmYWxzZSwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMTUzLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2My1cXHRpZiAoY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MTY0OlxcdFxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGluZm8tXFx1MDAzZWJlYWNvbl9pbnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTE2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jPTE5OT1zdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0yMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6MjE1OlxcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGxpbmtfY29uZi1cXHUwMDNlYmVhY29uX2ludCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjE2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MjIyPXN0YXRpYyB2b2lkIG10NzYwMXVfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoyMjk6XFx0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIzMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oPTM2MT12b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oOjM2Mjp2b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzYzLVxcdFxcdFxcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NDk6NTguNjM0NjQyOTQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4OTQwNjgxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgdGhlIG1vZGlmaWNhdGlvbnMuIExldCBtZSBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgaW4gcmVsYXRpb24gdG8gdGhlIE1UNzYwMVUgZHJpdmVyLiBGaXJzdCwgdGhlcmUncyBgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2VgLCBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgLCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCwgYG10NzYwMXVfc3RhcnRfYXBgLCBgbXQ3NjAxdV9zdG9wX2FwYCwgYG10NzYwMXVfcHVzaF90eHdpYCwgYW5kIGBtdDc2MDF1X3R4YC5cblxuQWxyaWdodCwgYSBmZXcgb2YgdGhlc2UgYXJlIGNsZWFybHkgaW1wb3J0YW50LiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBiZWluZyBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wcy5ic3NfaW5mb19jaGFuZ2VkYCwgd2hpY2ggaXMgYSBrZXkgY2FsbGJhY2suIGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIHVzZWQgYnkgYG10NzYwMXVfcHVzaF90eHdpYC4gU28gbGV0J3MgbWFrZSBzdXJlIEkgcmVhbGx5IGZvY3VzIG9uIHRob3NlIHN5bWJvbHM6XG5cbmBtdDc2MDF1X21hY19zZXRfYmVhY29uYCwgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgLCBgbXQ3NjAxdV9zdGFydF9hcGAsIGBtdDc2MDF1X3N0b3BfYXBgLCBhbmQgYG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZGAuXG5cbkhtbSwgYG10NzYwMXVfc3RhcnRfYXBgIGFuZCBgbXQ3NjAxdV9zdG9wX2FwYCBhcmUgc3RhdGljLiBJIHdpbGwgaW5jbHVkZSB0aGVtIGFueXdheSwganVzdCBpbiBjYXNlLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZC4gVGhlIHBhdGNoIHJlZmVyZW5jZXMgYCNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSGAuIFNvLCBgTUFDODAyMTFfTUVTSGAgc2hvdWxkIGJlIGluIGBFbmFibGVDb25maWdzYC4gSXQgd291bGQgYmUgd2lzZSB0byBhZGQgYE1UNzYwMVVgIHRvIGBFbmFibGVDb25maWdzYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmb3IgYE1BQzgwMjExX01FU0hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDowNS41Mjg3MTUxMjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA2MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9NRVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnPTYwPWNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjcxLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDowNS41NzQxMjY5ODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNjc0OTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFfTUVTSGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgTUFDODAyMTFfTUVTSGAuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgY2hlY2tpbmcgZm9yIGFueSBkZXBlbmRlbnQgbW9kdWxlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0LCBnaXZlbiBpdHMgbmF0dXJlLCB0aGVyZSAqd2lsbCogYmUgZGVwZW5kZW5jaWVzLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZXksIGFuZCBob3cgZGVlcGx5IGludGVydHdpbmVkIGlzIHRoaXMgZmVhdHVyZT8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJlbGlhbmNlIG9uIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdGhlIGJyb2FkZXIga2VybmVsLiBJcyBpdCB0aWdodGx5IGNvdXBsZWQsIG9yIGNhbiBJIGNvbnNpZGVyIGl0IG1vcmUgbW9kdWxhcj8gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgdHJlZSBpcyBjcnVjaWFsIGZvciBhbnkga2luZCBvZiBkZXZlbG9wbWVudCBvciBkZWJ1Z2dpbmcgSSBtaWdodCBuZWVkIHRvIGRvIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6MDkuMDEwODgxNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdGhlbHBcXG4gIDY2OlxcdFxcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgbWFjODAyMTEgaW50ZXJuYWxzIHdpdGgga3VuaXQuXFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIE1BQzgwMjExX01FU0hcXG4gIDcxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSA4MDIuMTEgbWVzaCBvcGVyYXRpb24gaW4gbWFjODAyMTFcXG4gIDc1OlxcdFxcdCAgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQuICA4MDIuMTEgbWVzaCBjb25uZWN0cyBtdWx0aXBsZSBzdGF0aW9uc1xcbiAgNzY6XFx0XFx0ICBvdmVyIChwb3NzaWJseSBtdWx0aS1ob3ApIHdpcmVsZXNzIGxpbmtzIHRvIGZvcm0gYSBzaW5nbGUgbG9naWNhbFxcbiAgNzc6XFx0XFx0ICBMQU4uXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZyBNQUM4MDIxMV9MRURTXFxuICA4MDpcXHRcXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgODI6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbiAgODM6XFx0XFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG4gIDg0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6MDkuMDEwOTk1NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MDYzOTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gcHV6emxlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZGVlcGx5OlxuXG4qKkRlZXAgRGl2ZSBpbnRvIE1BQzgwMjExIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoaW5nZXMgb24gYE1BQzgwMjExYC4gVGhhdCdzIHRoZSBrZXkuIFRoZXJlZm9yZSwgdG8gZ2V0IHRoaXMgcmlnaHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBuZWVkcyB0byBpbmNsdWRlIGBNVDc2MDFVYCBhbmQgYE1BQzgwMjExX01FU0hgLiBUaGF0IG1ha2VzIHNlbnNlOyBgTUFDODAyMTFfTUVTSGAgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIG1lc2ggbmV0d29ya2luZyBjYXBhYmlsaXRpZXMsIHdoaWNoIGxpa2VseSByZWx5IGhlYXZpbHkgb24gYE1BQzgwMjExYCBpdHNlbGYuXG5cbk5vdywgaG9sZCBvbi4uLiBgTVQ3NjAxVWAgYWxzbyBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGJ1dCBhbHNvIG9uIGBVU0JgLiBUaGlzIGlzIHR5cGljYWwgZm9yIGEgVVNCIHdpcmVsZXNzIGRldmljZS4gVGhpcyBVU0IgZGVwZW5kZW5jeSBtYWtlcyBtZSB3b25kZXIgYWJvdXQgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIFVTQiBob3N0IGludGVyZmFjZS4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgc3R1ZmYsIHRob3VnaCBJIG5lZWQgdG8ga2VlcCBpdCBpbiBtaW5kIGFzIEkgYnVpbGQgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbkJlZm9yZSBJIGxvY2sgdGhpcyBkb3duLCBJIHNob3VsZCBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGUgYE1UNzYwMVVgIHNldHRpbmdzIG9uY2UgbW9yZSwganVzdCB0byBlbnN1cmUgdGhhdCBJJ3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgb3RoZXIgZGVwZW5kZW5jeSBhbmQgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gQSBmaW5hbCBsb29rIHdpbGwgaGVscCBtZSBmZWVsIGNvbmZpZGVudCB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxMy4wOTE2MzgwNDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTVQ3NjAxVVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzYwMVUgKFVTQikgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MDFVLWJhc2VkIFVTQiB3aXJlbGVzcyBkb25nbGVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxMy4wOTE3MDQ3NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MDQzNDAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzYwMVUgTWVzaCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGJhc2VkIG9uIHRoZSBwcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uLCBpdCBsb29rcyBsaWtlIHRoZSBgTVQ3NjAxVWAgZHJpdmVyLCBjb21iaW5lZCB3aXRoIGBNQUM4MDIxMV9NRVNIYCBmdW5jdGlvbmFsaXR5LCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHRhc2suIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb24gY2FsbHMsIHRoZSBvbmVzIHRoYXQgcmVhbGx5IGRyaXZlIHRoZSBiZWhhdmlvcjogYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAsIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYC5cblxuQWgsIGhlcmUncyBhIGNydWNpYWwgcG9pbnQuIEl0IHNlZW1zIGBtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRgIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIGNvcnJlY3QsIG5vdyBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBpZWNlLiBJdCBhcHBlYXJzIHRoZSBtb2RpZmljYXRpb24gaXMgdG8gZW5zdXJlIHRoYXQsIHdoZW5ldmVyIEJTUyBpbmZvIGNoYW5nZXMsIGl0IG5vdyBjYWxscyBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAgd2l0aCBib3RoIGB2aWZgIGFuZCBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBjb21iaW5hdGlvbiDigJMgaXQgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWUgc3luY2hyb25pemF0aW9uIGFuZCBiZWFjb24gdXBkYXRlcywgYWxpZ25pbmcgd2l0aCB3aGF0IEkgZXhwZWN0IGZyb20gYSBtZXNoIGltcGxlbWVudGF0aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBpbXBvcnRhbnQgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgZHJpdmVyLiBJIG11c3QgY29uZmlybSBpZiBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZSBhbmQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxOC4xNDIxNDE1NDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDYwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYwMXVfYnNzX2luZm9fY2hhbmdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz0xMzM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoxMzQ6bXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTEzNS1cXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTY0IGNoYW5nZWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYz00NTg9Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy00NzAtXFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSBtdDc2X2NvbmZpZ3VyZV9maWx0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM6NDcxOlxcdC5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTQ3Mi1cXHQuc3RhcnRfYXAgPSBtdDc2MDF1X3N0YXJ0X2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDoxOC4xODg2MDY5MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3ODYxMzY3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG10NzYwMXUgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5pdGlhbCBhc3N1bXB0aW9uIHRoYXQgZXZlcnl0aGluZyBpcyBzdGF0aWMgbmVlZHMgcmV2aXNpb24uIEkgc2VlIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBhbmQgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgIGFyZSBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHNvIHRob3NlIGFyZSBrZXkgZW50cnkgcG9pbnRzLiBJJ2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCBhbG9uZyB3aXRoIGBtdDc2MDF1X3N0YXJ0X2FwYCwgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCwgYXMgdGhleSBzZWVtIHJlbGV2YW50IHRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuSSBnbGFuY2VkIGF0IGBtdDc2MDF1X3JlZ2lzdGVyX2RldmljZWAsIGJ1dCBpdCdzIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgSSdtIGdlbmVyYWxseSBub3QgYXMgaW50ZXJlc3RlZCBpbiB0aG9zZSBmb3IgZnV6emluZy4gU2ltaWxhcmx5LCBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyBkZWVwbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSB0cmFuc21pdCBwYXRoLCB3aGljaCBtYWtlcyBpdCBsZXNzIGNyaXRpY2FsIGhlcmUuIEknbSBwcmlvcml0aXppbmcgZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBBUC9NZXNoIGZ1bmN0aW9uYWxpdHkuXG5cbkkgcmVjaGVja2VkIGBtdDc2MDF1X3N0YXJ0X2FwYCBhbmQgYG10NzYwMXVfc3RvcF9hcGAsIGFuZCB5ZXMsIHRoZXkgKmFyZSogc3RhdGljLCBidXQgc2luY2UgdGhleSdyZSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX29wc2AsIHRoZXkncmUgY2FsbGVkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIHdvbid0IGlubGluZSB0aGVtLCBhbmQgdGhleSdyZSB2YWxpZCB0YXJnZXRzLiBUaGV5IGFyZSBpbXBvcnRhbnQuXG5cbk5vdywgb24gdGhlIGNvbmZpZyBzaWRlOiBgTUFDODAyMTFgIGFuZCBgVVNCYCBhcmUgc3RhbmRhcmQsIG9idmlvdXNseS4gYE1UNzYwMVVgIGlzIHRoZSBkcml2ZXIsIHNvIHRoYXQncyBhIGdpdmVuLiBBbmQgY3JpdGljYWxseSwgYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZCBmb3IgdGhlIG1lc2ggYXNwZWN0LiBJJ20gZ29pbmcgdG8gc2V0IHRoYXQgYXMgYW4gZW5hYmxlciB0b28uXG5cblNvLCB0aGUgc3VtbWFyeSBvZiBteSBkZWNpc2lvbnMgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhlIG5ldyBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIGZ1bmN0aW9uYWxpdGllcyBtYWtlIHRoaXMgYSB3b3J0aHdoaWxlIGZ1enppbmcgdGFyZ2V0LCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhhdCBVU0IgZGV2aWNlcyBhcmUgZW11bGF0YWJsZS5cbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmBcbiAgICAqICAgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgXG4gICAgKiAgIGBtdDc2MDF1X3N0YXJ0X2FwYFxuICAgICogICBgbXQ3NjAxdV9zdG9wX2FwYFxuICAgICogICBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgTVQ3NjAxVWBcbiAgICAqICAgYE1BQzgwMjExX01FU0hgXG5cbk15IHJlYXNvbmluZyBpcyB0aGUgYWRkaXRpb24gb2YgQVAsIE1lc2gsIFAyUCwgYW5kIEFkLUhvYyBtb2RlcyB0byB0aGUgbXQ3NjAxdSBVU0Igd2lyZWxlc3MgZHJpdmVyIGJ5IG1vZGlmeWluZyBtYWM4MDIxMSBjYWxsYmFja3MgdG8gaGFuZGxlIGJlYWNvbiBzZXR1cCwgVFNGIGNvbmZpZ3VyYXRpb24sIGFuZCBBUCBzdGFydC9zdG9wIG9wZXJhdGlvbnMuIFNpbmNlIHRoaXMgaXMgYSBVU0IgZHJpdmVyLCBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBkZXZpY2VzICh2aGNpKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDAsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjM0Ljk3NDc0NjU1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTg3MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc2MDFVXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3NjAxdV9tYWNfc2V0X2JlYWNvblwiLFxuICAgIFwibXQ3NjAxdV9tYWNfY29uZmlnX3RzZlwiLFxuICAgIFwibXQ3NjAxdV9zdGFydF9hcFwiLFxuICAgIFwibXQ3NjAxdV9zdG9wX2FwXCIsXG4gICAgXCJtdDc2MDF1X2Jzc19pbmZvX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFQLCBNZXNoLCBQMlAsIGFuZCBBZC1Ib2MgbW9kZXMgdG8gdGhlIG10NzYwMXUgVVNCIHdpcmVsZXNzIGRyaXZlci4gSXQgbW9kaWZpZXMgbWFjODAyMTEgY2FsbGJhY2tzIHRvIGhhbmRsZSBiZWFjb24gc2V0dXAsIFRTRiBjb25maWd1cmF0aW9uLCBhbmQgQVAgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBTaW5jZSB0aGlzIGlzIGEgVVNCIGRyaXZlciwgaXQgY2FuIGJlIGZ1enplZCB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZGV2aWNlcyAodmhjaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3NjAxVVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzYwMXVfbWFjX3NldF9iZWFjb25cIixcbiAgICBcIm10NzYwMXVfbWFjX2NvbmZpZ190c2ZcIixcbiAgICBcIm10NzYwMXVfc3RhcnRfYXBcIixcbiAgICBcIm10NzYwMXVfc3RvcF9hcFwiLFxuICAgIFwibXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBUCwgTWVzaCwgUDJQLCBhbmQgQWQtSG9jIG1vZGVzIHRvIHRoZSBtdDc2MDF1IFVTQiB3aXJlbGVzcyBkcml2ZXIuIEl0IG1vZGlmaWVzIG1hYzgwMjExIGNhbGxiYWNrcyB0byBoYW5kbGUgYmVhY29uIHNldHVwLCBUU0YgY29uZmlndXJhdGlvbiwgYW5kIEFQIHN0YXJ0L3N0b3Agb3BlcmF0aW9ucy4gU2luY2UgdGhpcyBpcyBhIFVTQiBkcml2ZXIsIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGRldmljZXMgKHZoY2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDozNS4wNTg3NDA4NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDA2NTI2MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6MzUuMDU5Mjk3ODg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMDA1OTY0OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uKClgLCB3aGljaCByZXRyaWV2ZXMgYSBiZWFjb24gc2tiIHVzaW5nIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYC4gSXQgdGhlbiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBkZXZpY2UgdXNpbmcgYERJVl9ST1VORF9VUChza2ItXFx1MDAzZWxlbiwgNClgIGFuZCBwYXNzZXMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYC5cXG5cXG5CZWNhdXNlIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyBjYW4gaGF2ZSBhcmJpdHJhcnkgbGVuZ3RocywgYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdoZW4gYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgIHdpbGwgcmVhZCB1cCB0byAzIGJ5dGVzIHBhc3QgYHNrYi1cXHUwMDNlbGVuYC4gU2luY2Ugc2tiIGJ1ZmZlcnMgdHlwaWNhbGx5IGhhdmUgc29tZSB0YWlscm9vbSAobWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkKSwgdGhpcyByZWFkIHdpbGwgc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGlvbi4gQXMgYSByZXN1bHQsIEtBU0FOIHdpbGwgTk9UIGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cXG5cXG5Ib3dldmVyLCB0aGlzIG9wZXJhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBza2IgdGFpbHJvb20gYW5kIHN1YnNlcXVlbnRseSBzZW5kcyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZygpYCAoY2FsbGVkIGJ5IGBtdDc2MDF1X21jdV9tc2dfc2VuZCgpYCkuIEtNU0FOIHRyYWNrcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXQgdGhlIGJ5dGUgbGV2ZWwgYW5kIGhvb2tzIGludG8gVVNCIFVSQiBzdWJtaXNzaW9ucywgbWFraW5nIGl0IHVuaXF1ZWx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMga2VybmVsIG1lbW9yeSBpbmZvLWxlYWsgdG8gdGhlIGhhcmR3YXJlIGRldmljZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjNjM4MmEzNTllYjRlNDg2MmNiOGQ0MGFkNGM1MDU0Zjg4MDVhZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMzo0OToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcbmluZGV4IDVkOWU5NTJiMjk2NjQuLmU4NzFmN2I2M2NiMzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmNcbkBAIC0xMiw2ICsxMiwyNSBAQFxuIFxuICNpbmNsdWRlIFwiaW5pdHZhbHMuaFwiXG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZfbGltaXRzW10gPSB7XG4rXHR7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIH0sXG4rXHR7IC5tYXggPSA4LFxuK1x0ICAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfFxuKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuK1x0XHQgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfFxuKyNlbmRpZlxuK1x0XHQgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8XG4rXHRcdCAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGlmX2NvbWJbXSA9IHsge1xuK1x0LmxpbWl0cyA9IGlmX2xpbWl0cyxcbitcdC5uX2xpbWl0cyA9IEFSUkFZX1NJWkUoaWZfbGltaXRzKSxcbitcdC5tYXhfaW50ZXJmYWNlcyA9IDIsXG4rXHQubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsXG4rXHQuYmVhY29uX2ludF9pbmZyYV9tYXRjaCA9IHRydWUsXG4rfSB9O1xuK1xuIHN0YXRpYyB2b2lkXG4gbXQ3NjAxdV9zZXRfd2xhbl9zdGF0ZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIHZhbCwgYm9vbCBlbmFibGUpXG4ge1xuQEAgLTU5OSw2ICs2MTgsNyBAQCBpbnQgbXQ3NjAxdV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4gXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7XG4gXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19SQ19UQUJMRSk7XG4gXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBNRlBfQ0FQQUJMRSk7XG4rXHRpZWVlODAyMTFfaHdfc2V0KGh3LCBORUVEU19VTklRVUVfU1RBX0FERFIpO1xuIFx0aHctXHUwMDNlbWF4X3JhdGVzID0gMTtcbiBcdGh3LVx1MDAzZW1heF9yZXBvcnRfcmF0ZXMgPSA3O1xuIFx0aHctXHUwMDNlbWF4X3JhdGVfdHJpZXMgPSAxO1xuQEAgLTYwNyw5ICs2MjcsMTYgQEAgaW50IG10NzYwMXVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIFx0aHctXHUwMDNldmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXQ3Nl92aWYpO1xuIFxuIFx0U0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGRldi1cdTAwM2VtYWNhZGRyKTtcbi1cbitcdHdpcGh5LVx1MDAzZWludGVyZmFjZV9tb2RlcyA9XG4rXHRcdEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfFxuKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfFxuKyNlbmRpZlxuK1x0XHRCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8XG4rXHRcdEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7XG4rXHR3aXBoeS1cdTAwM2VpZmFjZV9jb21iaW5hdGlvbnMgPSBpZl9jb21iO1xuK1x0d2lwaHktXHUwMDNlbl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpO1xuIFx0d2lwaHktXHUwMDNlZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SO1xuLVx0d2lwaHktXHUwMDNlaW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0d2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xuIFxuIFx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0NRTV9SU1NJX0xJU1QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXG5pbmRleCBjYTljZjYyOGViMTBkLi41ZTJkZWMxMzEzMzFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuY1xuQEAgLTExOCwxOSArMTE4LDI3IEBAIHUxNiBtdDc2X21hY190eF9yYXRlX3ZhbChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcbiBcdFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXG4gXHRcdFx0YncgPSAxO1xuIFx0fSBlbHNlIHtcbi1cdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyO1xuLVx0XHRpbnQgYmFuZCA9IGRldi1cdTAwM2VjaGFuZGVmLmNoYW4tXHUwMDNlYmFuZDtcbi1cdFx0dTE2IHZhbDtcbi1cbi1cdFx0ciA9IFx1MDAyNmRldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tiYW5kXS1cdTAwM2ViaXRyYXRlc1tyYXRlLVx1MDAzZWlkeF07XG4tXHRcdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxuLVx0XHRcdHZhbCA9IHItXHUwMDNlaHdfdmFsdWVfc2hvcnQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlO1xuIFxuLVx0XHRwaHkgPSB2YWwgXHUwMDNlXHUwMDNlIDg7XG4tXHRcdHJhdGVfaWR4ID0gdmFsIFx1MDAyNiAweGZmO1xuLVx0XHRidyA9IDA7XG4rXHRcdGludCBiYW5kID0gZGV2LVx1MDAzZWNoYW5kZWYuY2hhbi1cdTAwM2ViYW5kO1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9XG4rXHRcdFx0ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWJhbmRzW2JhbmRdO1xuK1xuK1x0XHRpZiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgcmF0ZS1cdTAwM2VpZHggXHUwMDNlPSBzYmFuZC1cdTAwM2VuX2JpdHJhdGVzKSB7XG4rXHRcdFx0cGh5ID0gTVRfUEhZX1RZUEVfQ0NLO1xuK1x0XHRcdHJhdGVfaWR4ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPVxuK1x0XHRcdFx0XHUwMDI2c2JhbmQtXHUwMDNlYml0cmF0ZXNbcmF0ZS1cdTAwM2VpZHhdO1xuK1x0XHRcdHUxNiB2YWw7XG4rXG4rXHRcdFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpXG4rXHRcdFx0XHR2YWwgPSByLVx1MDAzZWh3X3ZhbHVlX3Nob3J0O1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdHZhbCA9IHItXHUwMDNlaHdfdmFsdWU7XG4rXG4rXHRcdFx0cGh5ID0gdmFsIFx1MDAzZVx1MDAzZSA4O1xuK1x0XHRcdHJhdGVfaWR4ID0gdmFsIFx1MDAyNiAweGZmO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyYXRldmFsID0gRklFTERfUFJFUChNVF9SWFdJX1JBVEVfTUNTLCByYXRlX2lkeCk7XG5AQCAtMjY0LDEzICsyNzIsMTMgQEAgdm9pZCBtdDc2MDF1X21hY19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgc2hvcnRfcHJlYW1iKVxuIFx0XHRtdDc2X2NsZWFyKGRldiwgTVRfQVVUT19SU1BfQ0ZHLCBNVF9BVVRPX1JTUF9QUkVBTUJfU0hPUlQpO1xuIH1cbiBcbi12b2lkIG10NzYwMXVfbWFjX2NvbmZpZ190c2Yoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIGJvb2wgZW5hYmxlLCBpbnQgaW50ZXJ2YWwpXG4rdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIHtcbiBcdHUzMiB2YWwgPSBtdDc2MDF1X3JyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHKTtcbiBcbi1cdHZhbCBcdTAwMjY9IH4oTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHxcbi1cdFx0IE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUgfFxuLVx0XHQgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU4pO1xuK1x0dmFsIFx1MDAyNj0gfihNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfCBNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbitcdFx0IE1UX0JFQUNPTl9USU1FX0NGR19UQlRUX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX0JFQUNPTl9UWCk7XG4gXG4gXHRpZiAoIWVuYWJsZSkge1xuIFx0XHRtdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpO1xuQEAgLTI3OSw5ICsyODcsMjIgQEAgdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBib29sIGVuYWJsZSwgaW50IGludGVydmFsKVxuIFxuIFx0dmFsIFx1MDAyNj0gfk1UX0JFQUNPTl9USU1FX0NGR19JTlRWQUw7XG4gXHR2YWwgfD0gRklFTERfUFJFUChNVF9CRUFDT05fVElNRV9DRkdfSU5UVkFMLCBpbnRlcnZhbCBcdTAwM2NcdTAwM2MgNCkgfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfVElNRVJfRU4gfFxuLVx0XHRNVF9CRUFDT05fVElNRV9DRkdfU1lOQ19NT0RFIHxcbi1cdFx0TVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47XG4rXHQgICAgICAgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RJTUVSX0VOIHwgTVRfQkVBQ09OX1RJTUVfQ0ZHX1RCVFRfRU47XG4rXG4rXHQvKiBBUCBNb2RlICovXG4rXHRpZiAodmlmIFx1MDAyNlx1MDAyNiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcbitcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykpXG4rXHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDMpIHxcbitcdFx0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7XG4rXHQvKiBJQlNTIC8gQWQtSG9jIE1vZGUgKi9cbitcdGVsc2UgaWYgKHZpZiBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpXG4rXHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1UX0JFQUNPTl9USU1FX0NGR19TWU5DX01PREUsIDIpIHxcbitcdFx0ICAgICAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFg7XG4rXHQvKiBTdGF0aW9uIG1vZGUgKi9cbitcdGVsc2VcbitcdFx0dmFsIHw9IEZJRUxEX1BSRVAoTVRfQkVBQ09OX1RJTUVfQ0ZHX1NZTkNfTU9ERSwgMSk7XG4rXG4rXHRtdDc2MDF1X3dyKGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLCB2YWwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtdDc2MDF1X2NoZWNrX21hY19lcnIoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG5AQCAtMzkzLDYgKzQxNCwzOCBAQCB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXG4gXHRcdCAgIEZJRUxEX1BSRVAoTVRfTUFYX0xFTl9DRkdfQU1QRFUsIG1pbl9mYWN0b3IpKTtcbiB9XG4gXG4raW50IG10NzYwMXVfbWFjX3NldF9iZWFjb24oc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4rXHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LVx1MDAzZWh3LCB2aWYsIDApO1xuK1x0c3RydWN0IG10NzZfdHh3aSAqdHh3aTtcbitcdGludCBlcnIsIHdvcmRzO1xuK1xuK1x0aWYgKCFza2IpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVVNCIGRldmljZXMgYWxyZWFkeSByZXNlcnZlIGVub3VnaCBza2IgaGVhZHJvb20gKi9cbitcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgbXQ3Nl90eHdpKSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHR4d2kgPSAoc3RydWN0IG10NzZfdHh3aSAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbitcdG1lbXNldCh0eHdpLCAwLCBzaXplb2YoKnR4d2kpKTtcbitcbitcdHR4d2ktXHUwMDNld2NpZCA9IDA7XG4rXHR0eHdpLVx1MDAzZWxlbl9jdGwgPSBjcHVfdG9fbGUxNihza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtdDc2X3R4d2kpKTtcbitcdHR4d2ktXHUwMDNlcmF0ZV9jdGwgPSBjcHVfdG9fbGUxNigwKTtcbitcbitcdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cdTAwM2VsZW4sIDQpO1xuK1x0ZXJyID0gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgTVRfQkVBQ09OX0JBU0UsXG4rXHRcdFx0XHQgICAgICAgKGNvbnN0IHUzMiAqKXNrYi1cdTAwM2VkYXRhLCB3b3Jkcyk7XG4rXHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIG10NzZfbWFjX3Byb2Nlc3NfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLCB1MTYgcmF0ZSlcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmhcbmluZGV4IDU0YmQ0ZmFjNTRkODMuLjUyODc1NmNjZjQ3MjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5oXG5AQCAtMTY3LDUgKzE2Nyw2IEBAIHN0cnVjdCBtdDc2X3R4X3N0YXR1c1xuIG10NzYwMXVfbWFjX2ZldGNoX3R4X3N0YXR1cyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldik7XG4gdm9pZCBtdDc2X3NlbmRfdHhfc3RhdHVzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3Nl90eF9zdGF0dXMgKnN0YXQpO1xuIHZvaWQgbXQ3NjAxdV9zZXRfbWFjYWRkcihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpO1xuLVxuK2ludCBtdDc2MDF1X21hY19zZXRfYmVhY29uKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbmluZGV4IDA1YmE0M2UxOTg1YzguLjQzODllMzMyZGZlMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmNcbkBAIC0xNDksNyArMTQ5LDcgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHQgKlx0IHJ0MngwMCBkb2Vzbid0IHNlZW0gdG8gYmUgYm90aGVyZWQgdGhvdWdoLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWJzc2lkKSlcbi1cdFx0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgZmFsc2UsIDApO1xuK1x0XHRcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIGZhbHNlLCAwKTtcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykge1xuQEAgLTE2MSw3ICsxNjEsMjAgQEAgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0fVxuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpXG4tXHRcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuK1x0XHRtdDc2MDF1X21hY19jb25maWdfdHNmKGRldiwgdmlmLCB0cnVlLCBpbmZvLVx1MDAzZWJlYWNvbl9pbnQpO1xuK1xuK1x0aWYgKChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT04pIFx1MDAyNlx1MDAyNiB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcbitcdFx0bXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihkZXYsIHZpZiwgaW5mbyk7XG4rXG4rXHRpZiAoKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbitcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkge1xuK1x0XHRpZiAoaW5mby1cdTAwM2VlbmFibGVfYmVhY29uKVxuK1x0XHRcdG10NzZfc2V0KGRldiwgTVRfQkVBQ09OX1RJTUVfQ0ZHLFxuK1x0XHRcdFx0IE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuK1x0XHRlbHNlXG4rXHRcdFx0bXQ3Nl9jbGVhcihkZXYsIE1UX0JFQUNPTl9USU1FX0NGRyxcbitcdFx0XHRcdCAgIE1UX0JFQUNPTl9USU1FX0NGR19CRUFDT05fVFgpO1xuK1x0fVxuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0hUIHx8IGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVClcbiBcdFx0bXQ3NjAxdV9tYWNfc2V0X3Byb3RlY3Rpb24oZGV2LCBpbmZvLVx1MDAzZXVzZV9jdHNfcHJvdCxcbkBAIC0xODMsNiArMTk2LDQzIEBAIG10NzYwMXVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuIH1cbiBcbitzdGF0aWMgaW50IG10NzYwMXVfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4rXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZilcbit7XG4rXHRzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiA9IGh3LVx1MDAzZXByaXY7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW11dGV4KTtcbitcbitcdC8qIENsZWFyIHRoZSB3Y2lkIFRhYmxlICovXG4rXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgMTI4OyBpKyspXG4rXHRcdG10NzYwMXVfbWFjX3djaWRfc2V0dXAoZGV2LCBpLCAwLCBOVUxMKTtcbitcbitcdC8qIFNldCBwcmUgVEJUVCB0byA2bXMgKi9cbitcdG10NzZfcm13X2ZpZWxkKGRldiwgTVRfSU5UX1RJTUVSX0NGRywgTVRfSU5UX1RJTUVSX0NGR19QUkVfVEJUVCwgNik7XG4rXHRtdDc2X3NldChkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTtcbitcbitcdG10NzYwMXVfbWFjX2NvbmZpZ190c2YoZGV2LCB2aWYsIHRydWUsIGxpbmtfY29uZi1cdTAwM2ViZWFjb25faW50KTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXQ3NjAxdV9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmYpXG4re1xuK1x0c3RydWN0IG10NzYwMXVfZGV2ICpkZXYgPSBody1cdTAwM2Vwcml2O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0bXQ3NjAxdV9tYWNfY29uZmlnX3RzZihkZXYsIHZpZiwgZmFsc2UsIDApO1xuK1xuK1x0bXQ3Nl9jbGVhcihkZXYsIE1UX0lOVF9USU1FUl9FTiwgTVRfSU5UX1RJTUVSX0VOX1BSRV9UQlRUX0VOKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuK31cbitcbiBzdGF0aWMgaW50XG4gbXQ3Nl93Y2lkX2FsbG9jKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxuIHtcbkBAIC00MTksNiArNDY5LDggQEAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3NjAxdV9vcHMgPSB7XG4gXHQuY29uZmlnID0gbXQ3NjAxdV9jb25maWcsXG4gXHQuY29uZmlndXJlX2ZpbHRlciA9IG10NzZfY29uZmlndXJlX2ZpbHRlcixcbiBcdC5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkLFxuK1x0LnN0YXJ0X2FwID0gbXQ3NjAxdV9zdGFydF9hcCxcbitcdC5zdG9wX2FwID0gbXQ3NjAxdV9zdG9wX2FwLFxuIFx0LnN0YV9hZGQgPSBtdDc2MDF1X3N0YV9hZGQsXG4gXHQuc3RhX3JlbW92ZSA9IG10NzYwMXVfc3RhX3JlbW92ZSxcbiBcdC5zdGFfbm90aWZ5ID0gbXQ3NjAxdV9zdGFfbm90aWZ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbXQ3NjAxdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcbmluZGV4IDExOGQ0MzcwNzg1MzcuLjczNjZlMWM0NzYzMzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmhcbkBAIC0zNTksNyArMzU5LDggQEAgdm9pZCBtdDc2MDF1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gdm9pZCBtdDc2MDF1X21hY19zZXRfcHJvdGVjdGlvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBsZWdhY3lfcHJvdCxcbiBcdFx0XHRcdGludCBodF9tb2RlKTtcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBzaG9ydF9wcmVhbWIpO1xuLXZvaWQgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgYm9vbCBlbmFibGUsIGludCBpbnRlcnZhbCk7XG4rdm9pZCBtdDc2MDF1X21hY19jb25maWdfdHNmKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdCAgICBib29sIGVuYWJsZSwgaW50IGludGVydmFsKTtcbiB2b2lkXG4gbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggaWR4LCB1OCB2aWZfaWR4LCB1OCAqbWFjKTtcbiB2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xuaW5kZXggNWFlZWFjMGRkOWZlNy4uNDdjNzhjNGZmNTE0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdHguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS90eC5jXG5AQCAtMjcsNiArMjcsMTQgQEAgc3RhdGljIHU4IHEyaHdxKHU4IHEpXG4gc3RhdGljIHU4IHNrYjJxKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHFpZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuK1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1xuK1x0aWYgKGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuK1x0ICAgIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkge1xuK1x0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBNVF9UWFFfVk8pO1xuK1x0XHRyZXR1cm4gcTJod3EoTVRfVFhRX1ZPKTtcbitcdH1cbiBcbiBcdGlmIChXQVJOX09OKHFpZCBcdTAwM2U9IE1UX1RYUV9QU0QpKSB7XG4gXHRcdHFpZCA9IE1UX1RYUV9CRTtcbkBAIC0xMzQsNiArMTQyLDkgQEAgbXQ3NjAxdV9wdXNoX3R4d2koc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSBcdTAwMjZpbmZvLVx1MDAzZWNvbnRyb2wucmF0ZXNbMF07XG4gXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0Ym9vbCBpc19tZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpO1xuK1x0Ym9vbCBpc19tY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cdTAwM2VhZGRyMSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBpc19wcm9iZTtcbiBcdHUzMiBwa3RfaWQ7XG5AQCAtMTQ4LDE0ICsxNTksMTQgQEAgbXQ3NjAxdV9wdXNoX3R4d2koc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICAgaW5mby1cdTAwM2Vjb250cm9sLnJhdGVzLCAxKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAocmF0ZS1cdTAwM2VpZHggXHUwMDNjIDAgfHwgIXJhdGUtXHUwMDNlY291bnQpXG4rXHRpZiAoIWlzX21nbXQgXHUwMDI2XHUwMDI2IChyYXRlLVx1MDAzZWlkeCBcdTAwM2MgMCB8fCAhcmF0ZS1cdTAwM2Vjb3VudCkpXG4gXHRcdHJhdGVfY3RsID0gd2NpZC1cdTAwM2V0eF9yYXRlO1xuIFx0ZWxzZVxuIFx0XHRyYXRlX2N0bCA9IG10NzZfbWFjX3R4X3JhdGVfdmFsKGRldiwgcmF0ZSwgXHUwMDI2bnNzKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHR4d2ktXHUwMDNlcmF0ZV9jdGwgPSBjcHVfdG9fbGUxNihyYXRlX2N0bCk7XG4gXG4tXHRpZiAoIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpXG4rXHRpZiAoIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgXHUwMDI2XHUwMDI2IHN0YSBcdTAwMjZcdTAwMjYgIWlzX21jYXN0KVxuIFx0XHR0eHdpLVx1MDAzZWFja19jdGwgfD0gTVRfVFhXSV9BQ0tfQ1RMX1JFUTtcbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpXG4gXHRcdHR4d2ktXHUwMDNlYWNrX2N0bCB8PSBNVF9UWFdJX0FDS19DVExfTlNFUTtcbkBAIC0xOTcsNiArMjA4LDggQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXG4gXHRzdHJ1Y3QgbXQ3Nl9zdGEgKm1zdGEgPSBOVUxMO1xuIFx0c3RydWN0IG10NzZfd2NpZCAqd2NpZCA9IGRldi1cdTAwM2Vtb25fd2NpZDtcbiBcdHN0cnVjdCBtdDc2X3R4d2kgKnR4d2k7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4rXHRib29sIGlzX21jYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLVx1MDAzZWFkZHIxKTtcbiBcdGludCBwa3RfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGludCBod19xID0gc2tiMnEoc2tiKTtcbiBcbkBAIC0yMTEsNyArMjI0LDcgQEAgdm9pZCBtdDc2MDF1X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXG4gXHRpZiAoc3RhKSB7XG4gXHRcdG1zdGEgPSAoc3RydWN0IG10NzZfc3RhICopIHN0YS1cdTAwM2VkcnZfcHJpdjtcbiBcdFx0d2NpZCA9IFx1MDAyNm1zdGEtXHUwMDNld2NpZDtcbi1cdH0gZWxzZSBpZiAodmlmKSB7XG4rXHR9IGVsc2UgaWYgKHZpZiBcdTAwMjZcdTAwMjYgaXNfbWNhc3QpIHtcbiBcdFx0c3RydWN0IG10NzZfdmlmICptdmlmID0gKHN0cnVjdCBtdDc2X3ZpZiAqKXZpZi1cdTAwM2VkcnZfcHJpdjtcbiBcbiBcdFx0d2NpZCA9IFx1MDAyNm12aWYtXHUwMDNlZ3JvdXBfd2NpZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjM1LjA1OTI5ODY5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU4MzEzNjI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzYwMVUgRHJpdmVyIFBhdGNoIGZvciBNdWx0aS1JbnRlcmZhY2UgU3VwcG9ydCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgZW5oYW5jaW5nIHRoZSBgbXQ3NjAxdWAgZHJpdmVyIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyBsaWtlIEFQLCBNZXNoLCBQMlAsIEFkaG9jLCBhbmQgU3RhdGlvbiBtb2Rlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IHN0ZXAsIGV4cGFuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZHJpdmVyIGNvbnNpZGVyYWJseS4gTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczpcblxuRmlyc3QsIGluIGBpbml0LmNgLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBpZl9saW1pdHNgIGFuZCBgaWZfY29tYmAgaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZmxleGlibGUgYXJjaGl0ZWN0dXJlIGNhcGFibGUgb2YgbWFuYWdpbmcgbXVsdGlwbGUgY29uY3VycmVudCBpbnRlcmZhY2VzLCBhbmQgaXQncyBhbHNvIHNldHRpbmcgbmVjZXNzYXJ5IGludGVyZmFjZSBtb2Rlcy4gU2V0dGluZyBgTkVFRFNfVU5JUVVFX1NUQV9BRERSYCBpbiB0aGUgaGFyZHdhcmUgaGludHMgYXQgdGhlIGRyaXZlcidzIGNhcGFiaWxpdHkgdG8gaGFuZGxlIHVuaXF1ZSBNQUMgYWRkcmVzc2VzIGZvciBzdGF0aW9ucyBpbiBkaWZmZXJlbnQgbW9kZXMuXG5cbk1vdmluZyB0byBgbWFjLmNgLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbXQ3Nl9tYWNfdHhfcmF0ZV92YWxgIGFyZSBzdHJhaWdodGZvcndhcmQg4oCTIGFkZHJlc3NpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUga2V5IGhlcmUsIHRob3VnaCwgaXMgdGhlIGNoYW5nZSB0byBgbXQ3NjAxdV9tYWNfY29uZmlnX3RzZmAuIEl0J3Mgbm93IHRha2luZyBhIGBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmYCB3aGljaCBpcyBjcnVjaWFsLCBiZWNhdXNlIHRoaXMgY2hhbmdlLCBjb3VwbGVkIHdpdGggdGhlIGFkZGl0aW9ucyBpbiBgbWFpbi5jYCBhbGxvd3MgbWUgdG8gY29uZmlndXJlIFRTRiAoVGltZXN0YW1wIGNvdW50ZXIpIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBpbnRlcmZhY2UgdHlwZSAoQVAsIEFkLUhvYywgb3IgU3RhdGlvbikuIFRoZSBuZXcgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nOyBpdCBhbGxvY2F0ZXMgYW4gU0tCIGZvciB0aGUgYmVhY29uLCBwdXNoZXMgYSBgc3RydWN0IG10NzZfdHh3aWAgaGVhZGVyLCBpbml0aWFsaXplcyBpdCwgYW5kIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBkZXZpY2UgdXNpbmcgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AuXG5cbkluIGBtYWluLmNgLCB0aGUgdXBkYXRlcyB0byBgbXQ3NjAxdV9ic3NfaW5mb19jaGFuZ2VkYCBhcmUgY3JpdGljYWwuIENhbGxpbmcgYG10NzYwMXVfbWFjX2NvbmZpZ190c2ZgIHdpdGggYHZpZmAgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIG5ldyBoYW5kbGluZyBmb3IgYEJTU19DSEFOR0VEX0JFQUNPTmAgYW5kIGBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRGAgaXMgZXhwZWN0ZWQgYW5kIHJlcXVpcmVkIGZvciBtYW5hZ2luZyB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbi4gQWRkaW5nIGBtdDc2MDF1X3N0YXJ0X2FwYCBhbmQgYG10NzYwMXVfc3RvcF9hcGAgdG8gYGllZWU4MDIxMV9vcHNgIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZW50cnkgcG9pbnRzIGZvciBBUCBtYW5hZ2VtZW50LCB3aGljaCB3aWxsIGJlIGVzc2VudGlhbC5cblxuRmluYWxseSwgYHR4LmNgIGhhcyBjaGFuZ2VzIGNlbnRlcmVkIGFyb3VuZCBmcmFtZSBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWUgbWFuYWdlbWVudC4gVGhlIG1vZGlmaWNhdGlvbiB0byBgc2tiMnFgIGZvciBtYW5hZ2VtZW50IGFuZCBpbmplY3RlZCBmcmFtZXMgbWFrZXMgc2Vuc2UgZm9yIFFvUy4gYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYG10NzYwMXVfdHhgIGhhdmUgdGhlIHJpZ2h0IGNoZWNrcyBmb3IgbXVsdGljYXN0cyBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2QgZXhwZWN0IHRvIHNlZS5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGFzIGl0IGNvbmNlcm5zIG1lIGhlcmUsIEkgd2FudCB0byBhc3Nlc3MgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgcHJldHR5IGNsZWFuLiBUaGUgYHR4d2lgIGlzIGRlZmluaXRlbHkgemVyb2VkLiBUaGUgZGF0YSB3cml0dGVuIHZpYSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBvcmlnaW5hdGVzIGZyb20gYHNrYmAuIGBpZWVlODAyMTFfYmVhY29uX2dldCgpYCBpcyB1c2VkLCBhbmQgdGhlIGJlYWNvbiBpcyBidWlsdCBieSBtYWM4MDIxMS4gV2hhdCdzIGNvbmNlcm5pbmcgaXMgdGhhdCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyB0byBVU0IgZG9lc24ndCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdGhlIGhhcmR3YXJlLiBLTVNBTiB3b3VsZG4ndCBjb21wbGFpbiBhYm91dCBkYXRhIGJlaW5nIHNlbnQgdG8gaGFyZHdhcmUgdmlhIGEgVVNCIHNpbmNlIGl0IGNhbid0IGRldGVjdCBpdCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCB3cml0ZXMgdG8gVVNCIGRpcmVjdGx5LCBzbyBJIHdhbnQgdG8ga25vdyBpZiBpdCB1c2VzIERNQS4gSSBzaG91bGQgY2hlY2sgdGhhdCBmdW5jdGlvbiB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjQ2LjY0MjQzOTY4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MDIxMzg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmM9MTkxPXN0YXRpYyBpbnQgbXQ3NjAxdV9pbml0X3djaWRfbWVtKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jOjIwNTpcXHRyZXQgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9XQ0lEX0FERFJfQkFTRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMDYtXFx0XFx0XFx0XFx0ICAgICAgIHZhbHMsIE5fV0NJRFMgKiAyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jPTIxMj1zdGF0aWMgaW50IG10NzYwMXVfaW5pdF9rZXlfbWVtKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jOjIxNjpcXHRyZXR1cm4gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgTVRfU0tFWV9NT0RFX0JBU0VfMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYy0yMTctXFx0XFx0XFx0XFx0XFx0dmFscywgQVJSQVlfU0laRSh2YWxzKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYz0yMjA9c3RhdGljIGludCBtdDc2MDF1X2luaXRfd2NpZF9hdHRyX21lbShzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvaW5pdC5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2luaXQuYzoyMzI6XFx0cmV0ID0gbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgTVRfV0NJRF9BVFRSX0JBU0UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9pbml0LmMtMjMzLVxcdFxcdFxcdFxcdCAgICAgICB2YWxzLCBOX1dDSURTICogMik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDQxLVxcdHdvcmRzID0gRElWX1JPVU5EX1VQKHNrYi1cXHUwMDNlbGVuLCA0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQ0MjpcXHRlcnIgPSBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBNVF9CRUFDT05fQkFTRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQ0My1cXHRcXHRcXHRcXHQgICAgICAgKGNvbnN0IHUzMiAqKXNrYi1cXHUwMDNlZGF0YSwgd29yZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMTA9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjM5OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNDAtXFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyNjQ6XFx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIG9mZnNldCArIGNudCAqIDQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNjUtXFx0XFx0XFx0XFx0XFx0ZGF0YSArIGNudCwgbiAtIGNudCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaD0zMjY9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zMjctXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBtdDc2X3JlZ19wYWlyICpkYXRhLCBpbnQgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaDozMjg6aW50IG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIG9mZnNldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zMjktXFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvdXNiLmM9MjEzPXZvaWQgbXQ3NjAxdV93cl9jb3B5KHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYy0yMTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS91c2IuYzoyMTk6XFx0bXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKGRldiwgb2Zmc2V0LCBkYXRhLCBsZW4gLyA0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L3VzYi5jLTIyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjQ4LjkxMjY1OTM5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc4OTM2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGJ1cnN0IHdyaXRlIG9wZXJhdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCB3aXRoaW4gdGhlIGBtY3UuY2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBmdW5jdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSwgb3IgcGVyaGFwcyB3aGVyZSB0aGV5J3JlIGhhbmRsaW5nIHNvbWUgcXVpcmt5IGhhcmR3YXJlIGJlaGF2aW9yIHRoYXQgbmVlZHMgYSBjbG9zZXIgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHRoZSByZWdpc3RlciB3cml0ZXMuIElzIGl0IG9wdGltaXplZD8gQXJlIHRoZXkgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBvciBkYXRhIGJ1ZmZlciBpc3N1ZXM/IEknbGwgcHJvYmFibHkgbG9vayBmb3IgcG90ZW50aWFsIGludGVycnVwdCBkaXNhYmxpbmcsIGNhY2hlIGZsdXNoaW5nLCBvciBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgY29tbW9ubHkgbmVlZGVkIHdpdGggYnVyc3Qgd3JpdGVzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjkzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTA6NTEuOTkxNTk3ODUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTIyMTA3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0yMTA9aW50IG10NzYwMXVfd3JpdGVfcmVnX3BhaXJzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MjM5OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNDAtXFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg9MzI2PWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3Nl9yZWdfcGFpciAqZGF0YSwgaW50IGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg6MzI4OmludCBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3Moc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1LmgtMzI5LVxcdFxcdFxcdCAgICAgY29uc3QgdTMyICpkYXRhLCBpbnQgbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjU0LjExMzcxMTk1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUxOTQyODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBjb2RlIHJlZmVyZW5jZTpcblxuKipEaXZpbmcgaW50byBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhhdCBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBmdW5jdGlvbiB3aXRoaW4gYG1jdS5jYC4gSSdtIGd1ZXNzaW5nIHRoaXMgaGFuZGxlcyB0aGUgbG93LWxldmVsIGJ1cnN0IHJlZ2lzdGVyIHdyaXRpbmcgZm9yIHRoZSBNVDc2MDFVIGNoaXBzZXQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgdGhlIGRldmljZS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGFkZHJlc3Npbmcgc2NoZW1lLCB0aGUgZGF0YSBmb3JtYXQgaXQgZXhwZWN0cywgYW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMgaXTigJlzIHRhcmdldGluZy4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgb3B0aW1pemluZyB0aGUgd3JpdGUgcHJvY2VzcywgbWF5YmUgYnkgZ3JvdXBpbmcgd3JpdGVzIHRvIHJlZHVjZSBvdmVyaGVhZCwgdG8gZW5zdXJlIGVmZmljaWVuY3kuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBpdCdzIHVzaW5nIChsaWtlbHkgVVNCIG9yIFNQSSwgZ2l2ZW4gdGhlIGNvbnRleHQpIGFuZCB3aGV0aGVyIGl0IG1hbmFnZXMgYW55IGRhdGEgYnVmZmVyaW5nIG9yIGVycm9yIGNoZWNraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIE1UNzYwMVUgZHJpdmVyIGFyY2hpdGVjdHVyZSB0b28sIHdoZXJlIGRvZXMgdGhpcyBmaXQ/IFdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gb2YgZ2V0dGluZyB0aGlzIGNoaXBzZXQgb3BlcmF0aW5nLCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gYXQgYSB2ZXJ5IGdyYW51bGFyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUwOjU3Ljg2NTY1NzkzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzOTpcXHRpbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxcbiAyNDA6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB1MzIgKmRhdGEsIGludCBuKVxcbiAyNDE6XFx0e1xcbiAyNDI6XFx0XFx0Y29uc3QgaW50IG1heF9yZWdzX3Blcl9jbWQgPSBJTkJBTkRfUEFDS0VUX01BWF9MRU4gLyA0IC0gMTtcXG4gMjQzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDI0NDpcXHRcXHRpbnQgY250LCBpLCByZXQ7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGlmICghbilcXG4gMjQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRjbnQgPSBtaW4obWF4X3JlZ3NfcGVyX2NtZCwgbik7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdHNrYiA9IGFsbG9jX3NrYihjbnQgKiA0ICsgTVRfRE1BX0hEUl9MRU4gKyA0LCBHRlBfS0VSTkVMKTtcXG4gMjUyOlxcdFxcdGlmICghc2tiKVxcbiAyNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI1NDpcXHRcXHRza2JfcmVzZXJ2ZShza2IsIE1UX0RNQV9IRFJfTEVOKTtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0c2tiX3B1dF9sZTMyKHNrYiwgTVRfTUNVX01FTU1BUF9XTEFOICsgb2Zmc2V0KTtcXG4gMjU3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKylcXG4gMjU4OlxcdFxcdFxcdHNrYl9wdXRfbGUzMihza2IsIGRhdGFbaV0pO1xcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHRyZXQgPSBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0JVUlNUX1dSSVRFLCBjbnQgPT0gbik7XFxuIDI2MTpcXHRcXHRpZiAocmV0KVxcbiAyNjI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0cmV0dXJuIG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncyhkZXYsIG9mZnNldCArIGNudCAqIDQsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHRcXHRkYXRhICsgY250LCBuIC0gY250KTtcXG4gMjY2OlxcdH1cXG4gMjY3OlxcdFxcbiAyNjg6XFx0c3RydWN0IG10NzZfZndfaGVhZGVyIHtcXG4gMjY5OlxcdFxcdF9fbGUzMiBpbG1fbGVuO1xcbiAyNzA6XFx0XFx0X19sZTMyIGRsbV9sZW47XFxuIDI3MTpcXHRcXHRfX2xlMTYgYnVpbGRfdmVyO1xcbiAyNzI6XFx0XFx0X19sZTE2IGZ3X3ZlcjtcXG4gMjczOlxcdFxcdHU4IHBhZFs0XTtcXG4gMjc0OlxcdFxcdGNoYXIgYnVpbGRfdGltZVsxNl07XFxuIDI3NTpcXHR9O1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRzdHJ1Y3QgbXQ3Nl9mdyB7XFxuIDI3ODpcXHRcXHRzdHJ1Y3QgbXQ3Nl9md19oZWFkZXIgaGRyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MDo1Ny44NjU3MzM3ODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NDI2MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCZWFjb24gRnJhbWUgSW50ZWdyaXR5IGluIE1UNzYwMVUgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBiZWFjb24gZnJhbWVzIGFyZSBoYW5kbGVkIGluIHRoZSBNVDc2MDFVIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgdGhlbSB0byB0aGUgaGFyZHdhcmUuIEl0IHNlZW1zIHRoYXQgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB0YWtpbmcgdGhlIGJlYWNvbiBkYXRhLCBjb3B5aW5nIGl0IGludG8gYSBuZXcgU0tCLCBhbmQgdGhlbiB0cmFuc21pdHRpbmcgaXQgdXNpbmcgYG10NzYwMXVfbWN1X21zZ19zZW5kYC4gVGhlIGRhdGEgaXRzZWxmIG9yaWdpbmF0ZXMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdpdGhpbiB0aGUgYG10NzYwMXVfbWFjX3NldF9iZWFjb25gIGZ1bmN0aW9uLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgc3RhcnRpbmcgdG8gcmluZy4gIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgNC1ieXRlIHdvcmRzIHRvIGJlIHdyaXR0ZW4gdXNpbmcgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgYW5kIEkgYW0gdGhpbmtpbmcgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgYmVhY29uIGRhdGEsIGlzbid0IGEgbXVsdGlwbGUgb2YgNCwgdGhpcyBkaXZpc2lvbiB3aWxsIHJlYWQgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHByb3ZpZGVkIGRhdGEsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBjb25jZXJuaW5nLCBzaW5jZSBpdCBtZWFucyB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2UgZGF0YSB0aGF0IGlzbid0IHBhcnQgb2YgdGhlIGJlYWNvbi5cblxuSSByZWFsbHkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBkaWcgZGVlcGVyLiBUaGUgYHNrYmAgdXNlZCBoZXJlIGlzIHJldHVybmVkIGJ5IGBpZWVlODAyMTFfYmVhY29uX2dldChkZXYtXHUwMDNlaHcsIHZpZiwgMClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIGlzIGFsbG9jYXRpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIGBza2JgIHRvIGRldGVybWluZSB0aGUgdmFsaWRpdHkgb2Ygb3VyIHdyaXRlIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGtub3cgdGhlIGxlbmd0aCBvZiB0aGlzIGBza2JgIGFuZCBob3cgaXRzIGRhdGEgZmllbGQgaXMgbWFuYWdlZC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgbXkgYW5zd2VyLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBpZWVlODAyMTFfYmVhY29uX2dldGAgYW5kIGNoZWNrIHRoYXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBiZWFjb24gZGF0YSBlbnN1cmUgdGhlIHNhZmV0eSBvZiB0aGlzIHdyaXRlIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTowMy4zNDk5OTk0OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzcxNzcxMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2JlYWNvbl9nZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NjYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS84MDIxMS9tYWM4MDIxMS1hZHZhbmNlZC5yc3Q9NzU9c3VwcG9ydCBmb3IgcG93ZXJzYXZpbmcgY2xpZW50c1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpLzgwMjExL21hYzgwMjExLWFkdmFuY2VkLnJzdC04My1cXHRpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpLzgwMjExL21hYzgwMjExLWFkdmFuY2VkLnJzdDo4NDpcXHRpZWVlODAyMTFfYmVhY29uX2dldFxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS84MDIxMS9tYWM4MDIxMS1hZHZhbmNlZC5yc3QtODUtXFx0aWVlZTgwMjExX3N0YV9lb3NwXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTE2NDg9c3RhdGljIGludCBhdGgxMGtfbWFjX3NldHVwX2Jjbl90bXBsKHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtMTY2My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjE2NjQ6XFx0YmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtMTY2NS1cXHRpZiAoIWJjbikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYz0zODQxPXZvaWQgYXRoMTBrX3dtaV9ldmVudF9ob3N0X3N3YmEoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jLTM5MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYzozOTE5OlxcdFxcdGJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGFyLVxcdTAwM2VodywgYXJ2aWYtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYy0zOTIwLVxcdFxcdGlmICghYmNuKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTE1NDY9c3RhdGljIGludCBhdGgxMWtfbWFjX3NldHVwX2Jjbl90bXBsX2VtYShzdHJ1Y3QgYXRoMTFrX3ZpZiAqYXJ2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE1NTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzoxNTU1OlxcdGJlYWNvbnMgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCh0eF9hcnZpZi1cXHUwMDNlYXItXFx1MDAzZWh3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTU1Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgdHhfYXJ2aWYtXFx1MDAzZXZpZiwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTE2MDM9c3RhdGljIGludCBhdGgxMWtfbWFjX3NldHVwX2Jjbl90bXBsX21ic3NpZChzdHJ1Y3QgYXRoMTFrX3ZpZiAqYXJ2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE2MjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzoxNjIxOlxcdGJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKGh3LCB2aWYsIFxcdTAwMjZvZmZzLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTE2MjItXFx0aWYgKCFiY24pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTc1MT1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfYmNuX3RtcGxfZW1hKHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTc2MTpcXHRiZWFjb25zID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGVfZW1hX2xpc3QoYXRoMTJrX2FyX3RvX2h3KHR4X2FydmlmLVxcdTAwM2VhciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNzYyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0eF9hcnZpZi1cXHUwMDNlYWh2aWYtXFx1MDAzZXZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTgwMD1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfYmNuX3RtcGwoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE4MzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxODM1OlxcdGJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKGF0aDEya19hcl90b19odyh0eF9hcnZpZi1cXHUwMDNlYXIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTgzNi1cXHRcXHRcXHRcXHRcXHQgICAgdHhfYXJ2aWYtXFx1MDAzZWFodmlmLVxcdTAwM2V2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jPTE5Mzg9YXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMtMTk0OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jOjE5NTA6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYy0xOTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jPTExMj1zdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aDlrX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYy0xMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jOjEzODpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMtMTM5LVxcdGlmIChza2IgPT0gTlVMTClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTE5MT1zdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjE3LVxcdC8qIEdldCBhIG5ldyBiZWFjb24gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzoyMTg6XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi1cXHUwMDNlaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjE5LVxcdGlmICghYmVhY29uKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYz0xNjE2PWludCBjYXJsOTE3MF91cGRhdGVfYmVhY29uKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCBib29sIHN1Ym1pdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jLTE2MjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmM6MTYzMDpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYXItXFx1MDAzZWh3LCBjYXJsOTE3MF9nZXRfdmlmKGN2aWYpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jLTE2MzEtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvbWFpbi5jPTc5OT1zdGF0aWMgdm9pZCB3Y24zNnh4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTM4LVxcdFxcdFxcdFxcdFxcdCAgICAgICB2aWYtXFx1MDAzZWFkZHIsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmM6OTM5OlxcdFxcdFxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShodywgdmlmLCBcXHUwMDI2dGltX29mZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMtOTQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dGltX2xlbiwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jPTE4MjE9c3RhdGljIHZvaWQgYjQzX3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M193bCAqd2wpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jLTE4MzUtXFx0ICogU2ltcGx5IHJlcXVlc3QgYSBuZXcgYmVhY29uIGFuZCBsZXQgbWFjODAyMTEgZG8gdGhlIGhhcmQgd29yay4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jOjE4MzY6XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod2wtXFx1MDAzZWh3LCB3bC1cXHUwMDNldmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvbWFpbi5jLTE4MzctXFx0aWYgKHVubGlrZWx5KCFiZWFjb24pKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYz0xMjMyPXN0YXRpYyB2b2lkIGI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYy0xMjQzLVxcdCAqIG1hYzgwMjExIGRvIHRoZSBoYXJkIHdvcmsuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYzoxMjQ0OlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVxcdTAwM2Vodywgd2wtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L21haW4uYy0xMjQ1LVxcdGlmICh1bmxpa2VseSghYmVhY29uKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jPTU4NT1icmNtc19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTY4Mi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNndsLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzo2ODM6XFx0XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFxcdTAwMjZ0aW1fb2Zmc2V0LCBOVUxMLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy02ODQtXFx0XFx0YnJjbXNfY19zZXRfbmV3X2JlYWNvbih3bC1cXHUwMDNld2xjLCBiZWFjb24sIHRpbV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYz05NDQ9c3RhdGljIGludCBicmNtc19vcHNfYmVhY29uX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy05NTItXFx0aWYgKHdsLVxcdTAwM2V3bGMtXFx1MDAzZXZpZilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzo5NTM6XFx0XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB3bC1cXHUwMDNld2xjLVxcdTAwM2V2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtOTU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnRpbV9vZmZzZXQsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmM9NTI1Mj1pbF9iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsZWdhY3kvY29tbW9uLmMtNTI1Ni1cXHRfX2xlNjQgdGltZXN0YW1wO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bGVnYWN5L2NvbW1vbi5jOjUyNTc6XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bGVnYWN5L2NvbW1vbi5jLTUyNTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjY0PXN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yODYtXFx0LyogUHVsbCB1cGRhdGVkIEFQIGJlYWNvbiBmcm9tIG1hYzgwMjExLiB3aWxsIGZhaWwgaWYgbm90IGluIEFQIG1vZGUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6Mjg3OlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXFx1MDAzZWh3LCBwcml2LVxcdTAwM2ViZWFjb25fY3R4LVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yODgtXFx0aWYgKCFiZWFjb24pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4b24uYz0xODA9c3RhdGljIGludCBpd2xhZ25fdXBkYXRlX2JlYWNvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeG9uLmMtMTg1LVxcdGRldl9rZnJlZV9za2IocHJpdi1cXHUwMDNlYmVhY29uX3NrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jOjE4NjpcXHRwcml2LVxcdTAwM2ViZWFjb25fc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi1cXHUwMDNlaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnhvbi5jLTE4Ny1cXHRpZiAoIXByaXYtXFx1MDAzZWJlYWNvbl9za2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jPTE1ND1pbnQgaXdsX21sZF91cGRhdGVfYmVhY29uX3RlbXBsYXRlKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jLTE3OC0jZW5kaWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hcC5jOjE3OTpcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtbGQtXFx1MDAzZWh3LCB2aWYsIE5VTEwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYXAuYy0xODAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpbmtfY29uZi1cXHUwMDNlbGlua19pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmM9Njg3PV9pd2xfZGJnZnNfaW5qZWN0X2JlYWNvbl9pZShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZGVidWdmcy5jLTcxNy1cXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmM6NzE4OlxcdFxcdFxcdGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKG1sZC1cXHUwMDNlaHcsIHZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kZWJ1Z2ZzLmMtNzE5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwsIGxpbmtfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jPTEzMDk9c3RhdGljIGludCBfaXdsX2RiZ2ZzX2luamVjdF9iZWFjb25faWUoc3RydWN0IGl3bF9tdm0gKm12bSwgY2hhciAqYmluLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jLTEzNDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZGVidWdmcy5jOjEzNTA6XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobXZtLVxcdTAwM2VodywgdmlmLCBOVUxMLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kZWJ1Z2ZzLmMtMTM1MS1cXHRpZiAoIWJlYWNvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM9MTE4MD1pbnQgaXdsX212bV9tYWNfY3R4dF9iZWFjb25fY2hhbmdlZChzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xMTg5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTE5MDpcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdm0tXFx1MDAzZWh3LCB2aWYsIE5VTEwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xMTkxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5rX2NvbmYtXFx1MDAzZWxpbmtfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L21haW4uYz0xMzU9c3RhdGljIGludCBwNTRfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTQxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmM6MTQyOlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXFx1MDAzZWh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9tYWluLmMtMTQzLVxcdGlmICghYmVhY29uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmM9NDE3PXN0YXRpYyB2b2lkIGxidGZfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jLTQyOS1cXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmM6NDMwOlxcdFxcdFxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jLTQzMS1cXHRcXHRcXHRpZiAoYmVhY29uKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYz02Nzk9dm9pZCBsYnRmX2Jjbl9zZW50KHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzX3RmL21haW4uYy02OTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhc190Zi9tYWluLmM6Njk5OlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtXFx1MDAzZWh3LCBwcml2LVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXNfdGYvbWFpbi5jLTcwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsOGsuYz01MTgyPW13bDhrX2Jzc19pbmZvX2NoYW5nZWRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmMtNTIyMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmM6NTIyMTpcXHRcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bDhrLmMtNTIyMi1cXHRcXHRpZiAoc2tiICE9IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jPTMwPW10NzYwM191cGRhdGVfYmVhY29uX2l0ZXIodm9pZCAqcHJpdiwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jLTQxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL2JlYWNvbi5jOjQyOlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG10NzZfaHcoZGV2KSwgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9iZWFjb24uYy00My1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTY2Nz1tdDc2MTVfbWN1X2FkZF9iZWFjb25fb2ZmbG9hZChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtNzAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjcwMTpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShodywgdmlmLCBcXHUwMDI2b2ZmcywgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtNzAyLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MTAzNz1tdDc2MTVfbWN1X3VuaV9hZGRfYmVhY29uX29mZmxvYWQoc3RydWN0IG10NzYxNV9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEwODItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTA4MzpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdDc2X2h3KGRldiksIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEwODQtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MDJfYmVhY29uLmM9MTM3PW10NzZ4MDJfdXBkYXRlX2JlYWNvbl9pdGVyKHZvaWQgKnByaXYsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MDJfYmVhY29uLmMtMTQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYzoxNDc6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobXQ3Nl9odyhkZXYpLCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl9iZWFjb24uYy0xNDgtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yMDU3PWludCBtdDc5MTVfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0yMDg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjIwODY6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTIwODctXFx0aWYgKCFza2IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTEyNTA9bXQ3OTIxX21jdV91bmlfYWRkX2JlYWNvbl9vZmZsb2FkKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMjk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjEyOTk6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUobXQ3Nl9odyhkZXYpLCB2aWYsIFxcdTAwMjZvZmZzLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzAwLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MjM4Mj1tdDc5MjVfbWN1X3VuaV9hZGRfYmVhY29uX29mZmxvYWQoc3RydWN0IG10NzkyeF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTI0MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MjQzMjpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZShtdDc2X2h3KGRldiksIHZpZiwgXFx1MDAyNm9mZnMsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTI0MzMtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYz0zMTYzPWludCBtdDc5OTZfbWN1X2FkZF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy0zMTkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjMxOTE6XFx0c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoaHcsIHZpZiwgXFx1MDAyNm9mZnMsIGxpbmtfY29uZi1cXHUwMDNlbGlua19pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtMzE5Mi1cXHRpZiAoZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiAhc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jPTQxNz1pbnQgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbihzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmMtNDE5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjQyMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jLTQyMS1cXHRzdHJ1Y3QgbXQ3Nl90eHdpICp0eHdpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz00NDg9c3RhdGljIHZvaWQgbW04MXhfbWFjX2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtNDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6NDcyOlxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1vcnMtXFx1MDAzZWh3LCB2aWYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTQ3My1cXHRpZiAoIWJlYWNvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYz0xMTU9aW50IHBsZnhsY19yZXN0b3JlX3NldHRpbmdzKHN0cnVjdCBwbGZ4bGNfbWFjICptYWMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMTI4LVxcdGlmIChtYWMtXFx1MDAzZXZpZikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzoxMjk6XFx0XFx0YmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQobWFjLVxcdTAwM2VodywgbWFjLVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy0xMzAtXFx0XFx0aWYgKGJlYWNvbikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTU4MD1zdGF0aWMgdm9pZCBwbGZ4bGNfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy01OTYtXFx0aWYgKGNoYW5nZXMgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CRUFDT04pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6NTk3OlxcdFxcdHN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtNTk4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jPTc0Mz1pbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL3J0MngwMC9ydDJ4MDBxdWV1ZS5jLTc1Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvcnQyeDAwL3J0MngwMHF1ZXVlLmM6NzU4OlxcdGludGYtXFx1MDAzZWJlYWNvbi1cXHUwMDNlc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocnQyeDAwZGV2LVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvcnQyeDAwL3J0MngwMHF1ZXVlLmMtNzU5LVxcdGlmICghaW50Zi1cXHUwMDNlYmVhY29uLVxcdTAwM2Vza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4MC9kZXYuYz0xMjgzPXN0YXRpYyB2b2lkIHJ0bDgxODBfYmVhY29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmMtMTI5Ny1cXHQvKiBncmFiIGEgZnJlc2ggYmVhY29uICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmM6MTI5ODpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODAvZGV2LmMtMTI5OS1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jPTEwNzU9c3RhdGljIHZvaWQgcnRsODE4N19iZWFjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYy0xMDg5LVxcdC8qIGdyYWIgYSBmcmVzaCBiZWFjb24gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYzoxMDkwOlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldiwgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYy0xMDkxLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4eHh4dS9jb3JlLmM9NTYxMD1zdGF0aWMgdm9pZCBydGw4eHh4dV9zZW5kX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsOHh4eHUvY29yZS5jLTU2MTMtXFx0c3RydWN0IHJ0bDh4eHh1X3ByaXYgKnByaXYgPSBody1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYzo1NjE0OlxcdHN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L2NvcmUuYy01NjE1LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvY29yZS5jPTk3Nj1zdGF0aWMgdm9pZCBzZW5kX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9jb3JlLmMtOTc5LVxcdHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvY29yZS5jOjk4MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL2NvcmUuYy05ODEtXFx0c3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYz0xMDIxPXN0YXRpYyB2b2lkIF9ydGxfcGNpX3ByZXBhcmVfYmNuX3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3BjaS5jLTEwNTQtXFx0LypOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYzoxMDU1OlxcdHBza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgbWFjLVxcdTAwM2V2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9wY2kuYy0xMDU2LVxcdGlmICghcHNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYz0xMjI2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnR3X2dldF9yc3ZkX3BhZ2Vfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jLTEyNTEtXFx0Y2FzZSBSU1ZEX0JFQUNPTjpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmM6MTI1MjpcXHRcXHRza2JfbmV3ID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGh3LCB2aWYsIFxcdTAwMjZ0aW1fb2Zmc2V0LCBOVUxMLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMtMTI1My1cXHRcXHRyc3ZkX3BrdC1cXHUwMDNldGltX29mZnNldCA9IHRpbV9vZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmM9NDY5OT1pbnQgcnR3ODlfZndfaDJjX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jLTQ3MjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jOjQ3MjQ6XFx0c2tiX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShydHdkZXYtXFx1MDAzZWh3LCB2aWYsIFxcdTAwMjZ0aW1fb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYy00NzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9mdy5jPTQ3Nzk9aW50IHJ0dzg5X2Z3X2gyY191cGRhdGVfYmVhY29uX2JlKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYy00ODAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvZncuYzo0ODAzOlxcdHNrYl9iZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0ocnR3ZGV2LVxcdTAwM2VodywgdmlmLCBcXHUwMDI2dGltX29mZnNldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2Z3LmMtNDgwNC1cXHRcXHRcXHRcXHRcXHQgICAgICBOVUxMLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTQyNT1pbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NDYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDQ3OlxcdG1hY19iY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYWRhcHRlci1cXHUwMDNlaHcsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDQ4LVxcdFxcdFxcdFxcdFxcdCAgIHZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9MzIxPXN0YXRpYyBpbnQgd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMoc3RydWN0IHdmeF92aWYgKnd2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTMyNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jOjMyNjpcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLVxcdTAwM2V3ZGV2LVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTMyNy1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM9MzQwPXN0YXRpYyBpbnQgd2Z4X3NldF9tZnBfYXAoc3RydWN0IHdmeF92aWYgKnd2aWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTM0Mi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd3ZpZl90b192aWYod3ZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYzozNDM6XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHd2aWYtXFx1MDAzZXdkZXYtXFx1MDAzZWh3LCB2aWYsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtMzQ0LVxcdGNvbnN0IGludCBpZW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYz01ODg9c3RhdGljIGludCB3ZnhfdXBkYXRlX3RpbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMtNTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmM6NTk1OlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSh3dmlmLVxcdTAwM2V3ZGV2LVxcdTAwM2VodywgdmlmLCBcXHUwMDI2dGltX29mZnNldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jLTU5Ni1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnRpbV9sZW5ndGgsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jPTE2NjQ9c3RhdGljIGludCBjdzEyMDBfc2V0X3RpbV9pbXBsKHN0cnVjdCBjdzEyMDBfY29tbW9uICpwcml2LCBib29sIGFpZDBfYml0X3NldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0xNjc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYzoxNjc1OlxcdHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVxcdTAwM2VodywgcHJpdi1cXHUwMDNldmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0xNjc2LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dGltX29mZnNldCwgXFx1MDAyNnRpbV9sZW5ndGgsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL3N0YS5jPTIxODk9c3RhdGljIGludCBjdzEyMDBfdXBsb2FkX2JlYWNvbihzdHJ1Y3QgY3cxMjAwX2NvbW1vbiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0yMjA3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYzoyMjA4OlxcdGZyYW1lLnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbShwcml2LVxcdTAwM2VodywgcHJpdi1cXHUwMDNldmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9zdGEuYy0yMjA5LVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRpbV9vZmZzZXQsIFxcdTAwMjZ0aW1fbGVuLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmM9MTA3OD1zdGF0aWMgdm9pZCB3bDEyNTFfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmMtMTE4OS1cXHRpZiAoY2hhbmdlZCBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmM6MTE5MDpcXHRcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jLTExOTEtXFx0XFx0aWYgKCFiZWFjb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jPTQxMTc9c3RhdGljIGludCB3bGNvcmVfc2V0X2JlYWNvbl90ZW1wbGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMtNDEyNS1cXHRpbnQgaWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jOjQxMjY6XFx0c3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHdsLVxcdTAwM2VodywgdmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTQxMjctXFx0dTE2IHRtcGxfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jPTU1NjM9c3RhdGljIGNvbnN0IHZvaWQgKndsY29yZV9nZXRfYmVhY29uX2llKHN0cnVjdCB3bDEyNzEgKndsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL21haW4uYy01NTY4LVxcdHN0cnVjdCBza19idWZmICpiZWFjb24gPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmM6NTU2OTpcXHRcXHRpZWVlODAyMTFfYmVhY29uX2dldCh3bC1cXHUwMDNlaHcsIHdsMTJ4eF93bHZpZl90b192aWYod2x2aWYpLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jLTU1NzAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0yNDU3PXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2JlYWNvbl90eCh2b2lkICphcmcsIHU4ICptYWMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNDg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjI0ODk6XFx0XFx0ZW1hID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGVfZW1hX2xpc3QoaHcsIHZpZiwgbGlua19pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMjQ5MC1cXHRcXHRpZiAoIWVtYSB8fCAhZW1hLVxcdTAwM2VjbnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNDk5LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MjUwMDpcXHRcXHRza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmLCBsaW5rX2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yNTAxLVxcdFxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM9MzU3PWludCB6ZF9yZXN0b3JlX3NldHRpbmdzKHN0cnVjdCB6ZF9tYWMgKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTQwMC1cXHRcXHRpZiAobWFjLVxcdTAwM2V2aWYgIT0gTlVMTCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jOjQwMTpcXHRcXHRcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChtYWMtXFx1MDAzZWh3LCBtYWMtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtNDAyLVxcdFxcdFxcdGlmIChiZWFjb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYz0xMTUxPXN0YXRpYyB2b2lkIHpkX2JlYWNvbl9kb25lKHN0cnVjdCB6ZF9tYWMgKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jLTExNzItXFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM6MTE3MzpcXHRiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChtYWMtXFx1MDAzZWh3LCBtYWMtXFx1MDAzZXZpZiwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTE3NC1cXHRpZiAoYmVhY29uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmM9MTI4MT1zdGF0aWMgdm9pZCB6ZF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTI5NS1cXHRcXHRpZiAoY2hhbmdlcyBcXHUwMDI2IEJTU19DSEFOR0VEX0JFQUNPTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jOjEyOTY6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTI5Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL3pkMTIxMXJ3L3pkX21hYy5jPTE0MzE9c3RhdGljIHZvaWQgYmVhY29uX3dhdGNoZG9nX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvemQxMjExcncvemRfbWFjLmMtMTQ1OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYzoxNDU5OlxcdFxcdGJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KG1hYy1cXHUwMDNlaHcsIG1hYy1cXHUwMDNldmlmLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy96ZDEyMTFydy96ZF9tYWMuYy0xNDYwLVxcdFxcdGlmIChiZWFjb24pIHtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NDA2OD1zdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTQ1OTQtICpcXHRkZWNyZW1lbnRlZCwgYW5kIHdoZW4gdGhleSByZWFjaCAxIHRoZSBkcml2ZXIgbXVzdCBjYWxsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo0NTk1OiAqXFx0aWVlZTgwMjExX2NzYV9maW5pc2goKS4gRHJpdmVycyB3aGljaCB1c2UgaWVlZTgwMjExX2JlYWNvbl9nZXQoKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNDU5Ni0gKlxcdGdldCB0aGUgY3NhIGNvdW50ZXIgZGVjcmVtZW50ZWQgYnkgbWFjODAyMTEsIGJ1dCBtdXN0IGNoZWNrIGlmIGl0IGlzXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU3NTU9c3RydWN0IGllZWU4MDIxMV9tdXRhYmxlX29mZnNldHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzYzLS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTc2NDogKiBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZSAtIGJlYWNvbiB0ZW1wbGF0ZSBnZW5lcmF0aW9uIGZ1bmN0aW9uXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NzY1LSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01Nzg0PXN0cnVjdCBza19idWZmICpcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU3ODU6aWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01Nzg2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU3OTAtLyoqXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NzkxOiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9pbmRleCAtIEVNQSBiZWFjb24gdGVtcGxhdGUgZ2VuZXJhdGlvblxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc5Mi0gKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS5cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTc5OC0gKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTc5OTogKiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMgYXMgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgwMC0gKiBidXQgcmV0dXJucyBhIGJlYWNvbiB0ZW1wbGF0ZSB3aGljaCBpbmNsdWRlcyBtdWx0aXBsZSBCU1NJRCBlbGVtZW50IGF0IHRoZVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODA1PXN0cnVjdCBza19idWZmICpcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4MDY6aWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGVfZW1hX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgwNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODIwPXN0cnVjdCBpZWVlODAyMTFfZW1hX2JlYWNvbnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODI4LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTgyOTogKiBpZWVlODAyMTFfYmVhY29uX2dldF90ZW1wbGF0ZV9lbWFfbGlzdCAtIEVNQSBiZWFjb24gdGVtcGxhdGUgZ2VuZXJhdGlvblxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzMC0gKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS5cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzMy0gKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTgzNDogKiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMgYXMgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVtcGxhdGUoKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTgzNS0gKiBidXQgYWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBsaXN0IG9mIGFsbCBiZWFjb24gdGVtcGxhdGVzIHJlcXVpcmVkXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU4NDQ9c3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODQ1OmllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg0Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg1My0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhIGxpc3QgcHJldmlvdXNseSBhY3F1aXJlZCBieSBjYWxsaW5nXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODU0OiAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlX2VtYV9saXN0KClcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4NTUtICovXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01ODU2PXZvaWQgaWVlZTgwMjExX2JlYWNvbl9mcmVlX2VtYV9saXN0KHN0cnVjdCBpZWVlODAyMTFfZW1hX2JlYWNvbnMgKmVtYV9iZWFjb25zKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTg1OC0vKipcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4NTk6ICogaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIC0gYmVhY29uIGdlbmVyYXRpb24gZnVuY3Rpb25cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4NjAtICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4ODEtICovXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODgyOnN0cnVjdCBza19idWZmICppZWVlODAyMTFfYmVhY29uX2dldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODgzLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODg3LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg4ODogKiBpZWVlODAyMTFfYmVhY29uX2dldCAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODg5LSAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODkzLSAqXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1ODk0OiAqIFNlZSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oKS5cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4OTUtICpcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU4OTY6ICogUmV0dXJuOiBTZWUgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKCkuXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01ODk3LSAqL1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTg5ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYmVhY29uX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU4OTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkwMS17XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1OTAyOlxcdHJldHVybiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oaHcsIHZpZiwgTlVMTCwgTlVMTCwgbGlua19pZCk7XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01OTAzLX1cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTkxMS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbXBsaWNpdGx5IHdoZW5cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU5MTI6ICogaWVlZTgwMjExX2JlYWNvbl9nZXQvaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIGFyZSBjYWxsZWQsIGhvd2V2ZXIgaWYgdGhlXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01OTEzLSAqIGJlYWNvbiBmcmFtZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgZGV2aWNlLCB0aGUgZHJpdmVyIHNob3VsZCBjYWxsIHRoaXNcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NjEyOT1fX2xlMTYgaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTYxNDktICogTm90ZTogYnVmZmVyZWQgZnJhbWVzIGFyZSByZXR1cm5lZCBvbmx5IGFmdGVyIERUSU0gYmVhY29uIGZyYW1lIHdhc1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NjE1MDogKiBnZW5lcmF0ZWQgd2l0aCBpZWVlODAyMTFfYmVhY29uX2dldCgpIGFuZCB0aGUgbG93LWxldmVsIGRyaXZlciBtdXN0IHRodXNcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjYxNTE6ICogY2FsbCBpZWVlODAyMTFfYmVhY29uX2dldCgpIGZpcnN0LiBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKCkgcmV0dXJuc1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNjE1Mi0gKiBOVUxMIGlmIHRoZSBwcmV2aW91cyBnZW5lcmF0ZWQgYmVhY29uIHdhcyBub3QgRFRJTSwgc28gdGhlIGxvdy1sZXZlbCBkcml2ZXJcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NDg9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNTA4LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE1MDk6XFx0Ym9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTUxMC1cXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTUyMDk9c3RhdGljIGludCBpZWVlODAyMTFfYmVhY29uX2FkZF90aW0oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy01MjE3LVxcdCAqIE5vdCB2ZXJ5IG5pY2UsIGJ1dCB3ZSB3YW50IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gY2FsbFxcbm5ldC9tYWM4MDIxMS90eC5jOjUyMTg6XFx0ICogaWVlZTgwMjExX2JlYWNvbl9nZXQoKSBhcyBhIHJlc3BvbnNlIHRvIHRoZSBzZXRfdGltKClcXG5uZXQvbWFjODAyMTEvdHguYy01MjE5LVxcdCAqIGNhbGxiYWNrLiBUaGF0LCBob3dldmVyLCBpcyBhbHJlYWR5IGludm9rZWQgdW5kZXIgdGhlXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz01NTA5PXN0YXRpYyB2b2lkXFxubmV0L21hYzgwMjExL3R4LmM6NTUxMDppZWVlODAyMTFfYmVhY29uX2dldF9maW5pc2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL3R4LmMtNTUxMS1cXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTU1OTU9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQvbWFjODAyMTEvdHguYzo1NTk2Ol9faWVlZTgwMjExX2JlYWNvbl9nZXRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL3R4LmMtNTU5Ny1cXHRcXHRcXHQgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy01NjU4LVxcbm5ldC9tYWM4MDIxMS90eC5jOjU2NTk6XFx0aWVlZTgwMjExX2JlYWNvbl9nZXRfZmluaXNoKGh3LCB2aWYsIGxpbmssIG9mZnMsIGJlYWNvbiwgc2tiLFxcbm5ldC9tYWM4MDIxMS90eC5jLTU2NjAtXFx0XFx0XFx0XFx0ICAgIGNoYW5jdHhfY29uZiwgY3NhX29mZl9iYXNlKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTU2Nzg9aWVlZTgwMjExX3MxZ19zaG9ydF9iZWFjb25fZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNTcwMy1cXG5uZXQvbWFjODAyMTEvdHguYzo1NzA0OlxcdGllZWU4MDIxMV9iZWFjb25fZ2V0X2ZpbmlzaChodywgdmlmLCBsaW5rLCBOVUxMLCBOVUxMLCBza2IsXFxubmV0L21hYzgwMjExL3R4LmMtNTcwNS1cXHRcXHRcXHRcXHQgICAgY2hhbmN0eF9jb25mLCAwKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTU3MDk9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQvbWFjODAyMTEvdHguYzo1NzEwOmllZWU4MDIxMV9iZWFjb25fZ2V0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbm5ldC9tYWM4MDIxMS90eC5jLTU3MTEtXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy01NzIwLVxcdCAgICBpZWVlODAyMTFfczFnX25lZWRfbG9uZ19iZWFjb24oc2RhdGEsIGxpbmspKVxcbm5ldC9tYWM4MDIxMS90eC5jOjU3MjE6XFx0XFx0cmV0dXJuIF9faWVlZTgwMjExX2JlYWNvbl9nZXRfYXAoaHcsIHZpZiwgbGluaywgb2ZmcyxcXG5uZXQvbWFjODAyMTEvdHguYy01NzIyLVxcdFxcdFxcdFxcdFxcdFxcdCBpc190ZW1wbGF0ZSwgYmVhY29uLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NTcyOT1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9lbWFfYmVhY29ucyAqXFxubmV0L21hYzgwMjExL3R4LmM6NTczMDppZWVlODAyMTFfYmVhY29uX2dldF9hcF9lbWFfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5uZXQvbWFjODAyMTEvdHguYy01NzMxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjA1LjIyNzE4NjM1NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTM4MTIyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJlYWNvbiBGcmFtZSBWdWxuZXJhYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYCBmdW5jdGlvbiwgd2hpY2ggc2VlbXMgdG8gaGFuZGxlIHNldHRpbmcgdXAgdGhlIGJlYWNvbiBmcmFtZSBmb3IgdGhpcyBVU0IgV2ktRmkgZG9uZ2xlLiAgSSBjYW4gc2VlIHRoYXQgaXQgdXNlcyBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIHRvIGdyYWIgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIGNvbnRhaW5pbmcgdGhlIGJlYWNvbiBkYXRhLiBUaGUgZ29vZCBuZXdzIGlzLCBhY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnRzLCBtYWM4MDIxMSBmdWxseSBpbml0aWFsaXplcyB0aGF0IGBza2JgLCB3aGljaCBpcyBhIHBsdXMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIEkgc2VlIGEgc2VjdGlvbiB3aGVyZSBpdCBzZWVtcyB0byBhZGQgYSBoZWFkZXIuIFNwZWNpZmljYWxseSwgdGhlcmUncyBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgZW5vdWdoIGhlYWRyb29tIGlzIGF2YWlsYWJsZSwgdGhlbiBgc2tiX3B1c2hgIHRvIG1vdmUgdGhlIGRhdGEgcG9pbnRlciBiYWNrLCBhbmQgYG1lbXNldGAgdG8gaW5pdGlhbGl6ZSB0aGlzIG5ldyBgbXQ3Nl90eHdpYCBoZWFkZXIuIFRoYXQgYWxsIHNlZW1zIHN0YW5kYXJkLCBwdXNoaW5nIHRoZSB0cmFuc21pdCBXaS1GaSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBgc2tiYC4gVGhlbiwgaXQgY2FsY3VsYXRlcyBob3cgbWFueSAzMi1iaXQgd29yZHMgYXJlIGluIHRoZSBgc2tiYCB1c2luZyBgRElWX1JPVU5EX1VQYC4gVGhhdCBjYWxjdWxhdGlvbiBpcyB3aGF0IGdyYWJzIG15IGF0dGVudGlvbi5cblxuSGVyZSdzIHRoZSBwcm9ibGVtOiBpZiB0aGUgb3JpZ2luYWwgYmVhY29uIGRhdGEgKHBsdXMgdGhlIGhlYWRlcikgZG9lc24ndCByZXN1bHQgaW4gYSBsZW5ndGggdGhhdCdzIGEgbXVsdGlwbGUgb2YgNCBieXRlcywgYERJVl9ST1VORF9VUGAgd2lsbCByb3VuZCB1cC4gVGhpcyBtZWFucyB0aGUgYnVyc3Qgd3JpdGUsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgLCB3aWxsIHJlYWQgKnBhc3QqIHRoZSBpbnRlbmRlZCBkYXRhIGFuZCBwb3RlbnRpYWxseSBpbnRvIHRoZSBgc2tiYCdzIHRhaWxyb29tLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0aGlzIGlzIGFuIGlzc3VlLlxuXG5UaGUgYHNrYmAgZGF0YSBpcyBhbiBhcnJheSBvZiBieXRlcy4gYHNrYi1cdTAwM2VsZW5gIHRlbGxzIHVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGluaXRpYWxpemVkIGRhdGEuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYHNrYmAgaGF2ZSB0YWlscm9vbT8gQW5kLCBpZiBzbywgYXJlIHRob3NlIHRhaWxyb29tIGJ5dGVzIGluaXRpYWxpemVkPyBMaWtlbHksIHRoZSB0YWlscm9vbSBleGlzdHMsIGJ1dCB0aGUgYnl0ZXMgbWlnaHQgYmUgdW5pbml0aWFsaXplZC5cblxuSWYgaXQgcmVhZHMgcGFzdCBgc2tiLVx1MDAzZWxlbmAsIHRoaXMgbWVhbnMgaXQncyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAodGhlIGBza2JgIHRhaWxyb29tKSBhbmQgc2VuZGluZyBpdCBvdmVyIFVTQiB0byB0aGUgV2ktRmkgZG9uZ2xlLiBUaGF0J3MgYSBjbGFzc2ljIGluZm8tbGVhay4gVGhpcyBpcyBhIHBvdGVudGlhbCBrZXJuZWwgbWVtb3J5IGxlYWssIGFuIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUgdnVsbmVyYWJpbGl0eSFcblxuQnV0IHRoZW4gSSByZWNhbGwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gS01TQU4gc2hvdWxkIGRldGVjdCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCByZWFkcyBwYXN0IHRoZSBpbml0aWFsaXplZCBkYXRhLCBLTVNBTiAqc2hvdWxkKiBmbGFnIGl0IGFzIGEgdXNlLW9mLXVuaW5pdGlhbGl6ZWQtbWVtb3J5IGVycm9yLlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGtub3cgaG93IGl0IGhhbmRsZXMgdGhlIHdvcmQgY291bnQgYW5kIHRoZSBkYXRhIHBvaW50ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjgxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjE0LjM2NTMxMTI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdFxcdFxcdCAgICAgY29uc3QgdTMyICpkYXRhLCBpbnQgbilcXG4gMjQxOlxcdHtcXG4gMjQyOlxcdFxcdGNvbnN0IGludCBtYXhfcmVnc19wZXJfY21kID0gSU5CQU5EX1BBQ0tFVF9NQVhfTEVOIC8gNCAtIDE7XFxuIDI0MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAyNDQ6XFx0XFx0aW50IGNudCwgaSwgcmV0O1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHRpZiAoIW4pXFxuIDI0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0Y250ID0gbWluKG1heF9yZWdzX3Blcl9jbWQsIG4pO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRza2IgPSBhbGxvY19za2IoY250ICogNCArIE1UX0RNQV9IRFJfTEVOICsgNCwgR0ZQX0tFUk5FTCk7XFxuIDI1MjpcXHRcXHRpZiAoIXNrYilcXG4gMjUzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNTQ6XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBNVF9ETUFfSERSX0xFTik7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdHNrYl9wdXRfbGUzMihza2IsIE1UX01DVV9NRU1NQVBfV0xBTiArIG9mZnNldCk7XFxuIDI1NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspXFxuIDI1ODpcXHRcXHRcXHRza2JfcHV0X2xlMzIoc2tiLCBkYXRhW2ldKTtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xcbiAyNjE6XFx0XFx0aWYgKHJldClcXG4gMjYyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdHJldHVybiBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoZGV2LCBvZmZzZXQgKyBjbnQgKiA0LFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0XFx0ZGF0YSArIGNudCwgbiAtIGNudCk7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdHN0cnVjdCBtdDc2X2Z3X2hlYWRlciB7XFxuIDI2OTpcXHRcXHRfX2xlMzIgaWxtX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTE6MTQuMzY1NDEwOTQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzIxNDA3NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFZ1bG5lcmFiaWxpdHkgaW4gQmVhY29uIEZyYW1lIEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MDF1YCBkcml2ZXIgY29kZSBhbmQgSSB0aGluayBJJ3ZlIGZvdW5kIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlLiBJdCdzIGluIHRoZSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gaXQncyBoYW5kbGluZyB0aGUgYmVhY29uIGZyYW1lIHNldHVwIGluIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC5cblxuV2hhdCdzIGhhcHBlbmluZyBpcyB0aGlzOiB0aGUgY29kZSBpcyBpdGVyYXRpbmcgdGhyb3VnaCBhIGRhdGEgYnVmZmVyIChgZGF0YWApIGFuZCB3cml0aW5nIDMyLWJpdCB2YWx1ZXMgdG8gYSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgdXNpbmcgYHNrYl9wdXRfbGUzMmAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYGRhdGFgIGlzIGVzc2VudGlhbGx5IGEgcG9pbnRlciB0byB0aGUgYHNrYi1cdTAwM2VkYXRhYCwgYW5kIGlmIHRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIGJlYWNvbiBmcmFtZSAoYHNrYi1cdTAwM2VsZW5gKSBpc24ndCBhIG11bHRpcGxlIG9mIDQgYnl0ZXMsIHRoZW4gdGhlIGxhc3QgcmVhZCBvZiBgZGF0YVtpXWAgd2lsbCBiZSByZWFkaW5nIGJ5dGVzIGJleW9uZCB0aGUgaW5pdGlhbGl6ZWQgc2VjdGlvbiBvZiB0aGUgYnVmZmVyLlxuXG5Ob3csIGBza2JgcyBhbGxvY2F0ZWQgYnkgbWFjODAyMTEgdHlwaWNhbGx5IGhhdmUgc29tZSB0YWlscm9vbSwgdGhhdCBpcywgZXh0cmEgYnVmZmVyIHNwYWNlIGFsbG9jYXRlZCBhZnRlciB0aGUgXCJ2YWxpZFwiIGRhdGEuIFNvLCB3aGlsZSB0aGUgcmVhZHMgd291bGQgZmFsbCB3aXRoaW4gYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvbnRlbnRzIG9mIHRoYXQgdGFpbHJvb20gYXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFdoZW4gYHNrYl9wdXRfbGUzMmAgcmVhZHMgdGhlc2UgdW5pbml0aWFsaXplZCBieXRlcyBhbmQgd3JpdGVzIHRoZW0gdG8gdGhlIG5ldyBgc2tiYCwgdGhlIG5ldyBgc2tiYCBpcyBzZW50IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLiBUaGlzIGNyZWF0ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBjb25kaXRpb24uXG5cbkluaXRpYWxseSwgSSB3b25kZXJlZCBpZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB3b3VsZCBjYXRjaCB0aGlzLiBLQVNBTiBjYXRjaGVzIG91dC1vZi1ib3VuZHMgcmVhZHMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIHJlYWQgc3RheXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIChpbmNsdWRpbmcgdGFpbHJvb20pLCBLQVNBTiB3b24ndCBmbGFnIGl0LiBCdXQsIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgdHJhY2tzIGJ5dGUtbGV2ZWwgaW5pdGlhbGl6YXRpb24uIFNpbmNlIHRoZSBieXRlcyBpbiB0aGUgdGFpbHJvb20gYXJlIHVuaW5pdGlhbGl6ZWQsIEtNU0FOIHdpbGwgYWJzb2x1dGVseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBmaW5kLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBza2ItXHUwMDNlbGVuYCBpc24ndCBhbHdheXMgYSBtdWx0aXBsZSBvZiA0OyB0aGUgYmVhY29uIGZyYW1lJ3MgbGVuZ3RoIGRlcGVuZHMgb24gSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgc28gaXQncyBub3QgZ3VhcmFudGVlZC4gVGhlbiwgSSBsb29rZWQgYXQgaG93IGBza2JgIGlzIGFsbG9jYXRlZCB3aXRoIGBza2JfY293X2hlYWRgLiBJIHNlZSBub3cgdGhhdCBgc2tiX2Nvd19oZWFkYCBtaWdodCByZWFsbG9jYXRlIHRoZSBza2IgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIGhlYWRyb29tLiBJZiBpdCByZWFsbG9jYXRlcywgdGhlIG5ld2x5IGFsbG9jYXRlZCBieXRlcyBhcmUgdW5pbml0aWFsaXplZC4gSWYgaXQgZG9lc24ndCByZWFsbG9jYXRlLCB0aGVuIHRoZSB0YWlscm9vbSBpcyBhbHNvIHVuaW5pdGlhbGl6ZWQuIFNvLCByZWFkaW5nIHVwIHRvIGBESVZfUk9VTkRfVVAoc2tiLVx1MDAzZWxlbiwgNCkgKiA0YCBieXRlcyB3aWxsIHJlYWQgMS0zIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkkgYWxzbyBjaGVja2VkIG90aGVyIGZ1bmN0aW9ucy4gSW4gYG10NzYwMXVfbWFjX3NldF9iZWFjb25gLCBpdCBhcHBlYXJzIHRoYXQgdGhlIGB0eHdpYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0YCwgc28gdGhhdCdzIG5vdCBhIHByb2JsZW0uXG5cbkZpbmFsbHksIEkgY2hlY2tlZCBgbXQ3NjAxdV9zdGFydF9hcGAuIEkgbm90aWNlZCBgbXQ3NjAxdV9tYWNfd2NpZF9zZXR1cGAgdGFrZXMgYE5VTExgIGZvciBgbWFjYC4gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IGlzIGhhbmRsZWQgdG8gc2VlIGlmIGFueSBvdGhlciB1bmluaXRpYWxpemVkIGlzc3VlcyBtaWdodCBzdXJmYWNlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEyOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjI0LjY4NjgyMDgwN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjQ0NDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2MDF1X21hY193Y2lkX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFjLmM9Mzc1PXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jOjM3NjptdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWMuYy0zNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MTk5PXN0YXRpYyBpbnQgbXQ3NjAxdV9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTIwOC1cXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIDEyODsgaSsrKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjIwOTpcXHRcXHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaSwgMCwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmMtMjEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MjU5PW10NzYwMXVfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTI3Ny1cXHRtc3RhLVxcdTAwM2V3Y2lkLmh3X2tleV9pZHggPSAtMTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYzoyNzg6XFx0bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChkZXYsIGlkeCwgbXZpZi1cXHUwMDNlaWR4LCBzdGEtXFx1MDAzZWFkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTI3OS1cXHRtdDc2X2NsZWFyKGRldiwgTVRfV0NJRF9EUk9QKGlkeCksIE1UX1dDSURfRFJPUF9NQVNLKGlkeCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tYWluLmM9MjkwPW10NzYwMXVfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jLTMwMC1cXHRkZXYtXFx1MDAzZXdjaWRfbWFza1tpZHggLyBCSVRTX1BFUl9MT05HXSBcXHUwMDI2PSB+QklUKGlkeCAlIEJJVFNfUEVSX0xPTkcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWFpbi5jOjMwMTpcXHRtdDc2MDF1X21hY193Y2lkX3NldHVwKGRldiwgaWR4LCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21haW4uYy0zMDItXFx0bXQ3NjAxdV9tYWNfc2V0X2FtcGR1X2ZhY3RvcihkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tdDc2MDF1Lmg9MzY0PXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaDozNjU6bXQ3NjAxdV9tYWNfd2NpZF9zZXR1cChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggaWR4LCB1OCB2aWZfaWR4LCB1OCAqbWFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L210NzYwMXUuaC0zNjYtdm9pZCBtdDc2MDF1X21hY19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTM6NTE6MjYuNDk5MjcyNDExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg5MTE2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBtdDc2MDF1X21hY193Y2lkX3NldHVwYCBmdW5jdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaG93IHRoaXMgc3BlY2lmaWMgTUFDIChNZWRpYSBBY2Nlc3MgQ29udHJvbGxlcikgc2V0dXAgaXMgaGFuZGxlZCBmb3IgdGhlIE1UNzYwMVUgY2hpcHNldCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHdjaWQgKFdpcmVsZXNzIENsaWVudCBJRCkgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IGFzc29jaWF0aW9ucyBiZXR3ZWVuIGEgc3RhdGlvbiBhbmQgdGhlIGRyaXZlciBhcmUgbWFuYWdlZCBhbmQgaG93IHRoZSBNQUMgaXMgY29uZmlndXJlZCwgcHJvYmFibHkgd2l0aCBzb21lIHJlZ2lzdGVyIHdyaXRlcyB0byBzZXQgdXAga2V5IHNlY3VyaXR5IHBhcmFtZXRlcnMsIGFkZHJlc3MgZmlsdGVycywgYW5kIHRyYW5zbWl0L3JlY2VpdmUgcXVldWUgbWFwcGluZ3MgYmFzZWQgb24gdGhlIHdjaWQuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG51YW5jZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBhcyB0aGUgTVQ3NjAxVSBpcyBhIHNvbWV3aGF0IG9sZGVyIGNoaXBzZXQsIGFuZCBob3cgdGhpcyBjb2RlIGFjY291bnRzIGZvciBwb3RlbnRpYWwgaGFyZHdhcmUgbGltaXRhdGlvbnMgb3IgcGVjdWxpYXJpdGllcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHRha2luZyBhIGRpcmVjdCBhcHByb2FjaCBvciBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGluIGhhbmRsaW5nIHRoZSB2YXJpb3VzIHN0YXRlcyBvZiB0aGUgd2NpZCwgbGlrZSBpbml0aWFsaXppbmcgaXQsIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uLCBhc3NvY2lhdGlvbiwgYW5kIGRhdGEgdHJhbnNmZXIuIEkgd2FudCB0byBzZWUgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgcmVnaXN0ZXJzIGFyZSBiZWluZyB0b3VjaGVkIGFuZCB3aGF0IHRoZSByYXRpb25hbGUgaXMgYmVoaW5kIGVhY2ggb2YgdGhlIHZhbHVlcy4gQWxzbywgSSdsbCBiZSBjaGVja2luZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgd2lyZWxlc3Mgc3RhY2suIEknbSBhc3N1bWluZyBpdCBoYXMgY2xlYXIgZW50cnkgcG9pbnRzIGFuZCBleGl0cywgYW5kIHRoYXQgaXQncyByb2J1c3QgaW4gaGFuZGxpbmcgZXJyb3IgY29uZGl0aW9ucy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBvciBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhpcyBpcyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHdpdGggcGxlbnR5IG9mIG9wcG9ydHVuaXR5IGZvciBzdWJ0bGUgYnVncy4gSSdsbCBtZW50YWxseSBjb21wYXJlIHRoaXMgd2l0aCBzaW1pbGFyIGZ1bmN0aW9ucyBJJ3ZlIGxvb2tlZCBhdCBpbiBvdGhlciBkcml2ZXJzIGFuZCBzZWUgaG93IHRoaXMgbWVhc3VyZXMgdXAgaW4gdGVybXMgb2YgY2xhcml0eSBhbmQgZWZmaWNpZW5jeS4gRmluYWxseSwgSSdsbCBhbHNvIGxvb2sgZm9yIGNvbW1lbnRzLCBhcyB0aGV5IHdpbGwgdW5kb3VidGVkbHkgYmUgdXNlZnVsIHRvIGdldCBhIHByb3BlciBjb250ZXh0IG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcxNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjMwLjYxODE4NjY1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21hYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHR2b2lkXFxuIDM3NjpcXHRtdDc2MDF1X21hY193Y2lkX3NldHVwKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1OCBpZHgsIHU4IHZpZl9pZHgsIHU4ICptYWMpXFxuIDM3NzpcXHR7XFxuIDM3ODpcXHRcXHR1OCB6bWFjW0VUSF9BTEVOXSA9IHt9O1xcbiAzNzk6XFx0XFx0dTMyIGF0dHI7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdGF0dHIgPSBGSUVMRF9QUkVQKE1UX1dDSURfQVRUUl9CU1NfSURYLCB2aWZfaWR4IFxcdTAwMjYgNykgfFxcbiAzODI6XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoTVRfV0NJRF9BVFRSX0JTU19JRFhfRVhULCAhISh2aWZfaWR4IFxcdTAwMjYgOCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdDc2X3dyKGRldiwgTVRfV0NJRF9BVFRSKGlkeCksIGF0dHIpO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRpZiAobWFjKVxcbiAzODc6XFx0XFx0XFx0bWVtY3B5KHptYWMsIG1hYywgc2l6ZW9mKHptYWMpKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0bXQ3NjAxdV9hZGRyX3dyKGRldiwgTVRfV0NJRF9BRERSKGlkeCksIHptYWMpO1xcbiAzOTA6XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHR2b2lkIG10NzYwMXVfbWFjX3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IG10NzYwMXVfZGV2ICpkZXYpXFxuIDM5MzpcXHR7XFxuIDM5NDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTozMC42MTgyODU0OTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0NDU3MTU1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgTGVhayBpbiBCZWFjb24gVHJhbnNtaXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBtdDc2MDF1X21hY193Y2lkX3NldHVwYCBmdW5jdGlvbiBoYW5kbGVzIGBtYWMgPT0gTlVMTGAgY2FzZXMgZ3JhY2VmdWxseSB1c2luZyBhIHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlLiBUaGF0J3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIE5vdywgSSdtIGZvY3VzaW5nIG9uIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uLiBMZXQncyByZXZpc2l0IGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC5cblxuVGhlIGNvcmUgaXNzdWUgaXMgaW4gaG93IHRoZSBiZWFjb24gZnJhbWUgaXMgd3JpdHRlbiB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYC4gVGhlIGNhbGN1bGF0aW9uIGB3b3JkcyA9IERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgaXMga2V5LiBXZSdyZSBkaXZpZGluZyB0aGUgbGVuZ3RoIG9mIHRoZSAqZW50aXJlKiBgc2tiYCAoaW5jbHVkaW5nIHRoZSBgc3RydWN0IG10NzZfdHh3aWAgaGVhZGVyLCB3aGljaCB3ZSBrbm93IGlzIDI0IGJ5dGVzIGFuZCBhIG11bHRpcGxlIG9mIDQpIGJ5IDQgYW5kIHJvdW5kaW5nIHVwLiBUaGUgYmVhY29uIGZyYW1lIGl0c2VsZiBpcyBjb25zdHJ1Y3RlZCBieSBtYWM4MDIxMS4gQ3J1Y2lhbGx5LCB0aGUgbGVuZ3RoIG9mIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcywgZXNwZWNpYWxseSBiZWFjb25zLCBjYW4gYmUgKmFyYml0cmFyeSosIGJlY2F1c2Ugb2YgdGhlIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBmcmFtZS5cblxuVGhlcmVmb3JlLCBgc2tiLVx1MDAzZWxlbmAgaXMgKm5vdCogZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gSWYgaXQncyAqbm90KiBhIG11bHRpcGxlIG9mIDQsIHRoZW4gYHdvcmRzICogNGAgd2lsbCBiZSB1cCB0byBgc2tiLVx1MDAzZWxlbiArIDNgLiBUaGlzIG1lYW5zIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3NgIHJlYWRzIHVwIHRvIDMgYnl0ZXMgYmV5b25kIHRoZSAnZW5kJyBvZiB0aGUgYWN0dWFsIGJlYWNvbiBkYXRhLCB3aGljaCBhcmUgYnl0ZXMgZnJvbSB0aGUgdGFpbHJvb20gb2YgdGhlIGBza2JgLiBUaGUgYHNrYmAgaXMgYWxsb2NhdGVkIGJ5IGBpZWVlODAyMTFfYmVhY29uX2dldGAgYW5kIHVzdWFsbHkgY29udGFpbnMgdGFpbHJvb20uXG5cblRoZSBmdW5jdGlvbiBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzYCByZWFkcyAzMi1iaXQgaW50ZWdlcnMgZnJvbSB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCB0aGUgbGFzdCAzMi1iaXQgcmVhZCB3aWxsIGluY2x1ZGUgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIHRoZSB0YWlscm9vbS4gVGhpcyB1bmluaXRpYWxpemVkIGRhdGEgaXMgdGhlbiBzZW50IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLiBUaGlzIGlzIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgbWVtb3J5IHRvIGEgaGFyZHdhcmUgZGV2aWNlIVxuXG5LTVNBTiAqc2hvdWxkKiBjYXRjaCB0aGlzLCBiZWNhdXNlIGl0IHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gS0FTQU4gKndvbid0KiBkZXRlY3QgdGhpcywgYmVjYXVzZSB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBgc2tiYCBidWZmZXIuXG5cblRoZXJlJ3Mgbm8gcGFkZGluZyBhZGRlZCB0byB0aGUgZGF0YSBiZXR3ZWVuIHRoZSB0eHdpIGFuZCB0aGUgYmVhY29uIGZyYW1lLiBgc2tiX3B1dF9sZTMyYCByZWFkcyBkaXJlY3RseSBmcm9tIHRoZSBgZGF0YVtpXWAuIFNvIGBza2ItXHUwMDNlZGF0YWAgaXMgcmVhZCB1cCB0byBgd29yZHMgKiA0YCBieXRlcy5cblxuU28sIHRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBidWcgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0OiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgYHNrYmAgdGFpbHJvb20pIGFuZCB0cmFuc21pdHRpbmcgaXQgdG8gYSBoYXJkd2FyZSBkZXZpY2UgKHZpYSBVU0IpLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IEtNU0FOIGhhbmRsZXMgVVNCIHRyYW5zZmVycy4gWWVzLCBLTVNBTiBob29rcyBpbnRvIGB1c2Jfc3VibWl0X3VyYmAgdmlhIGBrbXNhbl9oYW5kbGVfdXJiYCBhbmQgY2FuIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyISBBbmQgYG10NzYwMXVfbWN1X21zZ19zZW5kYCBzZW5kcyB0aGUgYHNrYmAgdmlhIFVTQi4gVGhpcyBjb25maXJtcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4gV2UndmUgZ290IGl0LiBUaGlzIGlzIGEgc29saWQgdXNlIGNhc2UgZm9yIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzUwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTo0Mi4wNjQwMDUxMTNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDczOTk4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjAxdV9tY3VfbXNnX3NlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xMDk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MTEwOm10NzYwMXVfbWN1X21zZ19zZW5kKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMTExLVxcdFxcdCAgICAgZW51bSBtY3VfY21kIGNtZCwgYm9vbCB3YWl0X3Jlc3ApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jPTE1NT1zdGF0aWMgaW50IG10NzYwMXVfbWN1X2Z1bmN0aW9uX3NlbGVjdChzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMTY5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM6MTcwOlxcdHJldHVybiBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX0ZVTl9TRVRfT1AsIGZ1bmMgPT0gNSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0xNzEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYz0xOTM9bXQ3NjAxdV9tY3VfY2FsaWJyYXRlKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCBlbnVtIG1jdV9jYWxpYnJhdGUgY2FsLCB1MzIgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yMDYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyMDc6XFx0cmV0dXJuIG10NzYwMXVfbWN1X21zZ19zZW5kKGRldiwgc2tiLCBDTURfQ0FMSUJSQVRJT05fT1AsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjA4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmM9MjEwPWludCBtdDc2MDF1X3dyaXRlX3JlZ19wYWlycyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTMyIGJhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jOjIzMjpcXHRyZXQgPSBtdDc2MDF1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgQ01EX1JBTkRPTV9XUklURSwgY250ID09IG4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjMzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L21jdS5jPTIzOT1pbnQgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKHN0cnVjdCBtdDc2MDF1X2RldiAqZGV2LCB1MzIgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYy0yNTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuYzoyNjA6XFx0cmV0ID0gbXQ3NjAxdV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIENNRF9CVVJTVF9XUklURSwgY250ID09IG4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvbWN1LmMtMjYxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjQzLjgxMTQxMjE1OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMyMTg0MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNVDc2MDFVIE1DVSBNZXNzYWdlIFNlbmRpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZXNzYWdlcyBhcmUgZ2V0dGluZyBzZW50IHRvIHRoZSBNQ1Ugb24gdGhlIE1UNzYwMVUuIExldCdzIHN0YXJ0IHdpdGggYG10NzYwMXVfbWN1X21zZ19zZW5kYC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG1jdS5jYCBmaWxlIGFuZCBwaW5wb2ludCB0aGF0IGZ1bmN0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLCBoYW5kbGluZyBhbnkgYnVmZmVyaW5nLCBhbmQsIGNydWNpYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0Igb3Igd2hhdGV2ZXIgaW50ZXJmYWNlIGlzIHVzZWQgdG8gYWN0dWFsbHkgdHJhbnNtaXQgdGhpcyBkYXRhLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMgb3Igc2VtYXBob3JlcyBmb3Igc3luY2hyb25pemF0aW9uLCBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgaGFyZHdhcmUgcmVnaXN0ZXIgd3JpdGVzIG9yIFVTQiBjYWxscyB0aGF0IGluaXRpYXRlIHRoZSB0cmFuc2Zlci4gVGhpcyBzaG91bGQgYmUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lc3NhZ2UgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxMTcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MTo0Ny4zNDM2MDAwMjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9tY3UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDksXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDk6XFx0c3RhdGljIGludFxcbiAxMTA6XFx0bXQ3NjAxdV9tY3VfbXNnX3NlbmQoc3RydWN0IG10NzYwMXVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDExMTpcXHRcXHRcXHQgICAgIGVudW0gbWN1X2NtZCBjbWQsIGJvb2wgd2FpdF9yZXNwKVxcbiAxMTI6XFx0e1xcbiAxMTM6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBtdDc2MDF1X3RvX3VzYl9kZXYoZGV2KTtcXG4gMTE0OlxcdFxcdHVuc2lnbmVkIGNtZF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsXFxuIDExNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGV2LVxcdTAwM2VvdXRfZXBzW01UX0VQX09VVF9JTkJBTkRfQ01EXSk7XFxuIDExNjpcXHRcXHRpbnQgc2VudCwgcmV0O1xcbiAxMTc6XFx0XFx0dTggc2VxID0gMDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0aWYgKHRlc3RfYml0KE1UNzYwMVVfU1RBVEVfUkVNT1ZFRCwgXFx1MDAyNmRldi1cXHUwMDNlc3RhdGUpKSB7XFxuIDEyMDpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiAxMjE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEyMjpcXHRcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWN1Lm11dGV4KTtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0aWYgKHdhaXRfcmVzcClcXG4gMTI3OlxcdFxcdFxcdHdoaWxlICghc2VxKVxcbiAxMjg6XFx0XFx0XFx0XFx0c2VxID0gKytkZXYtXFx1MDAzZW1jdS5tc2dfc2VxIFxcdTAwMjYgMHhmO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRtdDc2MDF1X2RtYV9za2Jfd3JhcF9jbWQoc2tiLCBzZXEsIGNtZCk7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmIChkZXYtXFx1MDAzZW1jdS5yZXNwX2NtcGwuZG9uZSlcXG4gMTMzOlxcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJFcnJvcjogTUNVIHJlc3BvbnNlIHByZS1jb21wbGV0ZWQhXFxcXG5cXFwiKTtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0XFx0dHJhY2VfbXRfbWN1X21zZ19zZW5kX2NzKGRldiwgc2tiLCB3YWl0X3Jlc3ApO1xcbiAxMzY6XFx0XFx0dHJhY2VfbXRfc3VibWl0X3VyYl9zeW5jKGRldiwgY21kX3BpcGUsIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTM3OlxcdFxcdHJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCBjbWRfcGlwZSwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbiwgXFx1MDAyNnNlbnQsIDUwMCk7XFxuIDEzODpcXHRcXHRpZiAocmV0KSB7XFxuIDEzOTpcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRXJyb3I6IHNlbmQgTUNVIGNtZCBmYWlsZWQ6JWRcXFxcblxcXCIsIHJldCk7XFxuIDE0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcdGlmIChzZW50ICE9IHNrYi1cXHUwMDNlbGVuKVxcbiAxNDM6XFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkVycm9yOiAlcyBzZW50ICE9IHNrYi1cXHUwMDNlbGVuXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmICh3YWl0X3Jlc3ApXFxuIDE0NjpcXHRcXHRcXHRyZXQgPSBtdDc2MDF1X21jdV93YWl0X3Jlc3AoZGV2LCBzZXEpO1xcbiAxNDc6XFx0b3V0OlxcbiAxNDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1jdS5tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEzOjUxOjQ3LjM0MzY4ODU1OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzcyMTU0NjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTi1EZXRlY3RhYmxlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsgaW4gQmVhY29uIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSd2ZSBmb3VuZC4gVGhlIHByaW1hcnkgY29uY2VybiBsaWVzIHdpdGhpbiBgbXQ3NjAxdV9tY3VfbXNnX3NlbmRgLCBzcGVjaWZpY2FsbHkgaG93IGl0IHV0aWxpemVzIGB1c2JfYnVsa19tc2dgIHRvIHRyYW5zbWl0IGRhdGEgZnJvbSBhbiBgc2tiYCB0byB0aGUgVVNCIGRldmljZS4gSSBzZWUgdGhhdCBgdXNiX2J1bGtfbXNnYCB0YWtlcyBgc2tiLVx1MDAzZWRhdGFgIGFuZCBgc2tiLVx1MDAzZWxlbmAuIFRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBlbWVyZ2VzIGR1cmluZyB0aGUgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVnc2AgY2FsbCB3aXRoaW4gdGhlIGJlYWNvbiBzZXR0aW5nIG1lY2hhbmlzbS5cblxuVGhlIGNvZGUgaXRlcmF0ZXMsIGNvcHlpbmcgZGF0YSBpbnRvIGEgbmV3IGBza2JgIHZpYSBgc2tiX3B1dF9sZTMyYCwgcmVhZGluZyBmcm9tIGBkYXRhW2ldYCwgd2hlcmUgYGRhdGFgIHBvaW50cyB0byB0aGUgYmVhY29uIGBza2ItXHUwMDNlZGF0YWAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogdGhlIGBESVZfUk9VTkRfVVAoc2tiLVx1MDAzZWxlbiwgNClgIGNhbGN1bGF0aW9uLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCB0aGUgbG9vcCByZWFkcyBwYXN0IHRoZSBhY3R1YWwgaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUgYHNrYmAsIHBvdGVudGlhbGx5IGludG8gdGhlIHVuaW5pdGlhbGl6ZWQgdGFpbHJvb20uIGBLTVNBTmAgaXMgY3JpdGljYWwgaGVyZTsgaXQgd2lsbCB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIHRhaWxyb29tIG1lbW9yeSwgYW5kIHRodXMgd2lsbCBkZXRlY3QgdGhlIHByb2JsZW0uIGBLQVNBTmAgaXMgdW5saWtlbHkgdG8gY2F0Y2ggdGhpcyBzaW5jZSB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVnaW9uLCB0aHVzIG5vIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBLTVNBTidzIGluc3RydW1lbnRhdGlvbiBvZiBgdXNiX2J1bGtfbXNnYCB3aWxsIHRyaWdnZXIgYW4gaW5mby1sZWFrIHJlcG9ydC5cblxuSSBkb3VibGUtY2hlY2tlZCBvdGhlciBwb3RlbnRpYWwgYXJlYXMgbGlrZSBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAsIGBtdDc2MDF1X21hY19jb25maWdfdHNmYCwgYG10NzYwMXVfcHVzaF90eHdpYCBhbmQgYHNrYjJxYCwgdG8gYmUgc3VyZS4gTm9uZSBvZiB0aGVtIHNob3cgYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgdnVsbmVyYWJpbGl0eS4gVGhleSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIG9yIHRoZXJlIGFyZSBjbGVhciBib3VuZHMsIGVuc3VyaW5nIGBLQVNBTmAgd291bGQgY2F0Y2ggYW55IE9PQiByZWFkcy5cblxuU28sIHRoZSBjcnV4IGlzIGluIGBtdDc2MDF1X21hY19zZXRfYmVhY29uYC4gQSBiZWFjb24gc2tiIGlzIGFsbG9jYXRlZCAodGhyb3VnaCBgaWVlZTgwMjExX2JlYWNvbl9nZXRgKSwgYW5kIGl0cyBsZW5ndGggaXMgdXNlZCBpbiBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmQgdXAgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoYXQgYXJlIHRvIGJlIHdyaXR0ZW4uIFRoaXMgbGVuZ3RoIG1pZ2h0IG5vdCBiZSBhIG11bHRpcGxlIG9mIDQuXG5cblRoZSBjb25jbHVzaW9uIGlzIHRoYXQgd2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBgc2tiYCB0YWlscm9vbSBhbmQgc2VuZGluZyBpdCB0byB0aGUgVVNCIGRldmljZSB2aWEgYHVzYl9idWxrX21zZ2AuIFRoaXMgbWVtb3J5IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSB0YWlscm9vbSwgd2hpY2ggaXMgdW5pbml0aWFsaXplZCB3aGVuIGFsbG9jYXRlZC4gS01TQU4gZXhjZWxzIGF0IGNhdGNoaW5nIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gYmVjYXVzZSBpdCB0cmFja3MgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIG1lbW9yeSBhbmQgaG9va3MgYHVzYl9idWxrX21zZ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaWVlZTgwMjExX2JlYWNvbl9nZXRgIGRvZXNuJ3QgZ3VhcmFudGVlIGEgbXVsdGlwbGUtb2YtNCBsZW5ndGguIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGEgcmVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc2tiIGRvZXMgbm90IHplcm8gdGhlIHRhaWxyb29tLCBjb25maXJtaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHBvdGVudGlhbGx5IHJlYWQuIFRoaXMgaW5kaWNhdGVzIGEgc3Ryb25nIGNhc2UgZm9yIGEgS01TQU4tZm9jdXNlZCBmdXp6aW5nIHNlc3Npb24uIFRoZSBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbmAgcHVzaGVzIGEgYHN0cnVjdCBtdDc2X3R4d2lgIHRvIHRoZSBza2IgYW5kIHplcm9lcyBpdCB2aWEgYG1lbXNldGAsIGF2b2lkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoZXJlLlxuXG5UaGUgaXNzdWUgYm9pbHMgZG93biB0byB0aGUgYERJVl9ST1VORF9VUChza2ItXHUwMDNlbGVuLCA0KWAgcmVhZCwgYW5kIEkgd2lsbCBiZSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgIGFuZCBzdXBwbHlpbmcgdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTA5LCJPdXRwdXRUb2tlbnMiOjM0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMzo1MjowNS4wNjUyMzc4MzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYG10NzYwMXVfbWFjX3NldF9iZWFjb24oKWAsIHdoaWNoIHJldHJpZXZlcyBhIGJlYWNvbiBza2IgdXNpbmcgYGllZWU4MDIxMV9iZWFjb25fZ2V0KClgLiBJdCB0aGVuIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdG8gd3JpdGUgdG8gdGhlIGRldmljZSB1c2luZyBgRElWX1JPVU5EX1VQKHNrYi1cXHUwMDNlbGVuLCA0KWAgYW5kIHBhc3NlcyBgc2tiLVxcdTAwM2VkYXRhYCB0byBgbXQ3NjAxdV9idXJzdF93cml0ZV9yZWdzKClgLlxcblxcbkJlY2F1c2UgODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzIGNhbiBoYXZlIGFyYml0cmFyeSBsZW5ndGhzLCBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4gV2hlbiBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQsIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAgd2lsbCByZWFkIHVwIHRvIDMgYnl0ZXMgcGFzdCBgc2tiLVxcdTAwM2VsZW5gLiBTaW5jZSBza2IgYnVmZmVycyB0eXBpY2FsbHkgaGF2ZSBzb21lIHRhaWxyb29tIChtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIHJlYWQgd2lsbCBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0aW9uLiBBcyBhIHJlc3VsdCwgS0FTQU4gd2lsbCBOT1QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxcblxcbkhvd2V2ZXIsIHRoaXMgb3BlcmF0aW9uIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIHNrYiB0YWlscm9vbSBhbmQgc3Vic2VxdWVudGx5IHNlbmRzIGl0IHRvIHRoZSBVU0IgZGV2aWNlIHZpYSBgdXNiX2J1bGtfbXNnKClgIChjYWxsZWQgYnkgYG10NzYwMXVfbWN1X21zZ19zZW5kKClgKS4gS01TQU4gdHJhY2tzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhdCB0aGUgYnl0ZSBsZXZlbCBhbmQgaG9va3MgaW50byBVU0IgVVJCIHN1Ym1pc3Npb25zLCBtYWtpbmcgaXQgdW5pcXVlbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBrZXJuZWwgbWVtb3J5IGluZm8tbGVhayB0byB0aGUgaGFyZHdhcmUgZGV2aWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbXQ3NjAxdV9tYWNfc2V0X2JlYWNvbigpYCwgd2hpY2ggcmV0cmlldmVzIGEgYmVhY29uIHNrYiB1c2luZyBgaWVlZTgwMjExX2JlYWNvbl9nZXQoKWAuIEl0IHRoZW4gY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0byB3cml0ZSB0byB0aGUgZGV2aWNlIHVzaW5nIGBESVZfUk9VTkRfVVAoc2tiLVxcdTAwM2VsZW4sIDQpYCBhbmQgcGFzc2VzIGBza2ItXFx1MDAzZWRhdGFgIHRvIGBtdDc2MDF1X2J1cnN0X3dyaXRlX3JlZ3MoKWAuXFxuXFxuQmVjYXVzZSA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMgY2FuIGhhdmUgYXJiaXRyYXJ5IGxlbmd0aHMsIGBza2ItXFx1MDAzZWxlbmAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXaGVuIGBza2ItXFx1MDAzZWxlbmAgaXMgbm90IGEgbXVsdGlwbGUgb2YgNCwgYG10NzYwMXVfYnVyc3Rfd3JpdGVfcmVncygpYCB3aWxsIHJlYWQgdXAgdG8gMyBieXRlcyBwYXN0IGBza2ItXFx1MDAzZWxlbmAuIFNpbmNlIHNrYiBidWZmZXJzIHR5cGljYWxseSBoYXZlIHNvbWUgdGFpbHJvb20gKG1lbW9yeSB0aGF0IGlzIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCksIHRoaXMgcmVhZCB3aWxsIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIGFsbG9jYXRpb24uIEFzIGEgcmVzdWx0LCBLQVNBTiB3aWxsIE5PVCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuXFxuXFxuSG93ZXZlciwgdGhpcyBvcGVyYXRpb24gcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgc2tiIHRhaWxyb29tIGFuZCBzdWJzZXF1ZW50bHkgc2VuZHMgaXQgdG8gdGhlIFVTQiBkZXZpY2UgdmlhIGB1c2JfYnVsa19tc2coKWAgKGNhbGxlZCBieSBgbXQ3NjAxdV9tY3VfbXNnX3NlbmQoKWApLiBLTVNBTiB0cmFja3MgbWVtb3J5IGluaXRpYWxpemF0aW9uIGF0IHRoZSBieXRlIGxldmVsIGFuZCBob29rcyBpbnRvIFVTQiBVUkIgc3VibWlzc2lvbnMsIG1ha2luZyBpdCB1bmlxdWVseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrIHRvIHRoZSBoYXJkd2FyZSBkZXZpY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[1] Phase: Succeeded StartedAt: 2026-08-15 13:52:16 +0000 UTC FinishedAt: 2026-08-15 13:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 13:52:16 +0000 UTC FinishedAt: 2026-08-15 13:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2] Phase: Succeeded StartedAt: 2026-08-15 13:52:16 +0000 UTC FinishedAt: 2026-08-15 14:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 13:52:16 +0000 UTC FinishedAt: 2026-08-15 14:32:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","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-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 13:52:16 +0000 UTC FinishedAt: 2026-08-15 13:52:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 13:52:16 +0000 UTC FinishedAt: 2026-08-15 13:52:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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-workflowj9tsw/series-workflowj9tsw-convert-artifact-2912459251/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 13:52:27 +0000 UTC FinishedAt: 2026-08-15 14:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 13:52:27 +0000 UTC FinishedAt: 2026-08-15 14:09:02 +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:*49bf20b8-02a9-48d8-9556-0ba01df7d268,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-workflowj9tsw/series-workflowj9tsw-convert-artifact-2912459251/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": "f1631132-7fc2-4e6c-b235-b0f6916cf782", "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-workflowj9tsw/series-workflowj9tsw-build-action-3828546721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 13:52:27 +0000 UTC FinishedAt: 2026-08-15 14:08:52 +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:*49bf20b8-02a9-48d8-9556-0ba01df7d268,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-workflowj9tsw/series-workflowj9tsw-convert-artifact-2912459251/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": "f1631132-7fc2-4e6c-b235-b0f6916cf782", "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-workflowj9tsw/series-workflowj9tsw-build-action-3828546721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 14:09:02 +0000 UTC FinishedAt: 2026-08-15 14:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 14:09:02 +0000 UTC FinishedAt: 2026-08-15 14:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 14:09:02 +0000 UTC FinishedAt: 2026-08-15 14:09:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 14:09:02 +0000 UTC FinishedAt: 2026-08-15 14:09:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","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-workflowj9tsw/series-workflowj9tsw-convert-artifact-380213226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 14:09:12 +0000 UTC FinishedAt: 2026-08-15 14:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 14:09:12 +0000 UTC FinishedAt: 2026-08-15 14:10:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f1631132-7fc2-4e6c-b235-b0f6916cf782,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-workflowj9tsw/series-workflowj9tsw-build-action-3828546721/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-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 14:10:50 +0000 UTC FinishedAt: 2026-08-15 14:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 14:10:50 +0000 UTC FinishedAt: 2026-08-15 14:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 14:10:50 +0000 UTC FinishedAt: 2026-08-15 14:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 14:10:50 +0000 UTC FinishedAt: 2026-08-15 14:27:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49bf20b8-02a9-48d8-9556-0ba01df7d268,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-workflowj9tsw/series-workflowj9tsw-convert-artifact-380213226/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": "033f9239-34e6-4988-9e11-40d65cc12646", "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-workflowj9tsw/series-workflowj9tsw-build-action-2301740046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 14:10:50 +0000 UTC FinishedAt: 2026-08-15 14:27:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49bf20b8-02a9-48d8-9556-0ba01df7d268,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-workflowj9tsw/series-workflowj9tsw-convert-artifact-380213226/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": "033f9239-34e6-4988-9e11-40d65cc12646", "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-workflowj9tsw/series-workflowj9tsw-build-action-2301740046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 14:27:34 +0000 UTC FinishedAt: 2026-08-15 14:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 14:27:34 +0000 UTC FinishedAt: 2026-08-15 14:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 14:27:34 +0000 UTC FinishedAt: 2026-08-15 14:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 14:27:34 +0000 UTC FinishedAt: 2026-08-15 14:29:43 +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:*033f9239-34e6-4988-9e11-40d65cc12646,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-workflowj9tsw/series-workflowj9tsw-build-action-2301740046/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-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:32:34 +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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"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:*f1631132-7fc2-4e6c-b235-b0f6916cf782,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*033f9239-34e6-4988-9e11-40d65cc12646,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-workflowj9tsw/series-workflowj9tsw-build-action-3828546721/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-workflowj9tsw/series-workflowj9tsw-build-action-2301740046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:29:58 +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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"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-workflowj9tsw/series-workflowj9tsw-convert-artifact-2951041663/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 14:29:53 +0000 UTC FinishedAt: 2026-08-15 14:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 14:30:03 +0000 UTC FinishedAt: 2026-08-15 14:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9tsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"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":["mt7601u_mac_set_beacon","mt7601u_mac_config_tsf","mt7601u_start_ap","mt7601u_stop_ap","mt7601u_bss_info_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7601U","MAC80211_MESH"],"series_id":"f72a29d8-3cbe-43c0-a55d-8fc618a8753b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 14:30:03 +0000 UTC FinishedAt: 2026-08-15 14:32:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f1631132-7fc2-4e6c-b235-b0f6916cf782,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*033f9239-34e6-4988-9e11-40d65cc12646,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-workflowj9tsw/series-workflowj9tsw-build-action-3828546721/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-workflowj9tsw/series-workflowj9tsw-build-action-2301740046/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-workflowj9tsw/series-workflowj9tsw-convert-artifact-2951041663/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,}