Name: series-workflowd6wwj Phase: Succeeded StartedAt: 2026-08-31 18:44:42 +0000 UTC FinishedAt: 2026-08-31 21:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[0] Phase: Succeeded StartedAt: 2026-08-31 18:44:42 +0000 UTC FinishedAt: 2026-08-31 19:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 18:44:42 +0000 UTC FinishedAt: 2026-08-31 19:46:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "462bdd08fbdf41db223c6117d907c8fd68d666ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "462bdd08fbdf41db223c6117d907c8fd68d666ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211" ], "series_id": "603fb900-1dfb-44db-b792-de3f895b779a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rsi_prepare_beacon", "rsi_mgmt_pkt_recv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgdGFpbHJvb20gYm91bmRzIGNoZWNrcyBpbiByc2lfcHJlcGFyZV9iZWFjb24oKSBiZWZvcmUgY29weWluZyBiZWFjb24gZGF0YSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgY3Jhc2guIFRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlciBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKFJTSV9VU0IpIGFuZCBtYWM4MDIxMSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkOWQxYjc5Mjk4NzAxYzRhNmI3NWY5NzYxYTZkNjNlOWI3ZjQyNjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxOTo0MzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG5pbmRleCA3ZDI2MzE0YTNlNzZhLi41MGY3N2YzZWVlOTJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG5AQCAtNDMxLDYgJiM0Mzs0MzEsNyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gXHR1OCB2YXBfaWQgPSAwLCBpO1xuJiM0MztcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcbiBcdHUxNiB0aW1fb2Zmc2V0ID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaSYjNDM7JiM0MzspIHtcbkBAIC00ODAsNiAmIzQzOzQ4MSwxMyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAobWFjX2Jjbi1cdTAwM2VkYXRhW3RpbV9vZmZzZXQgJiM0MzsgMl0gPT0gMClcbiBcdFx0YmNuX2ZybS1cdTAwM2VmcmFtZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9EQVRBX0RFU0NfRFRJTV9CRUFDT04pO1xuIFxuJiM0MztcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XG4mIzQzO1x0aWYgKHRhaWxyb29tIFx1MDAzYyBGUkFNRV9ERVNDX1NaIHx8XG4mIzQzO1x0ICAgIG1hY19iY24tXHUwMDNlbGVuIFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRtZW1jcHkoXHUwMDI2c2tiLVx1MDAzZWRhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tXHUwMDNlZGF0YSwgbWFjX2Jjbi1cdTAwM2VsZW4pO1xuIFx0c2tiX3B1dChza2IsIG1hY19iY24tXHUwMDNlbGVuICYjNDM7IEZSQU1FX0RFU0NfU1opO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHRhaWxyb29tIGJvdW5kcyBjaGVja3MgaW4gcnNpX3ByZXBhcmVfYmVhY29uKCkgYmVmb3JlIGNvcHlpbmcgYmVhY29uIGRhdGEsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIGNyYXNoLiBUaGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChSU0lfVVNCKSBhbmQgbWFjODAyMTEgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDlkMWI3OTI5ODcwMWM0YTZiNzVmOTc2MWE2ZDYzZTliN2Y0MjYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCmluZGV4IDdkMjYzMTRhM2U3NmEuLjUwZjc3ZjNlZWU5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCkBAIC00MzEsNiAmIzQzOzQzMSw3IEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBza19idWZmICptYWNfYmNuOwogCXU4IHZhcF9pZCA9IDAsIGk7CiYjNDM7CXVuc2lnbmVkIGludCB0YWlscm9vbTsKIAl1MTYgdGltX29mZnNldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykgewpAQCAtNDgwLDYgJiM0Mzs0ODEsMTMgQEAgaW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChtYWNfYmNuLSZndDtkYXRhW3RpbV9vZmZzZXQgJiM0MzsgMl0gPT0gMCkKIAkJYmNuX2ZybS0mZ3Q7ZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTsKIAomIzQzOwl0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOwomIzQzOwlpZiAodGFpbHJvb20gJmx0OyBGUkFNRV9ERVNDX1NaIHx8CiYjNDM7CSAgICBtYWNfYmNuLSZndDtsZW4gJmd0OyB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHsKJiM0MzsJCWRldl9rZnJlZV9za2IobWFjX2Jjbik7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiAJbWVtY3B5KCZhbXA7c2tiLSZndDtkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLSZndDtkYXRhLCBtYWNfYmNuLSZndDtsZW4pOwogCXNrYl9wdXQoc2tiLCBtYWNfYmNuLSZndDtsZW4gJiM0MzsgRlJBTUVfREVTQ19TWik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGByc2lfcHJlcGFyZV9iZWFjb25gIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY2AuIFJpZ2h0LCBzbyB0aGlzIGlzIHRoZSBSZWRwaW5lIFNpZ25hbHMgOTF4IHdpcmVsZXNzIGRyaXZlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIFVTQiBvciBTRElPPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgY2FuIEkgZnV6eiBpdCBlZmZlY3RpdmVseT8gSWYgaXQmIzM5O3MgVVNCLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciYjMzk7cyBVU0IgcmF3IGdhZGdldCBvciBzb21lIGtpbmQgb2YgVVNCIGVtdWxhdGlvbiB0byBnZXQgYXQgaXQuIFRoYXTigJlzIHRoZSBpZGVhbCBzY2VuYXJpbyBmb3IgdGhvcm91Z2ggdGVzdGluZy4gSWYgbm90LCB3aGF0IG90aGVyIGF0dGFjayBzdXJmYWNlcyBhcmUgcHJlc2VudD8KCkxldCYjMzk7cyBxdWlja2x5IHNlYXJjaCBmb3Igb3RoZXIgYHJzaWAgZHJpdmVyIGZpbGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaXRzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBkZXRlcm1pbmUgaG93IGFjY2Vzc2libGUgdGhpcyBmdW5jdGlvbiBpcywgYW5kIHdoYXQgYXR0YWNrIHZlY3RvcnMgbWlnaHQgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlNJXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTk2MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc9MTM9aWYgV0xBTl9WRU5ET1JfUlNJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xNi1cdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE3Olx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTgtXHRkZXBlbmRzIG9uIE1BQzgwMjExXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoyMzpjb25maWcgUlNJX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRlYnVnIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBSU0lfOTFYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MzE6Y29uZmlnIFJTSV9TRElPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gTU1DIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zNC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6Mzk6Y29uZmlnIFJTSV9VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDE6XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDItXHRkZWZhdWx0IG1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy00Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQ3OmNvbmZpZyBSU0lfQ09FWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBXTEFOIEJUIENvZXhpc3RlbmNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBCVCBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NTA6XHRkZXBlbmRzIG9uICEoQlQ9bSBcdTAwMjZcdTAwMjYgUlNJXzkxWD15KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNTEtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU9Nz1yc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9wcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6ODpyc2lfOTF4LSQoQ09ORklHX1JTSV9DT0VYKVx0JiM0Mzs9IHJzaV85MXhfY29leC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6OTpyc2lfOTF4LSQoQ09ORklHX1JTSV9ERUJVR0ZTKVx0JiM0Mzs9IHJzaV85MXhfZGVidWdmcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTEyPXJzaV9zZGlvLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1JTSV85MVgpIFx0XHQmIzQzOz0gcnNpXzkxeC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1JTSV9TRElPKVx0XHQmIzQzOz0gcnNpX3NkaW8ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19SU0lfVVNCKVx0XHQmIzQzOz0gcnNpX3VzYi5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTIyPXN0YXRpYyBlbnVtIHJzaV9jb2V4X3F1ZXVlcyByc2lfY29leF9kZXRlcm1pbmVfY29leF9xXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTI0LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyNTpcdGVudW0gcnNpX2NvZXhfcXVldWVzIHFfbnVtID0gUlNJX0NPRVhfUV9JTlZBTElEO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjI3Olx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2Y29leF9jYi1cdTAwM2Vjb2V4X3R4X3FzW1JTSV9DT0VYX1FfQ09NTU9OXSkgXHUwMDNlIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6Mjg6XHRcdHFfbnVtID0gUlNJX0NPRVhfUV9DT01NT047XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6Mjk6XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZjb2V4X2NiLVx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9CVF0pIFx1MDAzZSAwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjMwOlx0XHRxX251bSA9IFJTSV9DT0VYX1FfQlQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MzE6XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZjb2V4X2NiLVx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9XTEFOXSkgXHUwMDNlIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MzI6XHRcdHFfbnVtID0gUlNJX0NPRVhfUV9XTEFOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTMzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYz0zNz1zdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTM4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzozOTpcdGVudW0gcnNpX2NvZXhfcXVldWVzIGNvZXhfcSA9IFJTSV9DT0VYX1FfSU5WQUxJRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy00MC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjQ2Olx0XHRpZiAoY29leF9xID09IFJTSV9DT0VYX1FfQlQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo0NzpcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZjb2V4X2NiLVx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9CVF0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTQ4LVx0XHRcdHJzaV9zZW5kX2J0X3BrdChjb2V4X2NiLVx1MDAzZXByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNDktXHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo1MDpcdH0gd2hpbGUgKGNvZXhfcSAhPSBSU0lfQ09FWF9RX0lOVkFMSUQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTUxLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9Njg9aW50IHJzaV9jb2V4X3JlY3ZfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4ICptc2cpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNjkte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjcwOlx0dTggbXNnX3R5cGUgPSBtc2dbUlNJX1JYX0RFU0NfTVNHX1RZUEVfT0ZGU0VUXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy03MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9ODc9c3RhdGljIGlubGluZSBpbnQgcnNpX21hcF9jb2V4X3EodTggaGFsX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy04OS1cdHN3aXRjaCAoaGFsX3F1ZXVlKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTA6XHRjYXNlIFJTSV9DT0VYX1E6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTE6XHRcdHJldHVybiBSU0lfQ09FWF9RX0NPTU1PTjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MjpcdGNhc2UgUlNJX1dMQU5fUTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MzpcdFx0cmV0dXJuIFJTSV9DT0VYX1FfV0xBTjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NDpcdGNhc2UgUlNJX0JUX1E6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTU6XHRcdHJldHVybiBSU0lfQ09FWF9RX0JUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTk2LVx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjk3Olx0cmV0dXJuIFJTSV9DT0VYX1FfSU5WQUxJRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy05OC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTEwMD1pbnQgcnNpX2NvZXhfc2VuZF9wa3Qodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaGFsX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMDgtXHRjb2V4X3EgPSByc2lfbWFwX2NvZXhfcShoYWxfcXVldWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjEwOTpcdGlmIChjb2V4X3EgPT0gUlNJX0NPRVhfUV9JTlZBTElEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTEwLVx0XHRyc2lfZGJnKEVSUl9aT05FLCBcJiMzNDtJbnZhbGlkIGNvZXggcXVldWVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMTItXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTEzOlx0aWYgKGNvZXhfcSAhPSBSU0lfQ09FWF9RX0NPTU1PTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoxMTQ6XHQgICAgY29leF9xICE9IFJTSV9DT0VYX1FfV0xBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTExNS1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y29leF9jYi1cdTAwM2Vjb2V4X3R4X3FzW2NvZXhfcV0sIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTkxPXN0YXRpYyB1MzIgcnNpX2dldF9udW1fcGt0c19kZXF1ZXVlKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4IHFfbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0xMDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MTAyOlx0cmF0ZS5iaXRyYXRlID0gUlNJX1JBVEVfTUNTMCAqIDUgKiAxMDsgLyogQ29udmVydCB0byBLYnBzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMTAzLVx0aWYgKHFfbnVtID09IFZJX1EpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTI2MT12b2lkIHJzaV9jb3JlX3Fvc19wcm9jZXNzb3Ioc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzA3LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjMwODojaWZkZWYgQ09ORklHX1JTSV9DT0VYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzA5LVx0XHRcdGlmIChjb21tb24tXHUwMDNlY29leF9tb2RlIFx1MDAzZSAxKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzEwLVx0XHRcdFx0c3RhdHVzID0gcnNpX2NvZXhfc2VuZF9wa3QoY29tbW9uLCBza2IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MzExOlx0XHRcdFx0XHRcdFx0ICAgUlNJX1dMQU5fUSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzEyLVx0XHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTMxNy1cdFx0XHRcdFx0c3RhdHVzID0gcnNpX3NlbmRfZGF0YV9wa3QoY29tbW9uLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjMxODojaWZkZWYgQ09ORklHX1JTSV9DT0VYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzE5LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM9MzUyPXN0cnVjdCBpZWVlODAyMTFfdmlmICpyc2lfZ2V0X3ZpZihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zNTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MzU3Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM1OC1cdFx0dmlmID0gYWRhcHRlci1cdTAwM2V2aWZzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYz0zNzQ9dm9pZCByc2lfY29yZV94bWl0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM5Mi1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozOTM6XHRpZiAoY29tbW9uLVx1MDAzZXdvd19mbGFncyBcdTAwMjYgUlNJX1dPV19FTkFCTEVEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzk0LVx0XHRyc2lfZGJnKEVSUl9aT05FLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy00MjAtXHRcdFx0cnNpX2hhbF9zZW5kX3N0YV9ub3RpZnlfZnJhbWUoY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjQyMTpcdFx0XHRcdFx0XHQgICAgICBSU0lfSUZUWVBFX1NUQVRJT04sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtNDIyLVx0XHRcdFx0XHRcdCAgICAgIFNUQV9DT05ORUNURUQsIGJzcy1cdTAwM2Vic3NpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz01OD1pbnQgcnNpX3ByZXBhcmVfbWdtdF9kZXNjKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA1LVx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNm1nbXRfZGVzYy1cdTAwM2VsZW5fcW5vLCAoc2tiLVx1MDAzZWxlbiAtIEZSQU1FX0RFU0NfU1opLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA2Olx0XHRcdFJTSV9XSUZJX01HTVRfUSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDctXHRtZ210X2Rlc2MtXHUwMDNlZnJhbWVfdHlwZSA9IFRYX0RPVDExX01HTVQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTExLVx0aWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEod2gtXHUwMDNlZnJhbWVfY29udHJvbCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTI6XHRcdG1nbXRfZGVzYy1cdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0lOU0VSVF9TRVFfSU5fRlcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEzLVx0bWdtdF9kZXNjLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUkFURV9JTkZPX0VOQUJMRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTQtXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2gtXHUwMDNlYWRkcjEpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTE1Olx0XHRtZ210X2Rlc2MtXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfQlJPQURDQVNUX1BLVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE5LVx0aWYgKChjb21tb24tXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdIWikgXHUwMDI2XHUwMDI2ICFjb21tb24tXHUwMDNlcDJwX2VuYWJsZWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMjA6XHRcdG1nbXRfZGVzYy1cdTAwM2VyYXRlX2luZm8gPSBjcHVfdG9fbGUxNihSU0lfUkFURV8xKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEyMS1cdGVsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyMjpcdFx0bWdtdF9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTIzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEyNy1cdGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcCh3aC1cdTAwM2VmcmFtZV9jb250cm9sKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTI4Olx0XHRtZ210X2Rlc2MtXHUwMDNlbWlzY19mbGFncyB8PSAoUlNJX0FERF9ERUxUQV9UU0ZfVkFQX0lEIHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyOTpcdFx0XHRcdFx0ICBSU0lfRkVUQ0hfUkVUUllfQ05UX0ZSTV9IU1QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTMwLSNkZWZpbmUgUFJPQkVfUkVTUF9SRVRSWV9DTlRcdDNcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xNDQtXHRtZ210X2Rlc2MtXHUwMDNlcmF0ZV9pbmZvIHw9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxNDU6XHRcdGNwdV90b19sZTE2KCh0eF9wYXJhbXMtXHUwMDNldmFwX2lkIFx1MDAzY1x1MDAzYyBSU0lfREVTQ19WQVBfSURfT0ZTVCkgXHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxNDY6XHRcdFx0ICAgIFJTSV9ERVNDX1ZBUF9JRF9NQVNLKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTE0Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0xNTI9aW50IHJzaV9wcmVwYXJlX2RhdGFfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwMC1cdFx0aWVlZTgwMjExX3NpemUgJiM0Mzs9IDI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyMDE6XHRcdGRhdGFfZGVzYy1cdTAwM2VtYWNfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoUlNJX1FPU19FTkFCTEUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjAyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwNi1cdCAgICAoYWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9PSBQU19FTkFCTEVEKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIwNzpcdFx0d2gtXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihSU0lfU0VUX1BTX0VOQUJMRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMDgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjE0LVx0XHRcdGllZWU4MDIxMV9zaXplICYjNDM7PSA4O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjE1Olx0XHRkYXRhX2Rlc2MtXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9FTkNSWVBUX1BLVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMTYtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMTctXHRyc2lfc2V0X2xlbl9xbm8oXHUwMDI2ZGF0YV9kZXNjLVx1MDAzZWxlbl9xbm8sIChza2ItXHUwMDNlbGVuIC0gRlJBTUVfREVTQ19TWiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyMTg6XHRcdFx0UlNJX1dJRklfREFUQV9RKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIxOS1cdGRhdGFfZGVzYy1cdTAwM2VoZWFkZXJfbGVuID0gaWVlZTgwMjExX3NpemU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjQyLVx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNDM6XHRcdFx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjQ0LVx0XHRlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNDU6XHRcdFx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjQ2Olx0XHRkYXRhX2Rlc2MtXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9SRUtFWV9QVVJQT1NFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI0NzpcdFx0ZGF0YV9kZXNjLVx1MDAzZW1pc2NfZmxhZ3MgfD0gUlNJX0ZFVENIX1JFVFJZX0NOVF9GUk1fSFNUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjQ4LSNkZWZpbmUgRUFQT0xfUkVUUllfQ05UIDE1XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjU1LVx0XHRcdFx0XHQoc2tiLVx1MDAzZWxlbiAtIEZSQU1FX0RFU0NfU1opLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjU2Olx0XHRcdFx0XHRSU0lfV0lGSV9NR01UX1EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjU3LVx0XHRpZiAoKChza2ItXHUwMDNlbGVuIC0gaGVhZGVyX3NpemUpID09IEVBUE9MNF9QQUNLRVRfTEVOKSB8fFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI1OS1cdFx0XHRkYXRhX2Rlc2MtXHUwMDNlbWlzY19mbGFncyB8PVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjYwOlx0XHRcdFx0UlNJX0RFU0NfUkVRVUlSRV9DRk1fVE9fSE9TVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI2MS1cdFx0XHR4dGVuZF9kZXNjLVx1MDAzZWNvbmZpcm1fZnJhbWVfdHlwZSA9IEVBUE9MNF9DT05GSVJNO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3Mi1cdFx0ZGF0YV9kZXNjLVx1MDAzZWZyYW1lX2luZm8gPSBjcHVfdG9fbGUxNihSQVRFX0lORk9fRU5BQkxFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI3MzpcdFx0ZGF0YV9kZXNjLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0JST0FEQ0FTVF9QS1QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjc0LVx0XHRkYXRhX2Rlc2MtXHUwMDNlc3RhX2lkID0gdmFwX2lkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3OC1cdFx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNzk6XHRcdFx0XHRkYXRhX2Rlc2MtXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yODAtXHRcdFx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjgxOlx0XHRcdFx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjgyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjg5LVx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyB8PVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjkwOlx0XHRjcHVfdG9fbGUxNigodHhfcGFyYW1zLVx1MDAzZXZhcF9pZCBcdTAwM2NcdTAwM2MgUlNJX0RFU0NfVkFQX0lEX09GU1QpIFx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjkxOlx0XHRcdCAgICBSU0lfREVTQ19WQVBfSURfTUFTSyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MzM3PWludCByc2lfc2VuZF9tZ210X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTM3My1cdFx0XHRcJiMzNDslczogYmxvY2tpbmcgbWdtdCBxdWV1ZVxcblwmIzM0OywgX19mdW5jX18pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6Mzc0Olx0XHRtZ210X2Rlc2MtXHUwMDNlbWlzY19mbGFncyA9IFJTSV9ERVNDX1JFUVVJUkVfQ0ZNX1RPX0hPU1Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0zNzUtXHRcdHh0ZW5kX2Rlc2MtXHUwMDNlY29uZmlybV9mcmFtZV90eXBlID0gUFJPQkVSRVFfQ09ORklSTTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zODg9aW50IHJzaV9zZW5kX2J0X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTM5NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjM5NTpcdGlmIChxdWV1ZW5vID09IFJTSV9CVF9NR01UX1EpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTM5Ni1cdFx0c3RhdHVzID0gcnNpX3NlbmRfcGt0X3RvX2J1cyhjb21tb24sIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDEyLVx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNmJ0X2Rlc2MtXHUwMDNlbGVuX3FubywgKHNrYi1cdTAwM2VsZW4gLSBGUkFNRV9ERVNDX1NaKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQxMzpcdFx0XHRSU0lfQlRfREFUQV9RKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQxNC1cdGJ0X2Rlc2MtXHUwMDNlYnRfcGt0X3R5cGUgPSBjcHVfdG9fbGUxNihidF9jYihza2IpLVx1MDAzZXBrdF90eXBlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz00MjU9aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQzNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQzNzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQzOC1cdFx0dmlmID0gYWRhcHRlci1cdTAwM2V2aWZzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ1Ni1cdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXHUwMDNlZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ1NzpcdHJzaV9zZXRfbGVuX3FubyhcdTAwMjZiY25fZnJtLVx1MDAzZWxlbl9xbm8sIG1hY19iY24tXHUwMDNlbGVuLCBSU0lfV0lGSV9EQVRBX1EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDU4LVx0YmNuX2ZybS1cdTAwM2VoZWFkZXJfbGVuID0gTUlOXzgwMl8xMV9IRFJfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDU5Olx0YmNuX2ZybS1cdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYwOlx0XHRcdFx0XHQgIFJTSV9EQVRBX0RFU0NfTk9fQUNLX0lORCB8XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0NjE6XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19CRUFDT05fRlJBTUUgfFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYyOlx0XHRcdFx0XHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0NjM6XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfU0VRX05PIHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ2NC1cdFx0XHRcdFx0ICBSQVRFX0lORk9fRU5BQkxFKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NzYtXHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0Nzc6XHRcdGJjbl9mcm0tXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDc4LVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDc5Olx0XHRiY25fZnJtLVx1MDAzZXJhdGVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfUkFURV82KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ4MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ4MS1cdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCAmIzQzOyAyXSA9PSAwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDgyOlx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00ODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9NjUwPXN0YXRpYyBpbnQgYmxfd3JpdGVfaGVhZGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4ICpmbGFzaF9jb250ZW50LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjY3MTpcdGlmIChhZGFwdGVyLVx1MDAzZXJzaV9ob3N0X2ludGYgPT0gUlNJX0hPU1RfSU5URl9VU0IpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY3Mi1cdFx0d3JpdGVfYWRkciA9IFBJTkdfQlVGRkVSX0FERFJFU1M7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNjg5LVx0XHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo2OTA6XHRcdHdyaXRlX2FkZHIgPSBSU0lfU0RfUkVRVUVTVF9NQVNURVIgfFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNjkxLVx0XHRcdCAgICAgKFBJTkdfQlVGRkVSX0FERFJFU1MgXHUwMDI2IDB4RkZGRik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9ODUwPXN0YXRpYyBpbnQgcnNpX2hhbF9wcmVwYXJlX2Z3bG9hZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2MC1cdFx0XHRcdFx0XHQgIFx1MDAyNnJlZ291dF92YWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo4NjE6XHRcdFx0XHRcdFx0ICBSU0lfQ09NTU9OX1JFR19TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2Mi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg4NS1cdFx0XHRcdFx0ICAgIFJFR09VVF9JTlZBTElEIFx1MDAzY1x1MDAzYyA4KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjg4NjpcdFx0XHRcdFx0ICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy04ODctXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTEwMTE9c3RhdGljIGludCByc2lfbG9hZF85MTE2X2Zpcm13YXJlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTAyNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwMjY6XHRpZiAoYWRhcHRlci1cdTAwM2Vyc2lfaG9zdF9pbnRmID09IFJTSV9IT1NUX0lOVEZfVVNCKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDI3LVx0XHRzdGF0dXMgPSBibF9jbWQoYWRhcHRlciwgUE9MTElOR19NT0RFLCBDTURfUEFTUyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDM0LVx0XHRcdFx0XHQgICBSQU1fMzg0S19BQ0NFU1NfRlJPTV9UQSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwMzU6XHRcdFx0XHRcdCAgIFJTSV85MTE2X1JFR19TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMzYtXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwNzI6XHRpZiAoKih1MTYgKilmd19wID09IFJTSV85MTE2X0ZXX01BR0lDX1dPUkQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwNzMtXHRcdG1lbWNweShcdTAwMjZib290bG9hZF9kcywgZndfcCwgc2l6ZW9mKHN0cnVjdCBib290bG9hZF9kcykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwODMtXHRcdFx0bGVuID0gbGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwODQ6XHRcdFx0ICAgICAgUlNJX0JMX0NUUkxfTEVOX01BU0s7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDg1LVx0XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtsZW5ndGggJWQgZGVzdGluYXRpb24gJXhcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA5OC1cdFx0XHRpZiAobGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwOTk6XHRcdFx0ICAgIFJTSV9CTF9DVFJMX0xBU1RfRU5UUlkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTAwLVx0XHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEyMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjExMjE6XHRpZiAoYWRhcHRlci1cdTAwM2Vyc2lfaG9zdF9pbnRmID09IFJTSV9IT1NUX0lOVEZfU0RJTykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEyMi1cdFx0aWYgKGhpZl9vcHMtXHUwMDNldGFfcmVzZXQoYWRhcHRlcikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTE0MD1pbnQgcnNpX2hhbF9kZXZpY2VfaW5pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNDUtXHRzd2l0Y2ggKGFkYXB0ZXItXHUwMDNlZGV2aWNlX21vZGVsKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTQ2Olx0Y2FzZSBSU0lfREVWXzkxMTM6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTQ3LVx0XHRzdGF0dXMgPSByc2lfaGFsX3ByZXBhcmVfZndsb2FkKGFkYXB0ZXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNTYtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTE1NzpcdGNhc2UgUlNJX0RFVl85MTE2OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE1OC1cdFx0c3RhdHVzID0gcnNpX2hhbF9wcmVwYXJlX2Z3bG9hZChhZGFwdGVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEwNj1zdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnNpX3JhdGVzWzEyXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA3Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzAxICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzEgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA4Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzAyICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzIgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA5Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzVfNSAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzVfNSB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTA6XHR7IC5iaXRyYXRlID0gU1REX1JBVEVfMTEgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfMTEgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTExOlx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzA2ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzYgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEyOlx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzA5ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzkgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEzOlx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzEyICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzEyIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExNDpcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8xOCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xOCB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTU6XHR7IC5iaXRyYXRlID0gU1REX1JBVEVfMjQgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfMjQgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE2Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzM2ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzM2IH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExNzpcdHsgLmJpdHJhdGUgPSBTVERfUkFURV80OCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV80OCB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTg6XHR7IC5iaXRyYXRlID0gU1REX1JBVEVfNTQgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfNTQgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTE5LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMjE9Y29uc3QgdTE2IHJzaV9tY3NyYXRlc1s4XSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTIyOlx0UlNJX1JBVEVfTUNTMCwgUlNJX1JBVEVfTUNTMSwgUlNJX1JBVEVfTUNTMiwgUlNJX1JBVEVfTUNTMyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTIzOlx0UlNJX1JBVEVfTUNTNCwgUlNJX1JBVEVfTUNTNSwgUlNJX1JBVEVfTUNTNiwgUlNJX1JBVEVfTUNTN1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMjQtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTIzMz1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9od19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoyNDc6XHRpZiAoKGNvbW1vbi1cdTAwM2V3b3dfZmxhZ3MgXHUwMDI2IFJTSV9XT1dfRU5BQkxFRCkgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjQ4LVx0ICAgIHNjYW5fcmVxLVx1MDAzZW5fY2hhbm5lbHMgPT0gMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI2Mi1cdGNvbW1vbi1cdTAwM2Vod3NjYW4gPSBzY2FuX3JlcTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MjYzOlx0aWYgKCFyc2lfc2VuZF9iZ3NjYW5fcGFyYW1zKGNvbW1vbiwgUlNJX1NUQVJUX0JHU0NBTikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjY0LVx0XHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wcm9iZV9yZXEoY29tbW9uLCB2aWYpKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0yNzQ9c3RhdGljIHZvaWQgcnNpX21hYzgwMjExX2NhbmNlbF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjg0LVx0aWYgKGNvbW1vbi1cdTAwM2ViZ3NjYW5fZW4pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6Mjg1Olx0XHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wYXJhbXMoY29tbW9uLCBSU0lfU1RPUF9CR1NDQU4pKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0yODYtXHRcdFx0Y29tbW9uLVx1MDAzZWJnc2Nhbl9lbiA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MzAyPXZvaWQgcnNpX21hYzgwMjExX2RldGFjaChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMzIwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzozMjE6I2lmZGVmIENPTkZJR19SU0lfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0zMjItXHRyc2lfcmVtb3ZlX2RiZ2ZzKGFkYXB0ZXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9NDMzPXN0YXRpYyBpbnQgcnNpX21hcF9pbnRmX21vZGUoZW51bSBubDgwMjExX2lmdHlwZSB2aWZfdHlwZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQzNi1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDM3Olx0XHRyZXR1cm4gUlNJX09QTU9ERV9TVEE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQzOC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQzOTpcdFx0cmV0dXJuIFJTSV9PUE1PREVfQVA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ0MC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDQxOlx0XHRyZXR1cm4gUlNJX09QTU9ERV9QMlBfQ0xJRU5UO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00NDItXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0MzpcdFx0cmV0dXJuIFJTSV9PUE1PREVfUDJQX0NMSUVOVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQ0LVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0NTpcdFx0cmV0dXJuIFJTSV9PUE1PREVfUDJQX0dPO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00NDYtXHRkZWZhdWx0OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo0NDc6XHRcdHJldHVybiBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00NDgtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz00NTk9c3RhdGljIGludCByc2lfbWFjODAyMTFfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ3Mi1cdGludGZfbW9kZSA9IHJzaV9tYXBfaW50Zl9tb2RlKHZpZi1cdTAwM2V0eXBlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDczOlx0aWYgKGludGZfbW9kZSA9PSBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ3NC1cdFx0cnNpX2RiZyhFUlJfWk9ORSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4NS1cdC8qIEdldCBmcmVlIHZhcCBpbmRleCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo0ODY6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4Ny1cdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXZpZnNbaV0gfHxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTUzMD1zdGF0aWMgdm9pZCByc2lfbWFjODAyMTFfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU0Ny1cdG9wbW9kZSA9IHJzaV9tYXBfaW50Zl9tb2RlKHZpZi1cdTAwM2V0eXBlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NTQ4Olx0aWYgKG9wbW9kZSA9PSBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU0OS1cdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7T3Btb2RlIGVycm9yIDogJWRcXG5cJiMzNDssIG9wbW9kZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01NTItXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjU1MzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNTU0LVx0XHRpZiAoIWFkYXB0ZXItXHUwMDNldmlmc1tpXSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTU3ND1zdGF0aWMgaW50IHJzaV9jaGFubmVsX2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NTkwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01OTEtXHRcdHZpZiA9IGFkYXB0ZXItXHUwMDNldmlmc1tpXTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTY2ND1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjY5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTItXHRcdFx0dmlmID0gYWRhcHRlci1cdTAwM2V2aWZzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9Nzg2PXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODA4LVx0XHRyc2lfaW5mb3JtX2Jzc19zdGF0dXMoY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo4MDk6XHRcdFx0XHQgICAgICBSU0lfT1BNT0RFX1NUQSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODEwLVx0XHRcdFx0ICAgICAgdmlmLVx1MDAzZWNmZy5hc3NvYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTg0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6ODQ3Olx0XHRcdFx0cnNpX3NldF92YXBfY2FwYWJpbGl0aWVzKGNvbW1vbiwgUlNJX09QTU9ERV9BUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODQ4LVx0XHRcdFx0XHRcdFx0IHZpZi1cdTAwM2VhZGRyLCB2aWZfaW5mby1cdTAwM2V2YXBfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz04ODA9c3RhdGljIHZvaWQgcnNpX21hYzgwMjExX2NvbmZfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODg1LVx0LyogTm90IGRvaW5nIG11Y2ggaGVyZSBhcyBvZiBub3cgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6ODg2Olx0KnRvdGFsX2ZsYWdzIFx1MDAyNj0gUlNJX1NVUFBfRklMVEVSUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODg3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTk2MT1zdGF0aWMgaW50IHJzaV9oYWxfa2V5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Mi1cdGlmIChrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTczOlx0XHRrZXlfdHlwZSA9IFJTSV9QQUlSV0lTRV9LRVk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3NC1cdGVsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTc1Olx0XHRrZXlfdHlwZSA9IFJTSV9HUk9VUF9LRVk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk5My1cdFx0XHRcdFx0XHQgIGtleS1cdTAwM2VrZXlsZW4sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjk5NDpcdFx0XHRcdFx0XHQgIFJTSV9QQUlSV0lTRV9LRVksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk5NS1cdFx0XHRcdFx0XHQgIGtleS1cdTAwM2VrZXlpZHgsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMDkxPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMDg6XHRmb3IgKGlpID0gMDsgaWkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaWkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMDktXHRcdGlmICh2aWYgPT0gYWRhcHRlci1cdTAwM2V2aWZzW2lpXSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMTM6XHRpZiAoaWkgXHUwMDNlPSBSU0lfTUFYX1ZJRlMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMTQtXHRcdHJldHVybiBzdGF0dXM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMzA5PXN0YXRpYyB2b2lkIHJzaV9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEzNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEzNTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEzNTQtXHRcdHZpZiA9IGFkYXB0ZXItXHUwMDNldmlmc1tpXTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE0MDc9c3RhdGljIGludCByc2lfbWFjODAyMTFfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0NzAtXHRcdFx0cnNpX2RiZyhJTkZPX1pPTkUsIFwmIzM0O0luZGljYXRlIGJzcyBzdGF0dXMgdG8gZGV2aWNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTQ3MTpcdFx0XHRyc2lfaW5mb3JtX2Jzc19zdGF0dXMoY29tbW9uLCBSU0lfT1BNT0RFX0FQLCAxLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDcyLVx0XHRcdFx0XHQgICAgICBzdGEtXHUwMDNlYWRkciwgc3RhLVx1MDAzZXdtZSwgc3RhLVx1MDAzZWFpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0ODItXHRcdFx0XHRcdFx0XHQga2V5LVx1MDAzZWtleWxlbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTQ4MzpcdFx0XHRcdFx0XHRcdCBSU0lfUEFJUldJU0VfS0VZLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDg0LVx0XHRcdFx0XHRcdFx0IGtleS1cdTAwM2VrZXlpZHgsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNTIzPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNTQ3LVx0XHRcdGlmICghbWVtY21wKHJzdGEtXHUwMDNlc3RhLVx1MDAzZWFkZHIsIHN0YS1cdTAwM2VhZGRyLCBFVEhfQUxFTikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTU0ODpcdFx0XHRcdHJzaV9pbmZvcm1fYnNzX3N0YXR1cyhjb21tb24sIFJTSV9PUE1PREVfQVAsIDAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE1NDktXHRcdFx0XHRcdFx0ICAgICAgc3RhLVx1MDAzZWFkZHIsIHN0YS1cdTAwM2V3bWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNjY1PXN0YXRpYyBpbnQgcnNpX21hcF9yZWdpb25fY29kZShlbnVtIG5sODAyMTFfZGZzX3JlZ2lvbnMgcmVnaW9uX2NvZGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjY4LVx0Y2FzZSBOTDgwMjExX0RGU19GQ0M6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2Njk6XHRcdHJldHVybiBSU0lfUkVHSU9OX0ZDQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3MC1cdGNhc2UgTkw4MDIxMV9ERlNfRVRTSTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTY3MTpcdFx0cmV0dXJuIFJTSV9SRUdJT05fRVRTSTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3Mi1cdGNhc2UgTkw4MDIxMV9ERlNfSlA6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2NzM6XHRcdHJldHVybiBSU0lfUkVHSU9OX1RFTEVDO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjc0LVx0Y2FzZSBOTDgwMjExX0RGU19VTlNFVDpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTY3NTpcdFx0cmV0dXJuIFJTSV9SRUdJT05fV09STEQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE2NzYtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2Nzc6XHRyZXR1cm4gUlNJX1JFR0lPTl9XT1JMRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3OC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNzI5PXN0YXRpYyB2b2lkIHJzaV9yZXN1bWVfY29ubl9jaGFubmVsKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNzM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNzM1Olx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIFJTSV9NQVhfVklGUzsgY250JiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNzM2LVx0XHR2aWYgPSBhZGFwdGVyLVx1MDAzZXZpZnNbY250XTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE4NDk9c3RhdGljIHUxNiByc2lfd293X21hcF90cmlnZ2VycyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg1Ni1cdGlmICh3b3dsYW4tXHUwMDNlYW55KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxODU3Olx0XHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19BTlk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4NTgtXHRpZiAod293bGFuLVx1MDAzZW1hZ2ljX3BrdClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg1OTpcdFx0d293X3RyaWdnZXJzIHw9IFJTSV9XT1dfTUFHSUNfUEtUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODYwLVx0aWYgKHdvd2xhbi1cdTAwM2VkaXNjb25uZWN0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxODYxOlx0XHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19ESVNDT05ORUNUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODYyLVx0aWYgKHdvd2xhbi1cdTAwM2VndGtfcmVrZXlfZmFpbHVyZSB8fCB3b3dsYW4tXHUwMDNlZWFwX2lkZW50aXR5X3JlcSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODYzLVx0ICAgIHdvd2xhbi1cdTAwM2Vmb3VyX3dheV9oYW5kc2hha2UpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4NjQ6XHRcdHdvd190cmlnZ2VycyB8PSBSU0lfV09XX0dUS19SRUtFWTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg2NS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE4Njk9aW50IHJzaV9jb25maWdfd293bGFuKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4ODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4ODY6XHRjb21tb24tXHUwMDNld293X2ZsYWdzIHw9IFJTSV9XT1dfRU5BQkxFRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg4Ny1cdHRyaWdnZXJzID0gcnNpX3dvd19tYXBfdHJpZ2dlcnMoY29tbW9uLCB3b3dsYW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg5NC1cdFx0XHRcJiMzNDtDYW5ub3QgY29uZmlndXJlIFdvV0xBTiAoU3RhdGlvbiBub3QgY29ubmVjdGVkKVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4OTU6XHRcdGNvbW1vbi1cdTAwM2V3b3dfZmxhZ3MgfD0gUlNJX1dPV19OT19DT05ORUNUSU9OO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODk2LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTIwMDc9aW50IHJzaV9tYWM4MDIxMV9hdHRhY2goc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqQmVhY29uIFByZXBhcmF0aW9uIENhbGwgU3RhY2sgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGByc2lfcHJlcGFyZV9iZWFjb25gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkg4oCTIHdobyYjMzk7cyBpbnZva2luZyB0aGlzIHRoaW5nLCBhbmQgd2hlcmUgYXJlIHRob3NlIGNhbGxzIG9yaWdpbmF0aW5nIGZyb20/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgY3J1Y2lhbCBmb3IgZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24mIzM5O3MgdXNhZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UsIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycywgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHJzaV9wcmVwYXJlX2JlYWNvbmAgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYmVhY29uIHByZXBhcmF0aW9uIG9yIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHN0YXJ0IHRoZSBodW50IGFuZCBnZXQgYSBjbGVhciBtYXAgb2YgdGhlc2UgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX3ByZXBhcmVfYmVhY29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTM4OD1pbnQgcnNpX3NlbmRfYnRfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDI1OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTE3NjM9c3RhdGljIGludCByc2lfc2VuZF9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc3Ni1cdFx0c2tiX3B1bGwoc2tiLCAoNjQgLSBkd29yZF9hbGlnbl9ieXRlcykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jOjE3Nzc6XHRpZiAocnNpX3ByZXBhcmVfYmVhY29uKGNvbW1vbiwgc2tiKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzgtXHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0O0ZhaWxlZCB0byBwcmVwYXJlIGJlYWNvblxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaD0yMjU9aW50IHJzaV9wcmVwYXJlX2RhdGFfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmg6MjI2OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oLTIyNy1pbnQgcnNpX3NlbmRfcGt0X3RvX2J1cyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyMQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGByc2lfc2VuZF9iZWFjb25gIEZ1bmN0aW9uIENhbGwgYW5kIERyaXZlciBPcGVyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGByc2lfc2VuZF9iZWFjb25gIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBzdGFydCBpbiBgcnNpXzkxeF9tZ210LmNgLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDE3NjMsIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IG1pZ2h0IHJlc2lkZS4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbiBsb2dpYy4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24gY2FsbCBhbmQgaG93IHRoZSBkcml2ZXIgb3JjaGVzdHJhdGVzIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uIHByb2Nlc3MuIEhvcGVmdWxseSB0aGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgYmVhY29uJiMzOTtzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc2MDpcdFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xuMTc2MTpcdH1cbjE3NjI6XHRcbjE3NjM6XHRzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuMTc2NDpcdHtcbjE3NjU6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuMTc2NjpcdFx0dTggZHdvcmRfYWxpZ25fYnl0ZXMgPSAwO1xuMTc2NzpcdFxuMTc2ODpcdFx0c2tiID0gZGV2X2FsbG9jX3NrYihNQVhfTUdNVF9QS1RfU0laRSk7XG4xNzY5Olx0XHRpZiAoIXNrYilcbjE3NzA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzcxOlx0XG4xNzcyOlx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIE1BWF9NR01UX1BLVF9TSVpFKTtcbjE3NzM6XHRcbjE3NzQ6XHRcdGR3b3JkX2FsaWduX2J5dGVzID0gKCh1bnNpZ25lZCBsb25nKXNrYi1cdTAwM2VkYXRhIFx1MDAyNiAweDNmKTtcbjE3NzU6XHRcdGlmIChkd29yZF9hbGlnbl9ieXRlcylcbjE3NzY6XHRcdFx0c2tiX3B1bGwoc2tiLCAoNjQgLSBkd29yZF9hbGlnbl9ieXRlcykpO1xuMTc3NzpcdFx0aWYgKHJzaV9wcmVwYXJlX2JlYWNvbihjb21tb24sIHNrYikpIHtcbjE3Nzg6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgYmVhY29uXFxuXCYjMzQ7KTtcbjE3Nzk6XHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuMTc4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3ODE6XHRcdH1cbjE3ODI6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmNvbW1vbi1cdTAwM2V0eF9xdWV1ZVtNR01UX0JFQUNPTl9RXSwgc2tiKTtcbjE3ODM6XHRcdHJzaV9zZXRfZXZlbnQoXHUwMDI2Y29tbW9uLVx1MDAzZXR4X3RocmVhZC5ldmVudCk7XG4xNzg0Olx0XHRyc2lfZGJnKERBVEFfVFhfWk9ORSwgXCYjMzQ7JXM6IEFkZGVkIHRvIGJlYWNvbiBxdWV1ZVxcblwmIzM0OywgX19mdW5jX18pO1xuMTc4NTpcdFxuMTc4NjpcdFx0cmV0dXJuIDA7XG4xNzg3Olx0fVxuMTc4ODpcdFxuMTc4OTpcdCNpZmRlZiBDT05GSUdfUE1cbjE3OTA6XHRpbnQgcnNpX3NlbmRfd293bGFuX3JlcXVlc3Qoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgdTE2IGZsYWdzLFxuMTc5MTpcdFx0XHRcdCAgICB1MTYgc2xlZXBfc3RhdHVzKVxuMTc5MjpcdHtcbjE3OTM6XHRcdHN0cnVjdCByc2lfd293bGFuX3JlcSAqY21kX2ZyYW1lO1xuMTc5NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE3OTU6XHRcdHU4IGxlbmd0aDtcbjE3OTY6XHRcbjE3OTc6XHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0OyVzOiBTZW5kaW5nIHdvd2xhbiByZXF1ZXN0IGZyYW1lXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xNzk4Olx0XG4xNzk5Olx0XHRsZW5ndGggPSBzaXplb2YoKmNtZF9mcmFtZSk7XG4xODAwOlx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCk7XG4xODAxOlx0XHRpZiAoIXNrYilcbjE4MDI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODAzOlx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIGxlbmd0aCk7XG4xODA0Olx0XHRjbWRfZnJhbWUgPSAoc3RydWN0IHJzaV93b3dsYW5fcmVxICopc2tiLVx1MDAzZWRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHJzaV9zZW5kX2JlYWNvbmAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGhpZXJhcmNoeSBmb3IgYHJzaV9zZW5kX2JlYWNvbmAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IGNvbnRleHRzIGFuZCBkYXRhIGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG11bHRpcGxlIHVzZXMsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucyBpbiB0aG9zZSBjYWxscyDigJMgYXJlIHRoZXkgY2x1c3RlcmVkIGFyb3VuZCBzcGVjaWZpYyBtb2R1bGVzLCBkZXZpY2UgZHJpdmVycywgb3IgaGlnaGVyLWxldmVsIGZ1bmN0aW9uYWxpdGllcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHdoZXJlIHRoaXMgYmVhY29uIHRyYW5zbWlzc2lvbiBpcyBvY2N1cnJpbmc/IFdoYXQgc29ydCBvZiBkYXRhIGlzIGxpa2VseSBiZWluZyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGluIGVhY2ggb2YgdGhlIHBsYWNlcyB0aGF0IGNhbGxzIGl0PyBBbmQgZmluYWxseSwgd2hhdCYjMzk7cyBpdHMgcm9sZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX3NlbmRfYmVhY29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz0xNzM4PWludCByc2lfc2V0X2FudGVubmEoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgdTggYW50ZW5uYSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoxNzYzOnN0YXRpYyBpbnQgcnNpX3NlbmRfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc2NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTIxODU9aW50IHJzaV9tZ210X3BrdF9yZWN2KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4ICptc2cpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTIyMjQtXHRcdFx0cmV0dXJuIC0xO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jOjIyMjU6XHRcdHJzaV9zZW5kX2JlYWNvbihjb21tb24pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTIyMjYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEzNgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHJzaV9yc2lfOTF4X2hhbC5jYCBhbmQgYHJzaV9wcmVwYXJlX2JlYWNvbmAqKgoKT2theSwgc28gd2UgbmVlZCB0byBsb29rIGF0IHRoZSByYWRpbyBjb25maWd1cmF0aW9uIGhlcmUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGByc2lfcnNpXzkxeF9oYWwuY2AuIFRoZSBwcm9ibGVtIHN1Z2dlc3RzIGEgY29uZmlndXJhdGlvbiBpc3N1ZSBhbmQgSSBoYXZlIHRvIHRyYWNlIGJhY2sgdGhlIGJlYWNvbiBwcmVwZXJhdGlvbiB0byBmaWd1cmUgb3V0IGhvdyByYWRpbyBjb25maWd1cmF0aW9uIG1heSBiZSBnb2luZyBhd3J5LiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgcnNpX3ByZXBhcmVfYmVhY29uYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCB3aGVyZSB0aGUgYmVhY29uIGZyYW1lIGlzIGFzc2VtYmxlZCBiZWZvcmUgYmVpbmcgdHJhbnNtaXR0ZWQsIG1ha2luZyBpdCB0aGUgcGVyZmVjdCBzdGFydGluZyBwb2ludCB0byBkaWFnbm9zZSBhbnkgY29uZmlndXJhdGlvbiBlcnJvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGZpbmFsIGJlYWNvbiBjb250ZW50LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGhhdmUgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDQyNjpcdHtcbiA0Mjc6XHRcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiA0Mjg6XHRcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xuIDQyOTpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXHUwMDNlcHJpdi1cdTAwM2VodztcbiA0MzA6XHRcdHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IFx1MDAyNmh3LVx1MDAzZWNvbmY7XG4gNDMxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIDQzMjpcdFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gNDMzOlx0XHR1OCB2YXBfaWQgPSAwLCBpO1xuIDQzNDpcdFx0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIDQzNTpcdFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIDQzNjpcdFxuIDQzNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuIDQzODpcdFx0XHR2aWYgPSBhZGFwdGVyLVx1MDAzZXZpZnNbaV07XG4gNDM5Olx0XHRcdGlmICghdmlmKVxuIDQ0MDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ0MTpcdFx0XHRpZiAoKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxuIDQ0MjpcdFx0XHQgICAgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykpXG4gNDQzOlx0XHRcdFx0YnJlYWs7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XHRpZiAoIXZpZilcbiA0NDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ3Olx0XHRtYWNfYmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFkYXB0ZXItXHUwMDNlaHcsXG4gNDQ4Olx0XHRcdFx0XHRcdCAgIHZpZixcbiA0NDk6XHRcdFx0XHRcdFx0ICAgXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XG4gNDUwOlx0XHRpZiAoIW1hY19iY24pIHtcbiA0NTE6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGdldCBiZWFjb24gZnJvbSBtYWM4MDIxMVxcblwmIzM0Oyk7XG4gNDUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0Y29tbW9uLVx1MDAzZWJlYWNvbl9jbnQmIzQzOyYjNDM7O1xuIDQ1NjpcdFx0YmNuX2ZybSA9IChzdHJ1Y3QgcnNpX2RhdGFfZGVzYyAqKXNrYi1cdTAwM2VkYXRhO1xuIDQ1NzpcdFx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNmJjbl9mcm0tXHUwMDNlbGVuX3FubywgbWFjX2Jjbi1cdTAwM2VsZW4sIFJTSV9XSUZJX0RBVEFfUSk7XG4gNDU4Olx0XHRiY25fZnJtLVx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XG4gNDU5Olx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gPSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX01BQ19CQlBfSU5GTyB8XG4gNDYwOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19OT19BQ0tfSU5EIHxcbiA0NjE6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XG4gNDYyOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfVFNGIHxcbiA0NjM6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0lOU0VSVF9TRVFfTk8gfFxuIDQ2NDpcdFx0XHRcdFx0XHQgIFJBVEVfSU5GT19FTkFCTEUpO1xuIDQ2NTpcdFx0YmNuX2ZybS1cdTAwM2VyYXRlX2luZm8gPSBjcHVfdG9fbGUxNih2YXBfaWQgXHUwMDNjXHUwMDNjIDE0KTtcbiA0NjY6XHRcdGJjbl9mcm0tXHUwMDNlcWlkX3RpZCA9IEJFQUNPTl9IV19RO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XG4gNDY5Olx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gPSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUpO1xuIDQ3MDpcdFx0XHRiY25fZnJtLVx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSBcdTAwM2VcdTAwM2UgMTIpO1xuIDQ3MTpcdFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcbiA0NzI6XHRcdFx0YmNuX2ZybS1cdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSk7XG4gNDczOlx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gfD0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFIFx1MDAzZVx1MDAzZSAxMik7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXG4gNDc3Olx0XHRcdGJjbl9mcm0tXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuIDQ3ODpcdFx0ZWxzZVxuIDQ3OTpcdFx0XHRiY25fZnJtLVx1MDAzZXJhdGVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfUkFURV82KTtcbiA0ODA6XHRcbiA0ODE6XHRcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCAmIzQzOyAyXSA9PSAwKVxuIDQ4MjpcdFx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XG4gNDgzOlx0XG4gNDg0Olx0XHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuIDQ4NTpcdFx0aWYgKHRhaWxyb29tIFx1MDAzYyBGUkFNRV9ERVNDX1NaIHx8XG4gNDg2Olx0XHQgICAgbWFjX2Jjbi1cdTAwM2VsZW4gXHUwMDNlIHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikge1xuIDQ4NzpcdFx0XHRkZXZfa2ZyZWVfc2tiKG1hY19iY24pO1xuIDQ4ODpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0bWVtY3B5KFx1MDAyNnNrYi1cdTAwM2VkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLVx1MDAzZWRhdGEsIG1hY19iY24tXHUwMDNlbGVuKTtcbiA0OTI6XHRcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVx1MDAzZWxlbiAmIzQzOyBGUkFNRV9ERVNDX1NaKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4gNDk1Olx0XG4gNDk2Olx0XHRyZXR1cm4gMDtcbiA0OTc6XHR9XG4gNDk4Olx0XG4gNDk5Olx0c3RhdGljIHZvaWQgYmxfY21kX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gNTAwOlx0e1xuIDUwMTpcdFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xuIDUwMjpcdFxuIDUwMzpcdFx0YWRhcHRlci1cdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcbiA1MDQ6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZWJsX2NtZF90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTI4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBSU0kgQnVzIFR5cGUgRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSB0aGUgc3VwcG9ydGVkIGJ1cyB0eXBlcyBmb3IgdGhlIGByc2lgIGRyaXZlci4gQWgsIGBSU0lfU0RJT2AgYW5kIGBSU0lfVVNCYCwgZ290IGl0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGVmZmVjdGl2ZWx5IGVtdWxhdGUgb3IgZnV6eiB0aGUgYFJTSV9VU0JgIGludGVyZmFjZSB3aXRoaW4gb3VyIFFFTVUvU3l6a2FsbGVyIGVudmlyb25tZW50LiBDYW4gd2UgbGV2ZXJhZ2UgdGhlIFVTQiByYXcgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkgb3Igc29tZSBmb3JtIG9mIFVTQiBlbXVsYXRpb24/IFRoYXQmIzM5O3MgdGhlIGtleSB0byBtYWtpbmcgcHJvZ3Jlc3MgaGVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jYCBzb3VyY2UgZmlsZS4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBVU0IgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhbnN3ZXJzIGFyZSBsaWtlbHkgaGlkZGVuLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgVVNCIGNvbW11bmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LypcbiAgIDI6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTQgUmVkcGluZSBTaWduYWxzIEluYy5cbiAgIDM6XHQgKlxuICAgNDpcdCAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxuICAgNTpcdCAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcbiAgIDY6XHQgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICAgNzpcdCAqXG4gICA4Olx0ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwmIzM0O0FTIElTXCYjMzQ7IEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFU1xuICAgOTpcdCAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0ZcbiAgMTA6XHQgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICAxMTpcdCAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVNcbiAgMTI6XHQgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU5cbiAgMTM6XHQgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxuICAxNDpcdCAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4gIDE1Olx0ICpcbiAgMTY6XHQgKi9cbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvcnNpXzkxeC5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7cnNpX3VzYi5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7cnNpX2hhbC5oXCYjMzQ7XG4gIDIzOlx0I2luY2x1ZGUgXCYjMzQ7cnNpX2NvZXguaFwmIzM0O1xuICAyNDpcdFxuICAyNTpcdC8qIERlZmF1bHQgb3BlcmF0aW5nIG1vZGUgaXMgd2xhbiBTVEEgJiM0MzsgQlQgKi9cbiAgMjY6XHRzdGF0aWMgdTE2IGRldl9vcGVyX21vZGUgPSBERVZfT1BNT0RFX1NUQV9CVF9EVUFMO1xuICAyNzpcdG1vZHVsZV9wYXJhbShkZXZfb3Blcl9tb2RlLCB1c2hvcnQsIDA0NDQpO1xuICAyODpcdE1PRFVMRV9QQVJNX0RFU0MoZGV2X29wZXJfbW9kZSwgREVWX09QTU9ERV9QQVJBTV9ERVNDKTtcbiAgMjk6XHRcbiAgMzA6XHRzdGF0aWMgaW50IHJzaV9yeF91cmJfc3VibWl0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGVwX251bSwgZ2ZwX3QgZmxhZ3MpO1xuICAzMTpcdFxuICAzMjpcdC8qKlxuICAzMzpcdCAqIHJzaV91c2JfY2FyZF93cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gdGhlIFVTQiBDYXJkLlxuICAzNDpcdCAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cbiAgMzU6XHQgKiBAYnVmOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgZnJvbSB3aGVyZSB0aGUgZGF0YSBoYXMgdG8gYmUgdGFrZW4uXG4gIDM2Olx0ICogQGxlbjogTGVuZ3RoIHRvIGJlIHdyaXR0ZW4uXG4gIDM3Olx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxuICAzODpcdCAqXG4gIDM5Olx0ICogUmV0dXJuOiBzdGF0dXM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gIDQwOlx0ICovXG4gIDQxOlx0c3RhdGljIGludCByc2lfdXNiX2NhcmRfd3JpdGUoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcbiAgNDI6XHRcdFx0XHQgICAgICB1OCAqYnVmLFxuICA0MzpcdFx0XHRcdCAgICAgIHUxNiBsZW4sXG4gIDQ0Olx0XHRcdFx0ICAgICAgdTggZW5kcG9pbnQpXG4gIDQ1Olx0e1xuICA0NjpcdFx0c3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLVx1MDAzZXJzaV9kZXY7XG4gIDQ3Olx0XHRpbnQgc3RhdHVzO1xuICA0ODpcdFx0dTggKnNlZyA9IGRldi1cdTAwM2V0eF9idWZmZXI7XG4gIDQ5Olx0XHRpbnQgdHJhbnNmZXI7XG4gIDUwOlx0XHRpbnQgZXAgPSBkZXYtXHUwMDNlYnVsa291dF9lbmRwb2ludF9hZGRyW2VuZHBvaW50IC0gMV07XG4gIDUxOlx0XG4gIDUyOlx0XHRtZW1zZXQoc2VnLCAwLCBsZW4gJiM0MzsgUlNJX1VTQl9UWF9IRUFEX1JPT00pO1xuICA1MzpcdFx0bWVtY3B5KHNlZyAmIzQzOyBSU0lfVVNCX1RYX0hFQURfUk9PTSwgYnVmLCBsZW4pO1xuICA1NDpcdFx0bGVuICYjNDM7PSBSU0lfVVNCX1RYX0hFQURfUk9PTTtcbiAgNTU6XHRcdHRyYW5zZmVyID0gbGVuO1xuICA1NjpcdFx0c3RhdHVzID0gdXNiX2J1bGtfbXNnKGRldi1cdTAwM2V1c2JkZXYsXG4gIDU3Olx0XHRcdFx0ICAgICAgdXNiX3NuZGJ1bGtwaXBlKGRldi1cdTAwM2V1c2JkZXYsIGVwKSxcbiAgNTg6XHRcdFx0XHQgICAgICAodm9pZCAqKXNlZyxcbiAgNTk6XHRcdFx0XHQgICAgICAoaW50KWxlbixcbiAgNjA6XHRcdFx0XHQgICAgICBcdTAwMjZ0cmFuc2ZlcixcbiAgNjE6XHRcdFx0XHQgICAgICBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7XG4gIDYyOlx0XG4gIDYzOlx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gIDY0Olx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsXG4gIDY1Olx0XHRcdFx0XCYjMzQ7Q2FyZCB3cml0ZSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlIDolMTBkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuICA2NjpcdFx0XHRkZXYtXHUwMDNld3JpdGVfZmFpbCA9IDE7XG4gIDY3Olx0XHR9XG4gIDY4Olx0XHRyZXR1cm4gc3RhdHVzO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHQvKipcbiAgNzI6XHQgKiByc2lfd3JpdGVfbXVsdGlwbGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG11bHRpcGxlIGJ5dGVzIG9mIGluZm9ybWF0aW9uXG4gIDczOlx0ICpcdFx0XHQgIHRvIHRoZSBVU0IgY2FyZC5cbiAgNzQ6XHQgKiBAYWRhcHRlcjogUG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuXG4gIDc1Olx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxuICA3NjpcdCAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIHRoYXQgaGFzIHRvIGJlIHdyaXR0ZW4uXG4gIDc3Olx0ICogQGNvdW50OiBOdW1iZXIgb2YgbXVsdGlwbGUgYnl0ZXMgdG8gYmUgd3JpdHRlbi5cbiAgNzg6XHQgKlxuICA3OTpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgODA6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NDkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoYXQsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGByc2lfcHJvYmVgIEltcGxlbWVudGF0aW9uIGluIFVTQioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYHJzaV9wcm9iZWAgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFVTQiBwcm90b2NvbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBzcGVjaWZpYyB1c2UgY2FzZXMgZHJpdmluZyB0aGUgbmVlZCBmb3IgdGhpcyBwcm9iZT8gSXMgaXQgYWJvdXQgaW5pdGlhbCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIGNhcGFiaWxpdHkgbmVnb3RpYXRpb24sIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGlzIGNydWNpYWwgdG8gdW5wYWNraW5nIHRoZSAqaG93Ki4KCkkmIzM5O20gbWVudGFsbHkgc2lmdGluZyB0aHJvdWdoIG15IGtub3dsZWRnZSBvZiBVU0IgZGV2aWNlIGVudW1lcmF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0IGludm9sdmVzIHRoZSBzdGFuZGFyZCBVU0IgZGVzY3JpcHRvcnMg4oCTIGRldmljZSwgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlLCBlbmRwb2ludCDigJMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIGR1cmluZyBpbml0aWFsIHNldHVwLiBJIGJldCBgcnNpX3Byb2JlYCBpcyBpbnRyaWNhdGVseSBsaW5rZWQgdG8gaG93IHRoZSBob3N0IGludGVyYWN0cyB3aXRoIHRob3NlIGRlc2NyaXB0b3JzIHRvIGdhdGhlciByZWxldmFudCBpbmZvcm1hdGlvbi4gUGVyaGFwcyBpdCYjMzk7cyBhIHNwZWNpZmljIHZlbmRvci1kZWZpbmVkIGNvbW1hbmQsIGxldmVyYWdpbmcgYSBjb250cm9sIHRyYW5zZmVyLCB0byBlbGljaXQgYSBwYXJ0aWN1bGFyIHNldCBvZiBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGJleW9uZCB0aGUgc3RhbmRhcmQgZGVzY3JpcHRvcnM/IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgdGhhdC4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgbGF5ZXJzIGludm9sdmVkLiBJcyB0aGlzIGEgcHJvdG9jb2wtbGV2ZWwgbWVjaGFuaXNtLCBoYW5kbGVkIGJ5IHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGFuZCBkZXZpY2UgZmlybXdhcmU/IE9yIGRvZXMgaXQgcmVzaWRlIGhpZ2hlciB1cCwgcGVyaGFwcyBpbiB0aGUgZGV2aWNlIGRyaXZlcj8gSSBzdXNwZWN0IGl0JiMzOTtzIGEgbW9yZSBpbnRlZ3JhdGVkIGFwcHJvYWNoLCBsaWtlbHkgaW52b2x2aW5nIGJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgY3JpdGljYWwgaGFuZG9mZnMgYW5kIG1lc3NhZ2UgZXhjaGFuZ2VzIG9jY3VyLgoKVWx0aW1hdGVseSwgSSBleHBlY3QgYHJzaV9wcm9iZWAgaXMgYSBjbGV2ZXIgZGFuY2Ugb2Ygc2lnbmFsaW5nIGFuZCBkYXRhIGV4Y2hhbmdlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHNlcXVlbmNlLCBzdGFydGluZyBmcm9tIHRoZSBob3N0JiMzOTtzIHJlcXVlc3QsIHRocm91Z2ggYW55IGRldmljZS1zaWRlIHByb2Nlc3NpbmcsIGFuZCBiYWNrIHRvIHRoZSBob3N0IHdpdGggdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbi4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRvIGJlZ2luIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFxuIDcwMTpcdFx0bXNsZWVwKDIwKTtcbiA3MDI6XHRcbiA3MDM6XHRcdHJldHVybiAwO1xuIDcwNDpcdH1cbiA3MDU6XHRcbiA3MDY6XHRzdGF0aWMgaW50IHJzaV9yZXNldF9jYXJkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG4gNzA3Olx0e1xuIDcwODpcdFx0aW50IHJldDtcbiA3MDk6XHRcbiA3MTA6XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtSZXNldHRpbmcgQ2FyZC4uLlxcblwmIzM0Oyk7XG4gNzExOlx0XHRyc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX1RBX0hPTERfUkVHLCAweEUsIDQpO1xuIDcxMjpcdFxuIDcxMzpcdFx0LyogVGhpcyBtc2xlZXAgd2lsbCBlbnN1cmUgVGhyZWFkLUFyY2ggcHJvY2Vzc29yIHRvIGdvIHRvIGhvbGRcbiA3MTQ6XHRcdCAqIGFuZCBhbnkgcGVuZGluZyBkbWEgdHJhbnNmZXJzIHRvIHJmIGluIGRldmljZSB0byBmaW5pc2guXG4gNzE1Olx0XHQgKi9cbiA3MTY6XHRcdG1zbGVlcCgxMDApO1xuIDcxNzpcdFxuIDcxODpcdFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFNXQkxfUkVHT1VULFxuIDcxOTpcdFx0XHRcdFx0ICAgICAgIFJTSV9GV19XRFRfRElTQUJMRV9SRVEsXG4gNzIwOlx0XHRcdFx0XHQgICAgICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XG4gNzIxOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gNzIyOlx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0O0Rpc2FibGluZyBmaXJtd2FyZSB3YXRjaGRvZyB0aW1lciBmYWlsZWRcXG5cJiMzNDspO1xuIDcyMzpcdFx0XHRnb3RvIGZhaWw7XG4gNzI0Olx0XHR9XG4gNzI1Olx0XG4gNzI2Olx0XHRpZiAoYWRhcHRlci1cdTAwM2VkZXZpY2VfbW9kZWwgIT0gUlNJX0RFVl85MTE2KSB7XG4gNzI3Olx0XHRcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX1RJTUVSXzEsXG4gNzI4Olx0XHRcdFx0XHRcdCBSU0lfVUxQX1dSSVRFXzIsIDMyKTtcbiA3Mjk6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MzA6XHRcdFx0XHRnb3RvIGZhaWw7XG4gNzMxOlx0XHRcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX1RJTUVSXzIsXG4gNzMyOlx0XHRcdFx0XHRcdCBSU0lfVUxQX1dSSVRFXzAsIDMyKTtcbiA3MzM6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MzQ6XHRcdFx0XHRnb3RvIGZhaWw7XG4gNzM1Olx0XHRcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX0RFTEFZX1RJTUVSXzEsXG4gNzM2Olx0XHRcdFx0XHRcdCBSU0lfVUxQX1dSSVRFXzUwLCAzMik7XG4gNzM3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzM4Olx0XHRcdFx0Z290byBmYWlsO1xuIDczOTpcdFx0XHRyZXQgPSB1c2JfdWxwX3JlYWRfd3JpdGUoYWRhcHRlciwgUlNJX1dBVENIX0RPR19ERUxBWV9USU1FUl8yLFxuIDc0MDpcdFx0XHRcdFx0XHQgUlNJX1VMUF9XUklURV8wLCAzMik7XG4gNzQxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzQyOlx0XHRcdFx0Z290byBmYWlsO1xuIDc0MzpcdFx0XHRyZXQgPSB1c2JfdWxwX3JlYWRfd3JpdGUoYWRhcHRlciwgUlNJX1dBVENIX0RPR19USU1FUl9FTkFCTEUsXG4gNzQ0Olx0XHRcdFx0XHRcdCBSU0lfVUxQX1RJTUVSX0VOQUJMRSwgMzIpO1xuIDc0NTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc0NjpcdFx0XHRcdGdvdG8gZmFpbDtcbiA3NDc6XHRcdH0gZWxzZSB7XG4gNzQ4Olx0XHRcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxuIDc0OTpcdFx0XHRcdFx0XHQgICAgICAgTldQX1dXRF9JTlRFUlJVUFRfVElNRVIsXG4gNzUwOlx0XHRcdFx0XHRcdCAgICAgICBOV1BfV1dEX0lOVF9USU1FUl9DTEtTLFxuIDc1MTpcdFx0XHRcdFx0XHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xuIDc1MjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc1MzpcdFx0XHRcdGdvdG8gZmFpbDtcbiA3NTQ6XHRcdFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXG4gNzU1Olx0XHRcdFx0XHRcdCAgICAgICBOV1BfV1dEX1NZU1RFTV9SRVNFVF9USU1FUixcbiA3NTY6XHRcdFx0XHRcdFx0ICAgICAgIE5XUF9XV0RfU1lTX1JFU0VUX1RJTUVSX0NMS1MsXG4gNzU3Olx0XHRcdFx0XHRcdCAgICAgICBSU0lfOTExNl9SRUdfU0laRSk7XG4gNzU4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzU5Olx0XHRcdFx0Z290byBmYWlsO1xuIDc2MDpcdFx0XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcbiA3NjE6XHRcdFx0XHRcdFx0ICAgICAgIE5XUF9XV0RfTU9ERV9BTkRfUlNUQVJULFxuIDc2MjpcdFx0XHRcdFx0XHQgICAgICAgTldQX1dXRF9USU1FUl9ESVNBQkxFLFxuIDc2MzpcdFx0XHRcdFx0XHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xuIDc2NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc2NTpcdFx0XHRcdGdvdG8gZmFpbDtcbiA3NjY6XHRcdH1cbiA3Njc6XHRcbiA3Njg6XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtSZXNldCBjYXJkIGRvbmVcXG5cJiMzNDspO1xuIDc2OTpcdFx0cmV0dXJuIHJldDtcbiA3NzA6XHRcbiA3NzE6XHRmYWlsOlxuIDc3MjpcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7UmVzZXQgY2FyZCBmYWlsZWRcXG5cJiMzNDspO1xuIDc3MzpcdFx0cmV0dXJuIHJldDtcbiA3NzQ6XHR9XG4gNzc1Olx0XG4gNzc2Olx0LyoqXG4gNzc3Olx0ICogcnNpX3Byb2JlKCkgLSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBrZXJuZWwgd2hlbiB0aGUgZHJpdmVyIHByb3ZpZGVkXG4gNzc4Olx0ICpcdFx0IFZlbmRvciBhbmQgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZC4gQWxsIHRoZSBpbml0aWFsaXphdGlvblxuIDc3OTpcdCAqXHRcdCB3b3JrIGlzIGRvbmUgaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMzgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA1NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGluIGByc2lfcHJlcGFyZV9iZWFjb25gKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGByc2lfcHJlcGFyZV9iZWFjb25gIGRvZXMgYW5kIHdoYXQmIzM5O3MgY2hhbmdlZCB3aXRoIHRoaXMgcGF0Y2guIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCiYjNDM7CXRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7CiYjNDM7CWlmICh0YWlscm9vbSAmbHQ7IEZSQU1FX0RFU0NfU1ogfHwKJiM0MzsJICAgIG1hY19iY24tJmd0O2xlbiAmZ3Q7IHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikgewomIzQzOwkJZGV2X2tmcmVlX3NrYihtYWNfYmNuKTsKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CX0KJiM0MzsKIAltZW1jcHkoJmFtcDtza2ItJmd0O2RhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tJmd0O2RhdGEsIG1hY19iY24tJmd0O2xlbik7CiAJc2tiX3B1dChza2IsIG1hY19iY24tJmd0O2xlbiAmIzQzOyBGUkFNRV9ERVNDX1NaKTsKYGBgCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGJ1ZmZlciBwcmVwYXJhdGlvbiBmb3IgYSBiZWFjb24gZnJhbWUuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgdGFpbHJvb20gY2hlY2suIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgaWYgdGhlIGFsbG9jYXRlZCBgc2tiYCBpbiBgcnNpX3NlbmRfYmVhY29uYCAob3IgZWxzZXdoZXJlKSBkaWRuJiMzOTt0IGhhdmUgZW5vdWdoIHRhaWxyb29tIGZvciB0aGUgZnJhbWUgZGVzY3JpcHRvciBzaXplIChgRlJBTUVfREVTQ19TWmApIHBsdXMgdGhlIGJlYWNvbiBkYXRhIGxlbmd0aCAoYG1hY19iY24tJmd0O2xlbmApLCB0aGUgYHNrYl9wdXRgIGNhbGwgd291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBhIGBCVUdfT05gIG9yIHRoZSBgbWVtY3B5YCBjb3VsZCBvdmVyZmxvdyB0aGUgYHNrYi0mZ3Q7ZGF0YWAgYnVmZmVyLiAgQWxzbywgaWYgdGhlIHRhaWxyb29tIGNoZWNrIGZhaWxzLCBgbWFjX2JjbmAgaXMgZnJlZWQgd2hpY2ggaXMgZ29vZCwgYW5kIGl0IHJldHVybnMgYW4gZXJyb3IuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBleHBsb2l0YWJpbGl0eS4gSXMgdGhpcyBmdW5jdGlvbiwgb3IgdGhlIHJlbGF0ZWQgYHJzaV85MXhgIGRyaXZlciwgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZT8gIGByc2lfOTF4YCBpcyBhIG1hYzgwMjExIGRyaXZlciBmb3IgdGhlIFJlZHBpbmUgU2lnbmFscyA5MTEzLzkxMTYgY2hpcHMsIGNvdmVyaW5nIFVTQiBhbmQgU0RJTyBpbnRlcmZhY2VzLiAgSW4gYSBmdXp6aW5nIGNvbnRleHQgbGlrZSBTeXprYWxsZXIsIGEgVVNCIGRldmljZSBjYW4gYmUgZW11bGF0ZWQgdXNpbmcgdGhlIFVTQiByYXcgZ2FkZ2V0ICh2aGNpL3Jhdy1nYWRnZXQpLgoKV2hlbiB0aGUgUlNJIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBhIG1hYzgwMjExIHdpcmVsZXNzIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHZpYSBgcnNpX21hYzgwMjExX2F0dGFjaGAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCB1c2Vyc3BhY2UsIGFuZCBieSBleHRlbnNpb24gU3l6a2FsbGVyLCBjYW4gaW50ZXJhY3QgdXNpbmcgYG5sODAyMTFgIG5ldGxpbmsgY29tbWFuZHMgdG8gY29uZmlndXJlIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UsIGVpdGhlciBhcyBhbiBBUCBvciBhIFAyUF9HTy4KClNvLCB3aGVuIGJlYWNvbmluZyBpcyB0cmlnZ2VyZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBzdGFuZGFyZCBiZWFjb24gcHJvY2VzcywgYmVhY29uIGNvbmZpZ3VyYXRpb24sIGZpcm13YXJlIGJlYWNvbiByZXF1ZXN0cywgb3IgYnkgdGhlIG1hYzgwMjExIHN0YWNrLCBvciBpZiB0aGUgZmlybXdhcmUgc2VuZHMgYSBiZWFjb24gcmVxdWVzdCBtYW5hZ2VtZW50IHBhY2tldCAoYFJTSV9CRUFDT05fUkVRVUVTVGApLCBgcnNpX21nbXRfcGt0X3JlY3ZgIHdpbGwgYmUgY2FsbGVkLCB3aGljaCBpbiB0dXJuIGNhbGxzIGByc2lfc2VuZF9iZWFjb25gLCB3aGljaCAqZmluYWxseSogY2FsbHMgYHJzaV9wcmVwYXJlX2JlYWNvbmAuIFRoaXMgbG9va3MgbGlrZSB0aGUgYXR0YWNrIHBhdGguCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYHJzaV9tZ210X3BrdF9yZWN2YCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jYCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgaW5wdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE4NTpcdGludCByc2lfbWdtdF9wa3RfcmVjdihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxuMjE4NjpcdHtcbjIxODc6XHRcdHMzMiBtc2dfbGVuID0gKGxlMTZfdG9fY3B1KCooX19sZTE2ICopXHUwMDI2bXNnWzBdKSBcdTAwMjYgMHgwZmZmKTtcbjIxODg6XHRcdHUxNiBtc2dfdHlwZSA9IChtc2dbMl0pO1xuMjE4OTpcdFxuMjE5MDpcdFx0cnNpX2RiZyhGU01fWk9ORSwgXCYjMzQ7JXM6IE1zZyBMZW46ICVkLCBNc2cgVHlwZTogJTR4XFxuXCYjMzQ7LFxuMjE5MTpcdFx0XHRfX2Z1bmNfXywgbXNnX2xlbiwgbXNnX3R5cGUpO1xuMjE5MjpcdFxuMjE5MzpcdFx0c3dpdGNoIChtc2dfdHlwZSkge1xuMjE5NDpcdFx0Y2FzZSBUQV9DT05GSVJNX1RZUEU6XG4yMTk1Olx0XHRcdHJldHVybiByc2lfaGFuZGxlX3RhX2NvbmZpcm1fdHlwZShjb21tb24sIG1zZyk7XG4yMTk2Olx0XHRjYXNlIENBUkRfUkVBRFlfSU5EOlxuMjE5NzpcdFx0XHRjb21tb24tXHUwMDNlaGliZXJuYXRlX3Jlc3VtZSA9IGZhbHNlO1xuMjE5ODpcdFx0XHRyc2lfZGJnKEZTTV9aT05FLCBcJiMzNDslczogQ2FyZCByZWFkeSBpbmRpY2F0aW9uIHJlY2VpdmVkXFxuXCYjMzQ7LFxuMjE5OTpcdFx0XHRcdF9fZnVuY19fKTtcbjIyMDA6XHRcdFx0cmV0dXJuIHJzaV9oYW5kbGVfY2FyZF9yZWFkeShjb21tb24sIG1zZyk7XG4yMjAxOlx0XHRjYXNlIFRYX1NUQVRVU19JTkQ6XG4yMjAyOlx0XHRcdHN3aXRjaCAobXNnW1JTSV9UWF9TVEFUVVNfVFlQRV0pIHtcbjIyMDM6XHRcdFx0Y2FzZSBQUk9CRVJFUV9DT05GSVJNOlxuMjIwNDpcdFx0XHRcdGNvbW1vbi1cdTAwM2VtZ210X3FfYmxvY2sgPSBmYWxzZTtcbjIyMDU6XHRcdFx0XHRyc2lfZGJnKEZTTV9aT05FLCBcJiMzNDslczogUHJvYmUgY29uZmlybSByZWNlaXZlZFxcblwmIzM0OyxcbjIyMDY6XHRcdFx0XHRcdF9fZnVuY19fKTtcbjIyMDc6XHRcdFx0XHRicmVhaztcbjIyMDg6XHRcdFx0Y2FzZSBFQVBPTDRfQ09ORklSTTpcbjIyMDk6XHRcdFx0XHRpZiAobXNnW1JTSV9UWF9TVEFUVVNdKSB7XG4yMjEwOlx0XHRcdFx0XHRjb21tb24tXHUwMDNlZWFwb2w0X2NvbmZpcm0gPSB0cnVlO1xuMjIxMTpcdFx0XHRcdFx0aWYgKCFyc2lfc2VuZF9ibG9ja191bmJsb2NrX2ZyYW1lKGNvbW1vbixcbjIyMTI6XHRcdFx0XHRcdFx0XHRcdFx0ICBmYWxzZSkpXG4yMjEzOlx0XHRcdFx0XHRcdGNvbW1vbi1cdTAwM2Vod19kYXRhX3FzX2Jsb2NrZWQgPSBmYWxzZTtcbjIyMTQ6XHRcdFx0XHR9XG4yMjE1Olx0XHRcdH1cbjIyMTY6XHRcdFx0YnJlYWs7XG4yMjE3Olx0XHRjYXNlIEJFQUNPTl9FVkVOVF9JTkQ6XG4yMjE4Olx0XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtCZWFjb24gZXZlbnRcXG5cJiMzNDspO1xuMjIxOTpcdFx0XHRpZiAoY29tbW9uLVx1MDAzZWZzbV9zdGF0ZSAhPSBGU01fTUFDX0lOSVRfRE9ORSlcbjIyMjA6XHRcdFx0XHRyZXR1cm4gLTE7XG4yMjIxOlx0XHRcdGlmIChjb21tb24tXHUwMDNlaWZhY2VfZG93bilcbjIyMjI6XHRcdFx0XHRyZXR1cm4gLTE7XG4yMjIzOlx0XHRcdGlmICghY29tbW9uLVx1MDAzZWJlYWNvbl9lbmFibGVkKVxuMjIyNDpcdFx0XHRcdHJldHVybiAtMTtcbjIyMjU6XHRcdFx0cnNpX3NlbmRfYmVhY29uKGNvbW1vbik7XG4yMjI2Olx0XHRcdGJyZWFrO1xuMjIyNzpcdFx0Y2FzZSBXT1dMQU5fV0FLRVVQX1JFQVNPTjpcbjIyMjg6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7XFxuXFxuV2FrZXVwIFR5cGU6ICV4XFxuXCYjMzQ7LCBtc2dbMTVdKTtcbjIyMjk6XHRcdFx0c3dpdGNoIChtc2dbMTVdKSB7XG4yMjMwOlx0XHRcdGNhc2UgUlNJX1VOSUNBU1RfTUFHSUNfUEtUOlxuMjIzMTpcdFx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsXG4yMjMyOlx0XHRcdFx0XHRcJiMzNDsqKiogV2FrZXVwIGZvciBVbmljYXN0IG1hZ2ljIHBhY2tldCAqKipcXG5cJiMzNDspO1xuMjIzMzpcdFx0XHRcdGJyZWFrO1xuMjIzNDpcdFx0XHRjYXNlIFJTSV9CUk9BRENBU1RfTUFHSUNQS1Q6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBzaGlwc2hhcGUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBkZXBlbmRlbmN5IHNpdHVhdGlvbiBmb3IgYHJzaV85MXhfaGFsLmNgIGFuZCBzcGVjaWZpY2FsbHkgYHJzaV9wcmVwYXJlX2JlYWNvbmAuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgS2NvbmZpZyBzZXR1cCBpcyBjb3JyZWN0OyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhlc2UgdGhpbmdzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBpbmNsdXNpb24gc2hvdWxkIHJlc2lkZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkIGluIEtjb25maWcsIGFuZCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgdG8gZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0xBTl9WRU5ET1JfUlNJXG4gICAzOlx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGV2aWNlc1wmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCB5XG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gICA3Olx0XG4gICA4Olx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAgOTpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuICAxMDpcdFx0ICBxdWVzdGlvbnMgYWJvdXQgdGhlc2UgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXG4gIDExOlx0XHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTI6XHRcbiAgMTM6XHRpZiBXTEFOX1ZFTkRPUl9SU0lcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgUlNJXzkxWFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyA5MXggV0xBTiBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxuICAxODpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAxOTpcdFx0aGVscFxuICAyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFiZXMgc3VwcG9ydCBmb3IgUlNJIDF4MSBkZXZpY2VzLlxuICAyMTpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBSU0lfREVCVUdGU1xuICAyNDpcdFx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRlYnVnIHN1cHBvcnRcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gUlNJXzkxWFxuICAyNjpcdFx0ZGVmYXVsdCB5XG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgU2F5IFksIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGVuYWJsZSBkZWJ1ZyBzdXBwb3J0LiBUaGlzIG9wdGlvblxuICAyOTpcdFx0IGNyZWF0ZXMgZGVidWdmcyBlbnRyaWVzXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIFJTSV9TRElPXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgU0RJTyBidXMgc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBNTUMgXHUwMDI2XHUwMDI2IFJTSV85MVhcbiAgMzQ6XHRcdGRlZmF1bHQgbVxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBTRElPIGJ1cyBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxuICAzNzpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICAzODpcdFxuICAzOTpcdGNvbmZpZyBSU0lfVVNCXG4gIDQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDQxOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICA0MjpcdFx0ZGVmYXVsdCBtXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cbiAgNDU6XHRcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgUlNJX0NPRVhcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBCVCBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICA1MDpcdFx0ZGVwZW5kcyBvbiAhKEJUPW0gXHUwMDI2XHUwMDI2IFJTSV85MVg9eSlcbiAgNTE6XHRcdGRlZmF1bHQgeVxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBXTEFOIEJUIGNvZXggc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cbiAgNTQ6XHRcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgd2FudCB0byB1c2UgdGhpcyBmZWF0dXJlXG4gIDU1Olx0XHQgIGFuZCB5b3UgaGF2ZSBSUzkxMTMgbW9kdWxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODIxOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBSU0kgV2lyZWxlc3MgRHJpdmVyIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlciBidWlsZCBwcm9jZXNzLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IHdpdGggdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGVgLiBUaGlzIGlzIGdlbmVyYWxseSB3aGVyZSB0aGUgY29yZSBjb21waWxhdGlvbiBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSB0aGUgb2JqZWN0IGZpbGVzIGZvciB0aGlzIGRyaXZlciBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGluZ3MgbGlrZSBzb3VyY2UgZmlsZSBsaXN0cywgaW5jbHVkZSBwYXRocywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgYmFzZWQgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgcHJvYmFibHkgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBhZGFwdGF0aW9ucy4gSeKAmW0gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3ZlIG9yZ2FuaXplZCB0aGUgZHJpdmVyJiMzOTtzIGJ1aWxkIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgY3VzdG9taXphdGlvbiBvciBwb3RlbnRpYWwgcHJvYmxlbXMgbWlnaHQgbGllLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgTWFrZWZpbGUgcHJvdmlkZXMgc29tZSBjbGFyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tYWluLm9cbiAgIDM6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9jb3JlLm9cbiAgIDQ6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tYWM4MDIxMS5vXG4gICA1Olx0cnNpXzkxeC15XHRcdFx0JiM0Mzs9IHJzaV85MXhfbWdtdC5vXG4gICA2Olx0cnNpXzkxeC15XHRcdFx0JiM0Mzs9IHJzaV85MXhfaGFsLm9cbiAgIDc6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9wcy5vXG4gICA4Olx0cnNpXzkxeC0kKENPTkZJR19SU0lfQ09FWClcdCYjNDM7PSByc2lfOTF4X2NvZXgub1xuICAgOTpcdHJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXHQmIzQzOz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cbiAgMTA6XHRcbiAgMTE6XHRyc2lfdXNiLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF91c2IubyByc2lfOTF4X3VzYl9vcHMub1xuICAxMjpcdHJzaV9zZGlvLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX1JTSV85MVgpIFx0XHQmIzQzOz0gcnNpXzkxeC5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX1JTSV9TRElPKVx0XHQmIzQzOz0gcnNpX3NkaW8ub1xuICAxNTpcdG9iai0kKENPTkZJR19SU0lfVVNCKVx0XHQmIzQzOz0gcnNpX3VzYi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODQyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgV0xBTl9WRU5ET1JfUlNJIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBXTEFOX1ZFTkRPUl9SU0lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpbmNsdWRlZC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiB3aXRoaW4gdGhlIEtjb25maWcgaGllcmFyY2h5LiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcGFyZW50IEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAgd2hlbiBuYXZpZ2F0aW5nIHRoZSBjb21wbGV4aXRpZXMgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBvZiB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIHRvIGdyYXNwIGl0cyByb2xlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgY29uZmlndXJhdGlvbiBzcGFjZS4gSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBxdWlja2x5IGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFuZCB1bmNvdmVyIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGRlZmluaXRpb24gb3IgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWc9NTM9Q09ORklHX0FUSDVLPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctNjItIyBDT05GSUdfV0xBTl9WRU5ET1JfUkVBTFRFSyBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWc6NjM6IyBDT05GSUdfV0xBTl9WRU5ET1JfUlNJIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZy02NC0jIENPTkZJR19XTEFOX1ZFTkRPUl9TVCBpcyBub3Qgc2V0XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWc9Nzg9Q09ORklHX0JSQ01GTUFDPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy04Ny0jIENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnOjg4OiMgQ09ORklHX1dMQU5fVkVORE9SX1JTSSBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy04OS0jIENPTkZJR19XTEFOX1ZFTkRPUl9TSUxBQlMgaXMgbm90IHNldFxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2djdzBfZGVmY29uZmlnPTM4PUNPTkZJR19SVEw4MTkyQ1U9bVxuYXJjaC9taXBzL2NvbmZpZ3MvZ2N3MF9kZWZjb25maWctMzktIyBDT05GSUdfUlRMV0lGSV9ERUJVRyBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZzo0MDojIENPTkZJR19XTEFOX1ZFTkRPUl9SU0kgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvZ2N3MF9kZWZjb25maWctNDEtIyBDT05GSUdfV0xBTl9WRU5ET1JfU1QgaXMgbm90IHNldFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLKSAmIzQzOz0gcmVhbHRlay9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SU0kpICYjNDM7PSByc2kvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfU0lMQUJTKSAmIzQzOz0gc2lsYWJzL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoyOmNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMtXHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUlNJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz00Nz1jb25maWcgUlNJX0NPRVhcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy01Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjU3OmVuZGlmICMgV0xBTl9WRU5ET1JfUlNJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjkxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHdpcmVsZXNzIG5ldHdvcmtpbmcuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBkZWZpbmluZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFsbCB0aGUgd2lyZWxlc3MgZHJpdmVycy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RydWN0dXJlIGhlcmU6IHRvcC1sZXZlbCBjaG9pY2VzLCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gaGFyZHdhcmUgb3IgZnVuY3Rpb25hbGl0eSwgYW5kIGhlbHAgdGV4dCB0aGF0IGRlc2NyaWJlcyB3aGF0IGVhY2ggb3B0aW9uIGFjdHVhbGx5IGRvZXMuIFRoaXMgZmlsZSBpcyBnb2luZyB0byB0ZWxsIG1lIHdoYXQgdmFyaWFibGVzIEkgY2FuIHR3ZWFrIHRvIGdldCB0aGUgd2lyZWxlc3Mgc3RhY2sgYmVoYXZpbmcgYXMgSSBuZWVkIGl0IHRvLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk4MQoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBSU0kgV2lyZWxlc3MgRHJpdmVyIEJlYWNvbiBQcmVwYXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0IGFuZCBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBNQUM4MDIxMWAsIGFuZCBgUlNJX1VTQmAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLiBJIGNvbmZpcm1lZCB0aGF0IGByc2lfcHJlcGFyZV9iZWFjb25gIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgZGVjbGFyZWQgaW4gYHJzaV9oYWwuaGAgYW5kIGRlZmluZWQgaW4gYHJzaV85MXhfaGFsLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIG5vbi1zdGF0aWMgbWFrZXMgaXQgYSB2aWFibGUgZW50cnkgcG9pbnQuIEkgYWxzbyBsb29rZWQgYXQgYHJzaV9zZW5kX2JlYWNvbmAsIHdoaWNoICppcyogc3RhdGljLCBzbyB0aGF0JiMzOTtzIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIGByc2lfbWdtdF9wa3RfcmVjdmAgaXMgYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgpBZnRlciByZXZpZXdpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgb25seSBgcnNpX3ByZXBhcmVfYmVhY29uYCB3YXMgbW9kaWZpZWQuCgpCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgYHJzaV9wcmVwYXJlX2JlYWNvbmAgYW5kIGByc2lfbWdtdF9wa3RfcmVjdmAuIEkga25vdyBgUlNJXzkxWGAgYW5kIGBSU0lfVVNCYCBhcmUgdHJpc3RhdGUsIGFuZCBgV0xBTl9WRU5ET1JfUlNJYCBpcyBhIGJvb2xlYW4gYW5kIGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7LgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZpeCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGltcGFjdC4gQW5kIGdpdmVuIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExYCBhbmQgdGhlIFJTSSB3aXJlbGVzcyBVU0IgZHJpdmVyIGVtdWxhdGlvbiwgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHRhcmdldGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBtZWFucyB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlIGVudHJ5cG9pbnRzLiBJdCBhbGwgY2hlY2tzIG91dC4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHRhaWxyb29tIGJvdW5kcyBjaGVja3MgaW4gcnNpX3ByZXBhcmVfYmVhY29uKCkgYmVmb3JlIGNvcHlpbmcgYmVhY29uIGRhdGEsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIGNyYXNoLiBUaGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChSU0lfVVNCKSBhbmQgbWFjODAyMTEgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHRhaWxyb29tIGJvdW5kcyBjaGVja3MgaW4gcnNpX3ByZXBhcmVfYmVhY29uKCkgYmVmb3JlIGNvcHlpbmcgYmVhY29uIGRhdGEsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIGNyYXNoLiBUaGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChSU0lfVVNCKSBhbmQgbWFjODAyMTEgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDlkMWI3OTI5ODcwMWM0YTZiNzVmOTc2MWE2ZDYzZTliN2Y0MjYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCmluZGV4IDdkMjYzMTRhM2U3NmEuLjUwZjc3ZjNlZWU5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCkBAIC00MzEsNiAmIzQzOzQzMSw3IEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBza19idWZmICptYWNfYmNuOwogCXU4IHZhcF9pZCA9IDAsIGk7CiYjNDM7CXVuc2lnbmVkIGludCB0YWlscm9vbTsKIAl1MTYgdGltX29mZnNldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykgewpAQCAtNDgwLDYgJiM0Mzs0ODEsMTMgQEAgaW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChtYWNfYmNuLSZndDtkYXRhW3RpbV9vZmZzZXQgJiM0MzsgMl0gPT0gMCkKIAkJYmNuX2ZybS0mZ3Q7ZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTsKIAomIzQzOwl0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOwomIzQzOwlpZiAodGFpbHJvb20gJmx0OyBGUkFNRV9ERVNDX1NaIHx8CiYjNDM7CSAgICBtYWNfYmNuLSZndDtsZW4gJmd0OyB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHsKJiM0MzsJCWRldl9rZnJlZV9za2IobWFjX2Jjbik7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiAJbWVtY3B5KCZhbXA7c2tiLSZndDtkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLSZndDtkYXRhLCBtYWNfYmNuLSZndDtsZW4pOwogCXNrYl9wdXQoc2tiLCBtYWNfYmNuLSZndDtsZW4gJiM0MzsgRlJBTUVfREVTQ19TWik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIFJTSSBXaXJlbGVzcyBIQUwqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZCBhbmQgd2h5LiBOb3csIEkgc3VzcGVjdCB0aGUgY29yZSBvZiB0aGlzIGJlYWNvbiBoYW5kbGluZyBtaWdodCBiZSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uYCwgc28gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIG9mIHRoYXQgZnVuY3Rpb24uIFNlZWluZyB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMgZ29pbmcgdG8gZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDQyNjpcdHtcbiA0Mjc6XHRcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiA0Mjg6XHRcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xuIDQyOTpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXHUwMDNlcHJpdi1cdTAwM2VodztcbiA0MzA6XHRcdHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IFx1MDAyNmh3LVx1MDAzZWNvbmY7XG4gNDMxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIDQzMjpcdFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gNDMzOlx0XHR1OCB2YXBfaWQgPSAwLCBpO1xuIDQzNDpcdFx0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIDQzNTpcdFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIDQzNjpcdFxuIDQzNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuIDQzODpcdFx0XHR2aWYgPSBhZGFwdGVyLVx1MDAzZXZpZnNbaV07XG4gNDM5Olx0XHRcdGlmICghdmlmKVxuIDQ0MDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ0MTpcdFx0XHRpZiAoKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxuIDQ0MjpcdFx0XHQgICAgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykpXG4gNDQzOlx0XHRcdFx0YnJlYWs7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XHRpZiAoIXZpZilcbiA0NDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ3Olx0XHRtYWNfYmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFkYXB0ZXItXHUwMDNlaHcsXG4gNDQ4Olx0XHRcdFx0XHRcdCAgIHZpZixcbiA0NDk6XHRcdFx0XHRcdFx0ICAgXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XG4gNDUwOlx0XHRpZiAoIW1hY19iY24pIHtcbiA0NTE6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGdldCBiZWFjb24gZnJvbSBtYWM4MDIxMVxcblwmIzM0Oyk7XG4gNDUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0Y29tbW9uLVx1MDAzZWJlYWNvbl9jbnQmIzQzOyYjNDM7O1xuIDQ1NjpcdFx0YmNuX2ZybSA9IChzdHJ1Y3QgcnNpX2RhdGFfZGVzYyAqKXNrYi1cdTAwM2VkYXRhO1xuIDQ1NzpcdFx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNmJjbl9mcm0tXHUwMDNlbGVuX3FubywgbWFjX2Jjbi1cdTAwM2VsZW4sIFJTSV9XSUZJX0RBVEFfUSk7XG4gNDU4Olx0XHRiY25fZnJtLVx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XG4gNDU5Olx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gPSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX01BQ19CQlBfSU5GTyB8XG4gNDYwOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19OT19BQ0tfSU5EIHxcbiA0NjE6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XG4gNDYyOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfVFNGIHxcbiA0NjM6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0lOU0VSVF9TRVFfTk8gfFxuIDQ2NDpcdFx0XHRcdFx0XHQgIFJBVEVfSU5GT19FTkFCTEUpO1xuIDQ2NTpcdFx0YmNuX2ZybS1cdTAwM2VyYXRlX2luZm8gPSBjcHVfdG9fbGUxNih2YXBfaWQgXHUwMDNjXHUwMDNjIDE0KTtcbiA0NjY6XHRcdGJjbl9mcm0tXHUwMDNlcWlkX3RpZCA9IEJFQUNPTl9IV19RO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XG4gNDY5Olx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gPSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUpO1xuIDQ3MDpcdFx0XHRiY25fZnJtLVx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSBcdTAwM2VcdTAwM2UgMTIpO1xuIDQ3MTpcdFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcbiA0NzI6XHRcdFx0YmNuX2ZybS1cdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSk7XG4gNDczOlx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gfD0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFIFx1MDAzZVx1MDAzZSAxMik7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXG4gNDc3Olx0XHRcdGJjbl9mcm0tXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuIDQ3ODpcdFx0ZWxzZVxuIDQ3OTpcdFx0XHRiY25fZnJtLVx1MDAzZXJhdGVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfUkFURV82KTtcbiA0ODA6XHRcbiA0ODE6XHRcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCAmIzQzOyAyXSA9PSAwKVxuIDQ4MjpcdFx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XG4gNDgzOlx0XG4gNDg0Olx0XHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuIDQ4NTpcdFx0aWYgKHRhaWxyb29tIFx1MDAzYyBGUkFNRV9ERVNDX1NaIHx8XG4gNDg2Olx0XHQgICAgbWFjX2Jjbi1cdTAwM2VsZW4gXHUwMDNlIHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikge1xuIDQ4NzpcdFx0XHRkZXZfa2ZyZWVfc2tiKG1hY19iY24pO1xuIDQ4ODpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0bWVtY3B5KFx1MDAyNnNrYi1cdTAwM2VkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLVx1MDAzZWRhdGEsIG1hY19iY24tXHUwMDNlbGVuKTtcbiA0OTI6XHRcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVx1MDAzZWxlbiAmIzQzOyBGUkFNRV9ERVNDX1NaKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4gNDk1Olx0XG4gNDk2Olx0XHRyZXR1cm4gMDtcbiA0OTc6XHR9XG4gNDk4Olx0XG4gNDk5Olx0c3RhdGljIHZvaWQgYmxfY21kX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gNTAwOlx0e1xuIDUwMTpcdFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xuIDUwMjpcdFxuIDUwMzpcdFx0YWRhcHRlci1cdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcbiA1MDQ6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZWJsX2NtZF90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBCZWFjb24mIzM5O3MgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgcnNpX3ByZXBhcmVfYmVhY29uYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogYW5kICp3aHkqIHRoaXMgYmVhY29uIHByZXBhcmF0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZC4gV2hlcmUmIzM5O3MgdGhlIGNhbGxpbmcgY29kZT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHM/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3cuIElzIHRoaXMgcGFydCBvZiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYSBzY2hlZHVsZWQgdGFzaywgb3Igc29tZXRoaW5nIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBldmVudD8gVGhlIGNvbnRleHQgd2lsbCBzaGFwZSBob3cgSSBpbnRlcnByZXQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBzcGVjaWZpYyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24gYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBzdGF0ZSB3aGVuIHRoZSBiZWFjb24gaXMgYmVpbmcgc2V0IHVwLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBxdWlja2x5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIElERSBvciBzb3VyY2UgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIGNhbiBvZmZlci4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2YgYmVhY29uaW5nIG1lY2hhbmlzbSBpbiBwbGF5IGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV9wcmVwYXJlX2JlYWNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zODg9aW50IHJzaV9zZW5kX2J0X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQyNTppbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MjYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz0xNzYzPXN0YXRpYyBpbnQgcnNpX3NlbmRfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzYtXHRcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoxNzc3Olx0aWYgKHJzaV9wcmVwYXJlX2JlYWNvbihjb21tb24sIHNrYikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzc4LVx0XHRyc2lfZGJnKEVSUl9aT05FLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBiZWFjb25cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmg9MjI1PWludCByc2lfcHJlcGFyZV9kYXRhX2Rlc2Moc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oOjIyNjppbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaC0yMjctaW50IHJzaV9zZW5kX3BrdF90b19idXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NjUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIHJzaV9zZW5kX2JlYWNvbiBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcnNpX3NlbmRfYmVhY29uYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmaW5kIGl0IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uIGxvZ2ljIGZvciB0aGUgUlNJIDkxeCB3aXJlbGVzcyBjaGlwc2V0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgYmVhY29uIGZyYW1lcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGV0YWlscyBsaWtlIGhvdyB0aGUgZnJhbWUgaXMgY29uc3RydWN0ZWQsIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBiZWFjb24gc2VuZGluZyBwcm9jZXNzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIGRyaXZlciBhbmQsIHVsdGltYXRlbHksIHRoZSBoYXJkd2FyZSBpdHNlbGYuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzYwOlx0XHRyZXR1cm4gcnNpX3NlbmRfaW50ZXJuYWxfbWdtdF9mcmFtZShjb21tb24sIHNrYik7XG4xNzYxOlx0fVxuMTc2MjpcdFxuMTc2MzpcdHN0YXRpYyBpbnQgcnNpX3NlbmRfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4xNzY0Olx0e1xuMTc2NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4xNzY2Olx0XHR1OCBkd29yZF9hbGlnbl9ieXRlcyA9IDA7XG4xNzY3Olx0XG4xNzY4Olx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9NR01UX1BLVF9TSVpFKTtcbjE3Njk6XHRcdGlmICghc2tiKVxuMTc3MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NzE6XHRcbjE3NzI6XHRcdG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgTUFYX01HTVRfUEtUX1NJWkUpO1xuMTc3MzpcdFxuMTc3NDpcdFx0ZHdvcmRfYWxpZ25fYnl0ZXMgPSAoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEgXHUwMDI2IDB4M2YpO1xuMTc3NTpcdFx0aWYgKGR3b3JkX2FsaWduX2J5dGVzKVxuMTc3NjpcdFx0XHRza2JfcHVsbChza2IsICg2NCAtIGR3b3JkX2FsaWduX2J5dGVzKSk7XG4xNzc3Olx0XHRpZiAocnNpX3ByZXBhcmVfYmVhY29uKGNvbW1vbiwgc2tiKSkge1xuMTc3ODpcdFx0XHRyc2lfZGJnKEVSUl9aT05FLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBiZWFjb25cXG5cJiMzNDspO1xuMTc3OTpcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4xNzgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc4MTpcdFx0fVxuMTc4MjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y29tbW9uLVx1MDAzZXR4X3F1ZXVlW01HTVRfQkVBQ09OX1FdLCBza2IpO1xuMTc4MzpcdFx0cnNpX3NldF9ldmVudChcdTAwMjZjb21tb24tXHUwMDNldHhfdGhyZWFkLmV2ZW50KTtcbjE3ODQ6XHRcdHJzaV9kYmcoREFUQV9UWF9aT05FLCBcJiMzNDslczogQWRkZWQgdG8gYmVhY29uIHF1ZXVlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xNzg1Olx0XG4xNzg2Olx0XHRyZXR1cm4gMDtcbjE3ODc6XHR9XG4xNzg4Olx0XG4xNzg5Olx0I2lmZGVmIENPTkZJR19QTVxuMTc5MDpcdGludCByc2lfc2VuZF93b3dsYW5fcmVxdWVzdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1MTYgZmxhZ3MsXG4xNzkxOlx0XHRcdFx0ICAgIHUxNiBzbGVlcF9zdGF0dXMpXG4xNzkyOlx0e1xuMTc5MzpcdFx0c3RydWN0IHJzaV93b3dsYW5fcmVxICpjbWRfZnJhbWU7XG4xNzk0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTc5NTpcdFx0dTggbGVuZ3RoO1xuMTc5NjpcdFxuMTc5NzpcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7JXM6IFNlbmRpbmcgd293bGFuIHJlcXVlc3QgZnJhbWVcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE3OTg6XHRcbjE3OTk6XHRcdGxlbmd0aCA9IHNpemVvZigqY21kX2ZyYW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc4OQoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEJlYWNvbiBQcmVwYXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgb3JpZ2luYWwgY29kZSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uYCB3YXMgdnVsbmVyYWJsZTogaXQgdXNlZCBgbWVtY3B5YCBhbmQgYHNrYl9wdXRgIHdpdGhvdXQgdmVyaWZ5aW5nIHRoZSBgc2tiYCBoYWQgZW5vdWdoIHNwYWNlIGZvciB0aGUgYmVhY29uIGRhdGEgKGBtYWNfYmNuLSZndDtsZW5gKS4gVGhpcywgb2YgY291cnNlLCBwcmVzZW50ZWQgYSBjbGVhciBidWZmZXIgb3ZlcmZsb3cgcmlza+KAlGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuCgpUaGUgcGF0Y2ggc21hcnRseSBhZGRzIGEgYm91bmRzIGNoZWNrOiBpdCB2ZXJpZmllcyBgc2tiX3RhaWxyb29tKHNrYilgIGlzIHN1ZmZpY2llbnQgYmVmb3JlIHByb2NlZWRpbmcuIElmIHRoZXJlJiMzOTtzIG5vdCBlbm91Z2ggcm9vbSwgdGhlIGJlYWNvbiBidWZmZXIgaXMgZnJlZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLiBUaGF0JiMzOTtzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBJbiBgcnNpX3NlbmRfYmVhY29uYCwgdGhlIGBza2JgIGl0c2VsZiBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgemVyb2VkLCBzbyB0aGF0JiMzOTtzIGEgc29saWQgZm91bmRhdGlvbi4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueXRoaW5nIEtNU0FOIHdvdWxkIGJlIHNwZWNpZmljYWxseSB1c2VmdWwgZm9yPyBJIGRvbiYjMzk7dCBzZWUgaXQuIFRoZSBwcmltYXJ5IGNoYW5nZSBpcyBhICpyZXN0cmljdGlvbiogb24gYWNjZXNzLCBub3QgYW4gaW50cm9kdWN0aW9uIG9mIG5ldyByaXNrcy4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgbWV0aG9kaWNhbGx5OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNoZW5hbmlnYW5zLCBpb2N0bHMsIG9yIHNvY2tldCBvcHRpb25zIGFyZSB0b3VjaGVkLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm9wZS4gVGhlIGNoZWNrIGRlcGVuZHMgb24gYHNrYl90YWlscm9vbWAsIGEga25vd24gdmFsaWQgdmFsdWUuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm9wZS4gVGhlIGJ1ZmZlciBpcyBtZW1zZXQgdG8gemVybyAqYmVmb3JlKiBhbnkgb2YgdGhpcyBoYXBwZW5zLgo0LiAgKipCb3VuZHMgY2hlY2tzIHRoYXQgKmFsbG93KiB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIE5vcGUuIFRoaXMgY2hlY2sgKnByZXZlbnRzKiBpdC4gV2UmIzM5O3JlIGV4cGxpY2l0bHkgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgaW5pdGlhbCB6ZXJvaW5nIG1ha2VzIHRoaXMgYnVsbGV0LXByb29mLgoKU28sIHRoZSBjaGFuZ2UgKnByZXZlbnRzKiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy4gS0FTQU4gaXMgdGhlIHJlbGV2YW50IHNhbml0aXplci4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoaXMgaXMgYSBLQVNBTiBjYXNlLgoKQWxsIGNoZWNrcyBhcmUgZG9uZS4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0czogYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYHNrYl90YWlscm9vbShza2IpYCkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbigpYCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyAob3V0LW9mLWJvdW5kcyB3cml0ZSkgd2hlbiBjb3B5aW5nIGJlYWNvbiBkYXRhIChgbWFjX2Jjbi1cdTAwM2VkYXRhYCkgaW50byB0aGUgdGFyZ2V0IGBza2JgLiBcblxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBwcmV2ZW50aW9uIGZpeC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgYnVmZmVyIG92ZXJmbG93cyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4gKGFuZCBza2IgYXNzZXJ0aW9ucykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDM6MTYuMjM5MzExMzQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDQ2MjMxMzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyc2lfcHJlcGFyZV9iZWFjb25cIixcbiAgICBcInJzaV9tZ210X3BrdF9yZWN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVxcdTAwM2VkYXRhYCkgaW50byB0aGUgdGFyZ2V0IGBza2JgLiBcXG5cXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyB0YWlscm9vbSBib3VuZHMgY2hlY2tzIGluIHJzaV9wcmVwYXJlX2JlYWNvbigpIGJlZm9yZSBjb3B5aW5nIGJlYWNvbiBkYXRhLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvciBjcmFzaC4gVGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoUlNJX1VTQikgYW5kIG1hYzgwMjExIGluIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0MzoxNi4yMzkzMTU2NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTI2NTkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZDlkMWI3OTI5ODcwMWM0YTZiNzVmOTc2MWE2ZDYzZTliN2Y0MjYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDE5OjQzOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNcXG5pbmRleCA3ZDI2MzE0YTNlNzZhLi41MGY3N2YzZWVlOTJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNcXG5AQCAtNDMxLDYgKzQzMSw3IEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XFxuIFxcdHU4IHZhcF9pZCA9IDAsIGk7XFxuK1xcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcXG4gXFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuQEAgLTQ4MCw2ICs0ODEsMTMgQEAgaW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAobWFjX2Jjbi1cXHUwMDNlZGF0YVt0aW1fb2Zmc2V0ICsgMl0gPT0gMClcXG4gXFx0XFx0YmNuX2ZybS1cXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcXG4gXFxuK1xcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XFxuK1xcdGlmICh0YWlscm9vbSBcXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcXG4rXFx0ICAgIG1hY19iY24tXFx1MDAzZWxlbiBcXHUwMDNlIHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiKG1hY19iY24pO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXHR9XFxuK1xcbiBcXHRtZW1jcHkoXFx1MDAyNnNrYi1cXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cXHUwMDNlZGF0YSwgbWFjX2Jjbi1cXHUwMDNlbGVuKTtcXG4gXFx0c2tiX3B1dChza2IsIG1hY19iY24tXFx1MDAzZWxlbiArIEZSQU1FX0RFU0NfU1opO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDM6MTcuNzUzMTY2NTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTg5NjYyNjMxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9wcmVwYXJlX2JlYWNvblwiLFxuICAgIFwicnNpX21nbXRfcGt0X3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgdGFpbHJvb20gYm91bmRzIGNoZWNrcyBpbiByc2lfcHJlcGFyZV9iZWFjb24oKSBiZWZvcmUgY29weWluZyBiZWFjb24gZGF0YSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgY3Jhc2guIFRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlciBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKFJTSV9VU0IpIGFuZCBtYWM4MDIxMSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQ5ZDFiNzkyOTg3MDFjNGE2Yjc1Zjk3NjFhNmQ2M2U5YjdmNDI2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE5OjQzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuaW5kZXggN2QyNjMxNGEzZTc2YS4uNTBmNzdmM2VlZTkyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuQEAgLTQzMSw2ICs0MzEsNyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gXHR1OCB2YXBfaWQgPSAwLCBpO1xuK1x0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcbkBAIC00ODAsNiArNDgxLDEzIEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCArIDJdID09IDApXG4gXHRcdGJjbl9mcm0tXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcbiBcbitcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XG4rXHRpZiAodGFpbHJvb20gXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcbitcdCAgICBtYWNfYmNuLVx1MDAzZWxlbiBcdTAwM2UgdGFpbHJvb20gLSBGUkFNRV9ERVNDX1NaKSB7XG4rXHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4gXHRtZW1jcHkoXHUwMDI2c2tiLVx1MDAzZWRhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tXHUwMDNlZGF0YSwgbWFjX2Jjbi1cdTAwM2VsZW4pO1xuIFx0c2tiX3B1dChza2IsIG1hY19iY24tXHUwMDNlbGVuICsgRlJBTUVfREVTQ19TWik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0MzoxNy43NTMxNjgwODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTY1MDE5ODExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBUaGUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgcnNpX3ByZXBhcmVfYmVhY29uYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNgLiBSaWdodCwgc28gdGhpcyBpcyB0aGUgUmVkcGluZSBTaWduYWxzIDkxeCB3aXJlbGVzcyBkcml2ZXIuIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhpcyBVU0Igb3IgU0RJTz8gQW5kIGp1c3QgYXMgaW1wb3J0YW50bHksIGNhbiBJIGZ1enogaXQgZWZmZWN0aXZlbHk/IElmIGl0J3MgVVNCLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIHN5emthbGxlcidzIFVTQiByYXcgZ2FkZ2V0IG9yIHNvbWUga2luZCBvZiBVU0IgZW11bGF0aW9uIHRvIGdldCBhdCBpdC4gVGhhdOKAmXMgdGhlIGlkZWFsIHNjZW5hcmlvIGZvciB0aG9yb3VnaCB0ZXN0aW5nLiBJZiBub3QsIHdoYXQgb3RoZXIgYXR0YWNrIHN1cmZhY2VzIGFyZSBwcmVzZW50P1xuXG5MZXQncyBxdWlja2x5IHNlYXJjaCBmb3Igb3RoZXIgYHJzaWAgZHJpdmVyIGZpbGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpdHMgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGRldGVybWluZSBob3cgYWNjZXNzaWJsZSB0aGlzIGZ1bmN0aW9uIGlzLCBhbmQgd2hhdCBhdHRhY2sgdmVjdG9ycyBtaWdodCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQzOjI5LjQwMzM2ODQ5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYwODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSU0lfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE5NjAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTc6XFx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE4LVxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTIyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjIzOmNvbmZpZyBSU0lfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFJTSV85MVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0yNi1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjMxOmNvbmZpZyBSU0lfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgU0RJTyBidXMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIE1NQyBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMzQtXFx0ZGVmYXVsdCBtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzozOTpjb25maWcgUlNJX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQwLVxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQxOlxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IFJTSV85MVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy00Mi1cXHRkZWZhdWx0IG1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQ3OmNvbmZpZyBSU0lfQ09FWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBXTEFOIEJUIENvZXhpc3RlbmNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBCVCBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NTA6XFx0ZGVwZW5kcyBvbiAhKEJUPW0gXFx1MDAyNlxcdTAwMjYgUlNJXzkxWD15KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTUxLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTc9cnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9wcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjg6cnNpXzkxeC0kKENPTkZJR19SU0lfQ09FWClcXHQrPSByc2lfOTF4X2NvZXgub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZTo5OnJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXFx0Kz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU9MTI9cnNpX3NkaW8teVxcdFxcdFxcdCs9IHJzaV85MXhfc2Rpby5vIHJzaV85MXhfc2Rpb19vcHMub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfUlNJXzkxWCkgXFx0XFx0Kz0gcnNpXzkxeC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19SU0lfU0RJTylcXHRcXHQrPSByc2lfc2Rpby5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19SU0lfVVNCKVxcdFxcdCs9IHJzaV91c2Iub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTIyPXN0YXRpYyBlbnVtIHJzaV9jb2V4X3F1ZXVlcyByc2lfY29leF9kZXRlcm1pbmVfY29leF9xXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMjQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyNTpcXHRlbnVtIHJzaV9jb2V4X3F1ZXVlcyBxX251bSA9IFJTSV9DT0VYX1FfSU5WQUxJRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjI3OlxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZjb2V4X2NiLVxcdTAwM2Vjb2V4X3R4X3FzW1JTSV9DT0VYX1FfQ09NTU9OXSkgXFx1MDAzZSAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyODpcXHRcXHRxX251bSA9IFJTSV9DT0VYX1FfQ09NTU9OO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyOTpcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2Y29leF9jYi1cXHUwMDNlY29leF90eF9xc1tSU0lfQ09FWF9RX0JUXSkgXFx1MDAzZSAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzozMDpcXHRcXHRxX251bSA9IFJTSV9DT0VYX1FfQlQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjMxOlxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZjb2V4X2NiLVxcdTAwM2Vjb2V4X3R4X3FzW1JTSV9DT0VYX1FfV0xBTl0pIFxcdTAwM2UgMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MzI6XFx0XFx0cV9udW0gPSBSU0lfQ09FWF9RX1dMQU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTMzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTM3PXN0YXRpYyB2b2lkIHJzaV9jb2V4X3NjaGVkX3R4X3BrdHMoc3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTM4LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6Mzk6XFx0ZW51bSByc2lfY29leF9xdWV1ZXMgY29leF9xID0gUlNJX0NPRVhfUV9JTlZBTElEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy00MC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo0NjpcXHRcXHRpZiAoY29leF9xID09IFJTSV9DT0VYX1FfQlQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6NDc6XFx0XFx0XFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNmNvZXhfY2ItXFx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9CVF0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy00OC1cXHRcXHRcXHRyc2lfc2VuZF9idF9wa3QoY29leF9jYi1cXHUwMDNlcHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNDktXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo1MDpcXHR9IHdoaWxlIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9JTlZBTElEKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTY4PWludCByc2lfY29leF9yZWN2X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy02OS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjcwOlxcdHU4IG1zZ190eXBlID0gbXNnW1JTSV9SWF9ERVNDX01TR19UWVBFX09GRlNFVF07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTcxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTg3PXN0YXRpYyBpbmxpbmUgaW50IHJzaV9tYXBfY29leF9xKHU4IGhhbF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy04OS1cXHRzd2l0Y2ggKGhhbF9xdWV1ZSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MDpcXHRjYXNlIFJTSV9DT0VYX1E6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjkxOlxcdFxcdHJldHVybiBSU0lfQ09FWF9RX0NPTU1PTjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTI6XFx0Y2FzZSBSU0lfV0xBTl9ROlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MzpcXHRcXHRyZXR1cm4gUlNJX0NPRVhfUV9XTEFOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NDpcXHRjYXNlIFJTSV9CVF9ROlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NTpcXHRcXHRyZXR1cm4gUlNJX0NPRVhfUV9CVDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtOTYtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NzpcXHRyZXR1cm4gUlNJX0NPRVhfUV9JTlZBTElEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy05OC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9MTAwPWludCByc2lfY29leF9zZW5kX3BrdCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBoYWxfcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTA4LVxcdGNvZXhfcSA9IHJzaV9tYXBfY29leF9xKGhhbF9xdWV1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjEwOTpcXHRpZiAoY29leF9xID09IFJTSV9DT0VYX1FfSU5WQUxJRCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMTAtXFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIkludmFsaWQgY29leCBxdWV1ZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTEyLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTEzOlxcdGlmIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9DT01NT04gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTE0OlxcdCAgICBjb2V4X3EgIT0gUlNJX0NPRVhfUV9XTEFOKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTExNS1cXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Y29leF9jYi1cXHUwMDNlY29leF90eF9xc1tjb2V4X3FdLCBza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTkxPXN0YXRpYyB1MzIgcnNpX2dldF9udW1fcGt0c19kZXF1ZXVlKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4IHFfbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTEwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MTAyOlxcdHJhdGUuYml0cmF0ZSA9IFJTSV9SQVRFX01DUzAgKiA1ICogMTA7IC8qIENvbnZlcnQgdG8gS2JwcyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0xMDMtXFx0aWYgKHFfbnVtID09IFZJX1EpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM9MjYxPXZvaWQgcnNpX2NvcmVfcW9zX3Byb2Nlc3NvcihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTMwNy1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozMDg6I2lmZGVmIENPTkZJR19SU0lfQ09FWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zMDktXFx0XFx0XFx0aWYgKGNvbW1vbi1cXHUwMDNlY29leF9tb2RlIFxcdTAwM2UgMSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zMTAtXFx0XFx0XFx0XFx0c3RhdHVzID0gcnNpX2NvZXhfc2VuZF9wa3QoY29tbW9uLCBza2IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjMxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBSU0lfV0xBTl9RKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzEyLVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzE3LVxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IHJzaV9zZW5kX2RhdGFfcGt0KGNvbW1vbiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MzE4OiNpZmRlZiBDT05GSUdfUlNJX0NPRVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzE5LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYz0zNTI9c3RydWN0IGllZWU4MDIxMV92aWYgKnJzaV9nZXRfdmlmKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4ICptYWMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzU2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozNTc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM1OC1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTM3ND12b2lkIHJzaV9jb3JlX3htaXQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zOTItXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozOTM6XFx0aWYgKGNvbW1vbi1cXHUwMDNld293X2ZsYWdzIFxcdTAwMjYgUlNJX1dPV19FTkFCTEVEKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM5NC1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTQyMC1cXHRcXHRcXHRyc2lfaGFsX3NlbmRfc3RhX25vdGlmeV9mcmFtZShjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjQyMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSU0lfSUZUWVBFX1NUQVRJT04sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTQyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBTVEFfQ09OTkVDVEVELCBic3MtXFx1MDAzZWJzc2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9NTg9aW50IHJzaV9wcmVwYXJlX21nbXRfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA1LVxcdHJzaV9zZXRfbGVuX3FubyhcXHUwMDI2bWdtdF9kZXNjLVxcdTAwM2VsZW5fcW5vLCAoc2tiLVxcdTAwM2VsZW4gLSBGUkFNRV9ERVNDX1NaKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMDY6XFx0XFx0XFx0UlNJX1dJRklfTUdNVF9RKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDctXFx0bWdtdF9kZXNjLVxcdTAwM2VmcmFtZV90eXBlID0gVFhfRE9UMTFfTUdNVDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExMS1cXHRpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3JlcSh3aC1cXHUwMDNlZnJhbWVfY29udHJvbCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTEyOlxcdFxcdG1nbXRfZGVzYy1cXHUwMDNlZnJhbWVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9JTlNFUlRfU0VRX0lOX0ZXKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTMtXFx0bWdtdF9kZXNjLVxcdTAwM2VmcmFtZV9pbmZvIHw9IGNwdV90b19sZTE2KFJBVEVfSU5GT19FTkFCTEUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNC1cXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2gtXFx1MDAzZWFkZHIxKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTU6XFx0XFx0bWdtdF9kZXNjLVxcdTAwM2VmcmFtZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9CUk9BRENBU1RfUEtUKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTktXFx0aWYgKChjb21tb24tXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopIFxcdTAwMjZcXHUwMDI2ICFjb21tb24tXFx1MDAzZXAycF9lbmFibGVkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyMDpcXHRcXHRtZ210X2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEyMS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTIyOlxcdFxcdG1nbXRfZGVzYy1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTI3LVxcdGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcCh3aC1cXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMjg6XFx0XFx0bWdtdF9kZXNjLVxcdTAwM2VtaXNjX2ZsYWdzIHw9IChSU0lfQUREX0RFTFRBX1RTRl9WQVBfSUQgfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyOTpcXHRcXHRcXHRcXHRcXHQgIFJTSV9GRVRDSF9SRVRSWV9DTlRfRlJNX0hTVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTMwLSNkZWZpbmUgUFJPQkVfUkVTUF9SRVRSWV9DTlRcXHQzXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xNDQtXFx0bWdtdF9kZXNjLVxcdTAwM2VyYXRlX2luZm8gfD1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxNDU6XFx0XFx0Y3B1X3RvX2xlMTYoKHR4X3BhcmFtcy1cXHUwMDNldmFwX2lkIFxcdTAwM2NcXHUwMDNjIFJTSV9ERVNDX1ZBUF9JRF9PRlNUKSBcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTQ2OlxcdFxcdFxcdCAgICBSU0lfREVTQ19WQVBfSURfTUFTSyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTUyPWludCByc2lfcHJlcGFyZV9kYXRhX2Rlc2Moc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwMC1cXHRcXHRpZWVlODAyMTFfc2l6ZSArPSAyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIwMTpcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZW1hY19mbGFncyB8PSBjcHVfdG9fbGUxNihSU0lfUU9TX0VOQUJMRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjAyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwNi1cXHQgICAgKGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID09IFBTX0VOQUJMRUQpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIwNzpcXHRcXHR3aC1cXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihSU0lfU0VUX1BTX0VOQUJMRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjA4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjE0LVxcdFxcdFxcdGllZWU4MDIxMV9zaXplICs9IDg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjE1OlxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9FTkNSWVBUX1BLVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjE2LVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMTctXFx0cnNpX3NldF9sZW5fcW5vKFxcdTAwMjZkYXRhX2Rlc2MtXFx1MDAzZWxlbl9xbm8sIChza2ItXFx1MDAzZWxlbiAtIEZSQU1FX0RFU0NfU1opLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIxODpcXHRcXHRcXHRSU0lfV0lGSV9EQVRBX1EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIxOS1cXHRkYXRhX2Rlc2MtXFx1MDAzZWhlYWRlcl9sZW4gPSBpZWVlODAyMTFfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI0Mi1cXHRcXHRpZiAoY29tbW9uLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF81R0haKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI0MzpcXHRcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI0NC1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjQ1OlxcdFxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjQ2OlxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9SRUtFWV9QVVJQT1NFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNDc6XFx0XFx0ZGF0YV9kZXNjLVxcdTAwM2VtaXNjX2ZsYWdzIHw9IFJTSV9GRVRDSF9SRVRSWV9DTlRfRlJNX0hTVDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yNDgtI2RlZmluZSBFQVBPTF9SRVRSWV9DTlQgMTVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI1NS1cXHRcXHRcXHRcXHRcXHQoc2tiLVxcdTAwM2VsZW4gLSBGUkFNRV9ERVNDX1NaKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNTY6XFx0XFx0XFx0XFx0XFx0UlNJX1dJRklfTUdNVF9RKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yNTctXFx0XFx0aWYgKCgoc2tiLVxcdTAwM2VsZW4gLSBoZWFkZXJfc2l6ZSkgPT0gRUFQT0w0X1BBQ0tFVF9MRU4pIHx8XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yNTktXFx0XFx0XFx0ZGF0YV9kZXNjLVxcdTAwM2VtaXNjX2ZsYWdzIHw9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjYwOlxcdFxcdFxcdFxcdFJTSV9ERVNDX1JFUVVJUkVfQ0ZNX1RPX0hPU1Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjYxLVxcdFxcdFxcdHh0ZW5kX2Rlc2MtXFx1MDAzZWNvbmZpcm1fZnJhbWVfdHlwZSA9IEVBUE9MNF9DT05GSVJNO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjcyLVxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlZnJhbWVfaW5mbyA9IGNwdV90b19sZTE2KFJBVEVfSU5GT19FTkFCTEUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI3MzpcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0JST0FEQ0FTVF9QS1QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3NC1cXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZXN0YV9pZCA9IHZhcF9pZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3OC1cXHRcXHRcXHRpZiAoY29tbW9uLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF81R0haKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI3OTpcXHRcXHRcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI4MC1cXHRcXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjgxOlxcdFxcdFxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjgyLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI4OS1cXHRkYXRhX2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyB8PVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI5MDpcXHRcXHRjcHVfdG9fbGUxNigodHhfcGFyYW1zLVxcdTAwM2V2YXBfaWQgXFx1MDAzY1xcdTAwM2MgUlNJX0RFU0NfVkFQX0lEX09GU1QpIFxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyOTE6XFx0XFx0XFx0ICAgIFJTSV9ERVNDX1ZBUF9JRF9NQVNLKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yOTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zMzc9aW50IHJzaV9zZW5kX21nbXRfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0zNzMtXFx0XFx0XFx0XFxcIiVzOiBibG9ja2luZyBtZ210IHF1ZXVlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6Mzc0OlxcdFxcdG1nbXRfZGVzYy1cXHUwMDNlbWlzY19mbGFncyA9IFJTSV9ERVNDX1JFUVVJUkVfQ0ZNX1RPX0hPU1Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMzc1LVxcdFxcdHh0ZW5kX2Rlc2MtXFx1MDAzZWNvbmZpcm1fZnJhbWVfdHlwZSA9IFBST0JFUkVRX0NPTkZJUk07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zODg9aW50IHJzaV9zZW5kX2J0X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMzk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjM5NTpcXHRpZiAocXVldWVubyA9PSBSU0lfQlRfTUdNVF9RKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMzk2LVxcdFxcdHN0YXR1cyA9IHJzaV9zZW5kX3BrdF90b19idXMoY29tbW9uLCBza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDEyLVxcdHJzaV9zZXRfbGVuX3FubyhcXHUwMDI2YnRfZGVzYy1cXHUwMDNlbGVuX3FubywgKHNrYi1cXHUwMDNlbGVuIC0gRlJBTUVfREVTQ19TWiksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDEzOlxcdFxcdFxcdFJTSV9CVF9EQVRBX1EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQxNC1cXHRidF9kZXNjLVxcdTAwM2VidF9wa3RfdHlwZSA9IGNwdV90b19sZTE2KGJ0X2NiKHNrYiktXFx1MDAzZXBrdF90eXBlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTQyNT1pbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDM3OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQzOC1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDU2LVxcdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDU3OlxcdHJzaV9zZXRfbGVuX3FubyhcXHUwMDI2YmNuX2ZybS1cXHUwMDNlbGVuX3FubywgbWFjX2Jjbi1cXHUwMDNlbGVuLCBSU0lfV0lGSV9EQVRBX1EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ1OC1cXHRiY25fZnJtLVxcdTAwM2VoZWFkZXJfbGVuID0gTUlOXzgwMl8xMV9IRFJfTEVOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ1OTpcXHRiY25fZnJtLVxcdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ2MDpcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfTk9fQUNLX0lORCB8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYxOlxcdFxcdFxcdFxcdFxcdCAgUlNJX0RBVEFfREVTQ19CRUFDT05fRlJBTUUgfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ2MjpcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYzOlxcdFxcdFxcdFxcdFxcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfU0VRX05PIHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NjQtXFx0XFx0XFx0XFx0XFx0ICBSQVRFX0lORk9fRU5BQkxFKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ3Ni1cXHRpZiAoY29tbW9uLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF8yR0haKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ3NzpcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDc4LVxcdGVsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0Nzk6XFx0XFx0YmNuX2ZybS1cXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ4MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00ODEtXFx0aWYgKG1hY19iY24tXFx1MDAzZWRhdGFbdGltX29mZnNldCArIDJdID09IDApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDgyOlxcdFxcdGJjbl9mcm0tXFx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDgzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9NjUwPXN0YXRpYyBpbnQgYmxfd3JpdGVfaGVhZGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4ICpmbGFzaF9jb250ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNjcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjY3MTpcXHRpZiAoYWRhcHRlci1cXHUwMDNlcnNpX2hvc3RfaW50ZiA9PSBSU0lfSE9TVF9JTlRGX1VTQikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY3Mi1cXHRcXHR3cml0ZV9hZGRyID0gUElOR19CVUZGRVJfQUREUkVTUztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY4OS1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NjkwOlxcdFxcdHdyaXRlX2FkZHIgPSBSU0lfU0RfUkVRVUVTVF9NQVNURVIgfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY5MS1cXHRcXHRcXHQgICAgIChQSU5HX0JVRkZFUl9BRERSRVNTIFxcdTAwMjYgMHhGRkZGKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTg1MD1zdGF0aWMgaW50IHJzaV9oYWxfcHJlcGFyZV9md2xvYWQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2MC1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZyZWdvdXRfdmFsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjg2MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9DT01NT05fUkVHX1NJWkUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2Mi1cXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtODg1LVxcdFxcdFxcdFxcdFxcdCAgICBSRUdPVVRfSU5WQUxJRCBcXHUwMDNjXFx1MDAzYyA4KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo4ODY6XFx0XFx0XFx0XFx0XFx0ICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtODg3LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTAxMT1zdGF0aWMgaW50IHJzaV9sb2FkXzkxMTZfZmlybXdhcmUoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTAyNjpcXHRpZiAoYWRhcHRlci1cXHUwMDNlcnNpX2hvc3RfaW50ZiA9PSBSU0lfSE9TVF9JTlRGX1VTQikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMjctXFx0XFx0c3RhdHVzID0gYmxfY21kKGFkYXB0ZXIsIFBPTExJTkdfTU9ERSwgQ01EX1BBU1MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDM0LVxcdFxcdFxcdFxcdFxcdCAgIFJBTV8zODRLX0FDQ0VTU19GUk9NX1RBLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwMzU6XFx0XFx0XFx0XFx0XFx0ICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMzYtXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA3MjpcXHRpZiAoKih1MTYgKilmd19wID09IFJTSV85MTE2X0ZXX01BR0lDX1dPUkQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDczLVxcdFxcdG1lbWNweShcXHUwMDI2Ym9vdGxvYWRfZHMsIGZ3X3AsIHNpemVvZihzdHJ1Y3QgYm9vdGxvYWRfZHMpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwODMtXFx0XFx0XFx0bGVuID0gbGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA4NDpcXHRcXHRcXHQgICAgICBSU0lfQkxfQ1RSTF9MRU5fTUFTSztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDg1LVxcdFxcdFxcdHJzaV9kYmcoSU5GT19aT05FLCBcXFwibGVuZ3RoICVkIGRlc3RpbmF0aW9uICV4XFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA5OC1cXHRcXHRcXHRpZiAobGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA5OTpcXHRcXHRcXHQgICAgUlNJX0JMX0NUUkxfTEFTVF9FTlRSWSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTAwLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEyMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTIxOlxcdGlmIChhZGFwdGVyLVxcdTAwM2Vyc2lfaG9zdF9pbnRmID09IFJTSV9IT1NUX0lOVEZfU0RJTykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExMjItXFx0XFx0aWYgKGhpZl9vcHMtXFx1MDAzZXRhX3Jlc2V0KGFkYXB0ZXIpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTE0MD1pbnQgcnNpX2hhbF9kZXZpY2VfaW5pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE0NS1cXHRzd2l0Y2ggKGFkYXB0ZXItXFx1MDAzZWRldmljZV9tb2RlbCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjExNDY6XFx0Y2FzZSBSU0lfREVWXzkxMTM6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE0Ny1cXHRcXHRzdGF0dXMgPSByc2lfaGFsX3ByZXBhcmVfZndsb2FkKGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE1Ni1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTU3OlxcdGNhc2UgUlNJX0RFVl85MTE2OlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNTgtXFx0XFx0c3RhdHVzID0gcnNpX2hhbF9wcmVwYXJlX2Z3bG9hZChhZGFwdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTA2PXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByc2lfcmF0ZXNbMTJdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA3OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8wMSAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xIH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDg6XFx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzAyICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzIgfSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwOTpcXHR7IC5iaXRyYXRlID0gU1REX1JBVEVfNV81ICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfNV81IH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTA6XFx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzExICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzExIH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTE6XFx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzA2ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzYgfSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMjpcXHR7IC5iaXRyYXRlID0gU1REX1JBVEVfMDkgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfOSB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEzOlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8xMiAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xMiB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE0OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8xOCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xOCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE1OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8yNCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8yNCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE2OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8zNiAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8zNiB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE3OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV80OCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV80OCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE4OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV81NCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV81NCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTE5LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEyMT1jb25zdCB1MTYgcnNpX21jc3JhdGVzWzhdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTIyOlxcdFJTSV9SQVRFX01DUzAsIFJTSV9SQVRFX01DUzEsIFJTSV9SQVRFX01DUzIsIFJTSV9SQVRFX01DUzMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMjM6XFx0UlNJX1JBVEVfTUNTNCwgUlNJX1JBVEVfTUNTNSwgUlNJX1JBVEVfTUNTNiwgUlNJX1JBVEVfTUNTN1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTI0LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTIzMz1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9od19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0yNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoyNDc6XFx0aWYgKChjb21tb24tXFx1MDAzZXdvd19mbGFncyBcXHUwMDI2IFJTSV9XT1dfRU5BQkxFRCkgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI0OC1cXHQgICAgc2Nhbl9yZXEtXFx1MDAzZW5fY2hhbm5lbHMgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjYyLVxcdGNvbW1vbi1cXHUwMDNlaHdzY2FuID0gc2Nhbl9yZXE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoyNjM6XFx0aWYgKCFyc2lfc2VuZF9iZ3NjYW5fcGFyYW1zKGNvbW1vbiwgUlNJX1NUQVJUX0JHU0NBTikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI2NC1cXHRcXHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wcm9iZV9yZXEoY29tbW9uLCB2aWYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTI3ND1zdGF0aWMgdm9pZCByc2lfbWFjODAyMTFfY2FuY2VsX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI4NC1cXHRpZiAoY29tbW9uLVxcdTAwM2ViZ3NjYW5fZW4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjI4NTpcXHRcXHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wYXJhbXMoY29tbW9uLCBSU0lfU1RPUF9CR1NDQU4pKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjg2LVxcdFxcdFxcdGNvbW1vbi1cXHUwMDNlYmdzY2FuX2VuID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTMwMj12b2lkIHJzaV9tYWM4MDIxMV9kZXRhY2goc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMzIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MzIxOiNpZmRlZiBDT05GSUdfUlNJX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTMyMi1cXHRyc2lfcmVtb3ZlX2RiZ2ZzKGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz00MzM9c3RhdGljIGludCByc2lfbWFwX2ludGZfbW9kZShlbnVtIG5sODAyMTFfaWZ0eXBlIHZpZl90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00MzYtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDM3OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX1NUQTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQzOC1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDM5OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX0FQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQwLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0MTpcXHRcXHRyZXR1cm4gUlNJX09QTU9ERV9QMlBfQ0xJRU5UO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQyLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0MzpcXHRcXHRyZXR1cm4gUlNJX09QTU9ERV9QMlBfQ0xJRU5UO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQ0LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDQ1OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX1AyUF9HTztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ0Ni1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDQ3OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQ4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9NDU5PXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ3Mi1cXHRpbnRmX21vZGUgPSByc2lfbWFwX2ludGZfbW9kZSh2aWYtXFx1MDAzZXR5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDczOlxcdGlmIChpbnRmX21vZGUgPT0gUlNJX09QTU9ERV9VTlNVUFBPUlRFRCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDc0LVxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4NS1cXHQvKiBHZXQgZnJlZSB2YXAgaW5kZXggKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ4NjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4Ny1cXHRcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXZpZnNbaV0gfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9NTMwPXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01NDctXFx0b3Btb2RlID0gcnNpX21hcF9pbnRmX21vZGUodmlmLVxcdTAwM2V0eXBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjU0ODpcXHRpZiAob3Btb2RlID09IFJTSV9PUE1PREVfVU5TVVBQT1JURUQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU0OS1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiT3Btb2RlIGVycm9yIDogJWRcXFxcblxcXCIsIG9wbW9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU1Mi1cXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo1NTM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01NTQtXFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2V2aWZzW2ldKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz01NzQ9c3RhdGljIGludCByc2lfY2hhbm5lbF9jaGFuZ2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjU5MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU5MS1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz02NjQ9c3RhdGljIGludCByc2lfbWFjODAyMTFfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo2OTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTItXFx0XFx0XFx0dmlmID0gYWRhcHRlci1cXHUwMDNldmlmc1tpXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9Nzg2PXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy04MDgtXFx0XFx0cnNpX2luZm9ybV9ic3Nfc3RhdHVzKGNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjgwOTpcXHRcXHRcXHRcXHQgICAgICBSU0lfT1BNT0RFX1NUQSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTgxMC1cXHRcXHRcXHRcXHQgICAgICB2aWYtXFx1MDAzZWNmZy5hc3NvYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6ODQ3OlxcdFxcdFxcdFxcdHJzaV9zZXRfdmFwX2NhcGFiaWxpdGllcyhjb21tb24sIFJTSV9PUE1PREVfQVAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy04NDgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHZpZi1cXHUwMDNlYWRkciwgdmlmX2luZm8tXFx1MDAzZXZhcF9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9ODgwPXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9jb25mX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODg1LVxcdC8qIE5vdCBkb2luZyBtdWNoIGhlcmUgYXMgb2Ygbm93ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo4ODY6XFx0KnRvdGFsX2ZsYWdzIFxcdTAwMjY9IFJTSV9TVVBQX0ZJTFRFUlM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy04ODctfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05NjE9c3RhdGljIGludCByc2lfaGFsX2tleV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Mi1cXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjk3MzpcXHRcXHRrZXlfdHlwZSA9IFJTSV9QQUlSV0lTRV9LRVk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy05NzQtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTc1OlxcdFxcdGtleV90eXBlID0gUlNJX0dST1VQX0tFWTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LVxcdTAwM2VrZXlsZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfUEFJUldJU0VfS0VZLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LVxcdTAwM2VrZXlpZHgsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEwOTE9c3RhdGljIGludCByc2lfbWFjODAyMTFfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMTA3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEwODpcXHRmb3IgKGlpID0gMDsgaWkgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGlpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMDktXFx0XFx0aWYgKHZpZiA9PSBhZGFwdGVyLVxcdTAwM2V2aWZzW2lpXSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTExMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMTM6XFx0aWYgKGlpIFxcdTAwM2U9IFJTSV9NQVhfVklGUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMTQtXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTMwOT1zdGF0aWMgdm9pZCByc2lfZmlsbF9yeF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEzNTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMzUzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTM1NC1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNDA3PXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0NzAtXFx0XFx0XFx0cnNpX2RiZyhJTkZPX1pPTkUsIFxcXCJJbmRpY2F0ZSBic3Mgc3RhdHVzIHRvIGRldmljZVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNDcxOlxcdFxcdFxcdHJzaV9pbmZvcm1fYnNzX3N0YXR1cyhjb21tb24sIFJTSV9PUE1PREVfQVAsIDEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDcyLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0YS1cXHUwMDNlYWRkciwgc3RhLVxcdTAwM2V3bWUsIHN0YS1cXHUwMDNlYWlkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBrZXktXFx1MDAzZWtleWxlbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE0ODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFJTSV9QQUlSV0lTRV9LRVksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBrZXktXFx1MDAzZWtleWlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTUyMz1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNTQ3LVxcdFxcdFxcdGlmICghbWVtY21wKHJzdGEtXFx1MDAzZXN0YS1cXHUwMDNlYWRkciwgc3RhLVxcdTAwM2VhZGRyLCBFVEhfQUxFTikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE1NDg6XFx0XFx0XFx0XFx0cnNpX2luZm9ybV9ic3Nfc3RhdHVzKGNvbW1vbiwgUlNJX09QTU9ERV9BUCwgMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE1NDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhLVxcdTAwM2VhZGRyLCBzdGEtXFx1MDAzZXdtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTY2NT1zdGF0aWMgaW50IHJzaV9tYXBfcmVnaW9uX2NvZGUoZW51bSBubDgwMjExX2Rmc19yZWdpb25zIHJlZ2lvbl9jb2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjY4LVxcdGNhc2UgTkw4MDIxMV9ERlNfRkNDOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTY2OTpcXHRcXHRyZXR1cm4gUlNJX1JFR0lPTl9GQ0M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjcwLVxcdGNhc2UgTkw4MDIxMV9ERlNfRVRTSTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2NzE6XFx0XFx0cmV0dXJuIFJTSV9SRUdJT05fRVRTSTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE2NzItXFx0Y2FzZSBOTDgwMjExX0RGU19KUDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2NzM6XFx0XFx0cmV0dXJuIFJTSV9SRUdJT05fVEVMRUM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjc0LVxcdGNhc2UgTkw4MDIxMV9ERlNfVU5TRVQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNjc1OlxcdFxcdHJldHVybiBSU0lfUkVHSU9OX1dPUkxEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3Ni1cXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNjc3OlxcdHJldHVybiBSU0lfUkVHSU9OX1dPUkxEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3OC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE3Mjk9c3RhdGljIHZvaWQgcnNpX3Jlc3VtZV9jb25uX2NoYW5uZWwoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTczNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE3MzU6XFx0Zm9yIChjbnQgPSAwOyBjbnQgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGNudCsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNzM2LVxcdFxcdHZpZiA9IGFkYXB0ZXItXFx1MDAzZXZpZnNbY250XTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTg0OT1zdGF0aWMgdTE2IHJzaV93b3dfbWFwX3RyaWdnZXJzKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4NTYtXFx0aWYgKHdvd2xhbi1cXHUwMDNlYW55KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg1NzpcXHRcXHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19BTlk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODU4LVxcdGlmICh3b3dsYW4tXFx1MDAzZW1hZ2ljX3BrdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4NTk6XFx0XFx0d293X3RyaWdnZXJzIHw9IFJTSV9XT1dfTUFHSUNfUEtUO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg2MC1cXHRpZiAod293bGFuLVxcdTAwM2VkaXNjb25uZWN0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg2MTpcXHRcXHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19ESVNDT05ORUNUO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg2Mi1cXHRpZiAod293bGFuLVxcdTAwM2VndGtfcmVrZXlfZmFpbHVyZSB8fCB3b3dsYW4tXFx1MDAzZWVhcF9pZGVudGl0eV9yZXEgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4NjMtXFx0ICAgIHdvd2xhbi1cXHUwMDNlZm91cl93YXlfaGFuZHNoYWtlKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg2NDpcXHRcXHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19HVEtfUkVLRVk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODY1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xODY5PWludCByc2lfY29uZmlnX3dvd2xhbihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4ODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxODg2OlxcdGNvbW1vbi1cXHUwMDNld293X2ZsYWdzIHw9IFJTSV9XT1dfRU5BQkxFRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4ODctXFx0dHJpZ2dlcnMgPSByc2lfd293X21hcF90cmlnZ2Vycyhjb21tb24sIHdvd2xhbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4OTQtXFx0XFx0XFx0XFxcIkNhbm5vdCBjb25maWd1cmUgV29XTEFOIChTdGF0aW9uIG5vdCBjb25uZWN0ZWQpXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4OTU6XFx0XFx0Y29tbW9uLVxcdTAwM2V3b3dfZmxhZ3MgfD0gUlNJX1dPV19OT19DT05ORUNUSU9OO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg5Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MjAwNz1pbnQgcnNpX21hYzgwMjExX2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0MzoyOS40NTA5ODI5MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4NjY3MzI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQmVhY29uIFByZXBhcmF0aW9uIENhbGwgU3RhY2sgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgYHJzaV9wcmVwYXJlX2JlYWNvbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgbW92ZSBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSDigJMgd2hvJ3MgaW52b2tpbmcgdGhpcyB0aGluZywgYW5kIHdoZXJlIGFyZSB0aG9zZSBjYWxscyBvcmlnaW5hdGluZyBmcm9tPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uJ3MgdXNhZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UsIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycywgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHJzaV9wcmVwYXJlX2JlYWNvbmAgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYmVhY29uIHByZXBhcmF0aW9uIG9yIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlcGVuZGVuY2llcy4gTGV0J3Mgc3RhcnQgdGhlIGh1bnQgYW5kIGdldCBhIGNsZWFyIG1hcCBvZiB0aGVzZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Mzo1MC4yMzc2NTg4OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTk3NjkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfcHJlcGFyZV9iZWFjb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9Mzg4PWludCByc2lfc2VuZF9idF9wa3Qoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0MjU6aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM9MTc2Mz1zdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzYtXFx0XFx0c2tiX3B1bGwoc2tiLCAoNjQgLSBkd29yZF9hbGlnbl9ieXRlcykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoxNzc3OlxcdGlmIChyc2lfcHJlcGFyZV9iZWFjb24oY29tbW9uLCBza2IpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzgtXFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIkZhaWxlZCB0byBwcmVwYXJlIGJlYWNvblxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oPTIyNT1pbnQgcnNpX3ByZXBhcmVfZGF0YV9kZXNjKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmg6MjI2OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaC0yMjctaW50IHJzaV9zZW5kX3BrdF90b19idXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQzOjUxLjc1NzY0NDM4MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMjM3MzI4NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcnNpX3NlbmRfYmVhY29uYCBGdW5jdGlvbiBDYWxsIGFuZCBEcml2ZXIgT3BlcmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGByc2lfc2VuZF9iZWFjb25gIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBzdGFydCBpbiBgcnNpXzkxeF9tZ210LmNgLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDE3NjMsIGFzc3VtaW5nIHRoYXQncyB3aGVyZSB0aGUgY29yZSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgbWlnaHQgcmVzaWRlLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uIGxvZ2ljLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwgYW5kIGhvdyB0aGUgZHJpdmVyIG9yY2hlc3RyYXRlcyB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGJlYWNvbidzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NDowMS45OTQ5NzU0NDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xcbjE3NjE6XFx0fVxcbjE3NjI6XFx0XFxuMTc2MzpcXHRzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbjE3NjQ6XFx0e1xcbjE3NjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuMTc2NjpcXHRcXHR1OCBkd29yZF9hbGlnbl9ieXRlcyA9IDA7XFxuMTc2NzpcXHRcXG4xNzY4OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IoTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3Njk6XFx0XFx0aWYgKCFza2IpXFxuMTc3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNzcxOlxcdFxcbjE3NzI6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHRkd29yZF9hbGlnbl9ieXRlcyA9ICgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEgXFx1MDAyNiAweDNmKTtcXG4xNzc1OlxcdFxcdGlmIChkd29yZF9hbGlnbl9ieXRlcylcXG4xNzc2OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcXG4xNzc3OlxcdFxcdGlmIChyc2lfcHJlcGFyZV9iZWFjb24oY29tbW9uLCBza2IpKSB7XFxuMTc3ODpcXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgYmVhY29uXFxcXG5cXFwiKTtcXG4xNzc5OlxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4xNzgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3ODE6XFx0XFx0fVxcbjE3ODI6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmNvbW1vbi1cXHUwMDNldHhfcXVldWVbTUdNVF9CRUFDT05fUV0sIHNrYik7XFxuMTc4MzpcXHRcXHRyc2lfc2V0X2V2ZW50KFxcdTAwMjZjb21tb24tXFx1MDAzZXR4X3RocmVhZC5ldmVudCk7XFxuMTc4NDpcXHRcXHRyc2lfZGJnKERBVEFfVFhfWk9ORSwgXFxcIiVzOiBBZGRlZCB0byBiZWFjb24gcXVldWVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFx0cmV0dXJuIDA7XFxuMTc4NzpcXHR9XFxuMTc4ODpcXHRcXG4xNzg5OlxcdCNpZmRlZiBDT05GSUdfUE1cXG4xNzkwOlxcdGludCByc2lfc2VuZF93b3dsYW5fcmVxdWVzdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1MTYgZmxhZ3MsXFxuMTc5MTpcXHRcXHRcXHRcXHQgICAgdTE2IHNsZWVwX3N0YXR1cylcXG4xNzkyOlxcdHtcXG4xNzkzOlxcdFxcdHN0cnVjdCByc2lfd293bGFuX3JlcSAqY21kX2ZyYW1lO1xcbjE3OTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNzk1OlxcdFxcdHU4IGxlbmd0aDtcXG4xNzk2OlxcdFxcbjE3OTc6XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBTZW5kaW5nIHdvd2xhbiByZXF1ZXN0IGZyYW1lXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdGxlbmd0aCA9IHNpemVvZigqY21kX2ZyYW1lKTtcXG4xODAwOlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoKTtcXG4xODAxOlxcdFxcdGlmICghc2tiKVxcbjE4MDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTgwMzpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VkYXRhLCAwLCBsZW5ndGgpO1xcbjE4MDQ6XFx0XFx0Y21kX2ZyYW1lID0gKHN0cnVjdCByc2lfd293bGFuX3JlcSAqKXNrYi1cXHUwMDNlZGF0YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDQ6MDEuOTk1MTE3NjY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg4MDIxMDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGByc2lfc2VuZF9iZWFjb25gIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgaGllcmFyY2h5IGZvciBgcnNpX3NlbmRfYmVhY29uYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IGNvbnRleHRzIGFuZCBkYXRhIGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSdtIGV4cGVjdGluZyB0byBzZWUgbXVsdGlwbGUgdXNlcywgYW5kIEknbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgaW4gdGhvc2UgY2FsbHMg4oCTIGFyZSB0aGV5IGNsdXN0ZXJlZCBhcm91bmQgc3BlY2lmaWMgbW9kdWxlcywgZGV2aWNlIGRyaXZlcnMsIG9yIGhpZ2hlci1sZXZlbCBmdW5jdGlvbmFsaXRpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciB3aGVyZSB0aGlzIGJlYWNvbiB0cmFuc21pc3Npb24gaXMgb2NjdXJyaW5nPyBXaGF0IHNvcnQgb2YgZGF0YSBpcyBsaWtlbHkgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBpbiBlYWNoIG9mIHRoZSBwbGFjZXMgdGhhdCBjYWxscyBpdD8gQW5kIGZpbmFsbHksIHdoYXQncyBpdHMgcm9sZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ0OjExLjg3NTMzMDYwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2ODY0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX3NlbmRfYmVhY29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM9MTczOD1pbnQgcnNpX3NldF9hbnRlbm5hKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4IGFudGVubmEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6MTc2MzpzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz0yMTg1PWludCByc2lfbWdtdF9wa3RfcmVjdihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTIyMjQtXFx0XFx0XFx0cmV0dXJuIC0xO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoyMjI1OlxcdFxcdHJzaV9zZW5kX2JlYWNvbihjb21tb24pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0yMjI2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NDoxMS45MjIwMjQwMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMTcwNDU1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHJzaV9yc2lfOTF4X2hhbC5jYCBhbmQgYHJzaV9wcmVwYXJlX2JlYWNvbmAqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIHJhZGlvIGNvbmZpZ3VyYXRpb24gaGVyZSwgc28gbGV0J3Mgc3RhcnQgd2l0aCBgcnNpX3JzaV85MXhfaGFsLmNgLiBUaGUgcHJvYmxlbSBzdWdnZXN0cyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUgYW5kIEkgaGF2ZSB0byB0cmFjZSBiYWNrIHRoZSBiZWFjb24gcHJlcGVyYXRpb24gdG8gZmlndXJlIG91dCBob3cgcmFkaW8gY29uZmlndXJhdGlvbiBtYXkgYmUgZ29pbmcgYXdyeS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgcnNpX3ByZXBhcmVfYmVhY29uYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCB3aGVyZSB0aGUgYmVhY29uIGZyYW1lIGlzIGFzc2VtYmxlZCBiZWZvcmUgYmVpbmcgdHJhbnNtaXR0ZWQsIG1ha2luZyBpdCB0aGUgcGVyZmVjdCBzdGFydGluZyBwb2ludCB0byBkaWFnbm9zZSBhbnkgY29uZmlndXJhdGlvbiBlcnJvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGZpbmFsIGJlYWNvbiBjb250ZW50LiBGcm9tIHRoZXJlIEknbGwgaGF2ZSBhIGJldHRlciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDQ6MzkuOTM5MDcxNTgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MjY6XFx0e1xcbiA0Mjc6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cXHUwMDNlcHJpdjtcXG4gNDI4OlxcdFxcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xcbiA0Mjk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXFx1MDAzZXByaXYtXFx1MDAzZWh3O1xcbiA0MzA6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gXFx1MDAyNmh3LVxcdTAwM2Vjb25mO1xcbiA0MzE6XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjtcXG4gNDMyOlxcdFxcdHN0cnVjdCBza19idWZmICptYWNfYmNuO1xcbiA0MzM6XFx0XFx0dTggdmFwX2lkID0gMCwgaTtcXG4gNDM0OlxcdFxcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcXG4gNDM1OlxcdFxcdHUxNiB0aW1fb2Zmc2V0ID0gMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuIDQzODpcXHRcXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbiA0Mzk6XFx0XFx0XFx0aWYgKCF2aWYpXFxuIDQ0MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDQxOlxcdFxcdFxcdGlmICgodmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxcbiA0NDI6XFx0XFx0XFx0ICAgICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSlcXG4gNDQzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFx0aWYgKCF2aWYpXFxuIDQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdG1hY19iY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYWRhcHRlci1cXHUwMDNlaHcsXFxuIDQ0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICB2aWYsXFxuIDQ0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XFxuIDQ1MDpcXHRcXHRpZiAoIW1hY19iY24pIHtcXG4gNDUxOlxcdFxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsIFxcXCJGYWlsZWQgdG8gZ2V0IGJlYWNvbiBmcm9tIG1hYzgwMjExXFxcXG5cXFwiKTtcXG4gNDUyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTM6XFx0XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRjb21tb24tXFx1MDAzZWJlYWNvbl9jbnQrKztcXG4gNDU2OlxcdFxcdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXFx1MDAzZWRhdGE7XFxuIDQ1NzpcXHRcXHRyc2lfc2V0X2xlbl9xbm8oXFx1MDAyNmJjbl9mcm0tXFx1MDAzZWxlbl9xbm8sIG1hY19iY24tXFx1MDAzZWxlbiwgUlNJX1dJRklfREFUQV9RKTtcXG4gNDU4OlxcdFxcdGJjbl9mcm0tXFx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XFxuIDQ1OTpcXHRcXHRiY25fZnJtLVxcdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxcbiA0NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX05PX0FDS19JTkQgfFxcbiA0NjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1NFUV9OTyB8XFxuIDQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgIFJBVEVfSU5GT19FTkFCTEUpO1xcbiA0NjU6XFx0XFx0YmNuX2ZybS1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYodmFwX2lkIFxcdTAwM2NcXHUwMDNjIDE0KTtcXG4gNDY2OlxcdFxcdGJjbl9mcm0tXFx1MDAzZXFpZF90aWQgPSBCRUFDT05fSFdfUTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XFxuIDQ2OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSk7XFxuIDQ3MDpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyB8PSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUgXFx1MDAzZVxcdTAwM2UgMTIpO1xcbiA0NzE6XFx0XFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcXG4gNDcyOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvID0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFKTtcXG4gNDczOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSBcXHUwMDNlXFx1MDAzZSAxMik7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGlmIChjb21tb24tXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXFxuIDQ3NzpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuIDQ3ODpcXHRcXHRlbHNlXFxuIDQ3OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdGlmIChtYWNfYmNuLVxcdTAwM2VkYXRhW3RpbV9vZmZzZXQgKyAyXSA9PSAwKVxcbiA0ODI6XFx0XFx0XFx0YmNuX2ZybS1cXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcXG4gNDg1OlxcdFxcdGlmICh0YWlscm9vbSBcXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcXG4gNDg2OlxcdFxcdCAgICBtYWNfYmNuLVxcdTAwM2VsZW4gXFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcXG4gNDg3OlxcdFxcdFxcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRtZW1jcHkoXFx1MDAyNnNrYi1cXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cXHUwMDNlZGF0YSwgbWFjX2Jjbi1cXHUwMDNlbGVuKTtcXG4gNDkyOlxcdFxcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVxcdTAwM2VsZW4gKyBGUkFNRV9ERVNDX1NaKTtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0ZGV2X2tmcmVlX3NrYihtYWNfYmNuKTtcXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHR9XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdHN0YXRpYyB2b2lkIGJsX2NtZF90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiA1MDA6XFx0e1xcbiA1MDE6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHRhZGFwdGVyLVxcdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcXG4gNTA0OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlYmxfY21kX3RpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDQ6MzkuOTM5MTk0OTEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzOTc3NDc1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBSU0kgQnVzIFR5cGUgRW11bGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIHN1cHBvcnRlZCBidXMgdHlwZXMgZm9yIHRoZSBgcnNpYCBkcml2ZXIuIEFoLCBgUlNJX1NESU9gIGFuZCBgUlNJX1VTQmAsIGdvdCBpdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBlZmZlY3RpdmVseSBlbXVsYXRlIG9yIGZ1enogdGhlIGBSU0lfVVNCYCBpbnRlcmZhY2Ugd2l0aGluIG91ciBRRU1VL1N5emthbGxlciBlbnZpcm9ubWVudC4gQ2FuIHdlIGxldmVyYWdlIHRoZSBVU0IgcmF3IGdhZGdldCBmdW5jdGlvbmFsaXR5IG9yIHNvbWUgZm9ybSBvZiBVU0IgZW11bGF0aW9uPyBUaGF0J3MgdGhlIGtleSB0byBtYWtpbmcgcHJvZ3Jlc3MgaGVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jYCBzb3VyY2UgZmlsZS4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBVU0IgaW50ZXJmYWNlLiBUaGF0J3Mgd2hlcmUgdGhlIGFuc3dlcnMgYXJlIGxpa2VseSBoaWRkZW4uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBVU0IgY29tbXVuaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NDo0NS4zMzY5NDUyMjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKlxcbiAgIDI6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE0IFJlZHBpbmUgU2lnbmFscyBJbmMuXFxuICAgMzpcXHQgKlxcbiAgIDQ6XFx0ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XFxuICAgNTpcXHQgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXFxuICAgNjpcXHQgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcXFwiQVMgSVNcXFwiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFU1xcbiAgIDk6XFx0ICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxcbiAgMTA6XFx0ICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1JcXG4gIDExOlxcdCAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVNcXG4gIDEyOlxcdCAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTlxcbiAgMTM6XFx0ICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0ZcXG4gIDE0OlxcdCAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXFxuICAxNTpcXHQgKlxcbiAgMTY6XFx0ICovXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9yc2lfOTF4LmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwicnNpX3VzYi5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcInJzaV9oYWwuaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJyc2lfY29leC5oXFxcIlxcbiAgMjQ6XFx0XFxuICAyNTpcXHQvKiBEZWZhdWx0IG9wZXJhdGluZyBtb2RlIGlzIHdsYW4gU1RBICsgQlQgKi9cXG4gIDI2OlxcdHN0YXRpYyB1MTYgZGV2X29wZXJfbW9kZSA9IERFVl9PUE1PREVfU1RBX0JUX0RVQUw7XFxuICAyNzpcXHRtb2R1bGVfcGFyYW0oZGV2X29wZXJfbW9kZSwgdXNob3J0LCAwNDQ0KTtcXG4gIDI4OlxcdE1PRFVMRV9QQVJNX0RFU0MoZGV2X29wZXJfbW9kZSwgREVWX09QTU9ERV9QQVJBTV9ERVNDKTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RhdGljIGludCByc2lfcnhfdXJiX3N1Ym1pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBlcF9udW0sIGdmcF90IGZsYWdzKTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0LyoqXFxuICAzMzpcXHQgKiByc2lfdXNiX2NhcmRfd3JpdGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIHRoZSBVU0IgQ2FyZC5cXG4gIDM0OlxcdCAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cXG4gIDM1OlxcdCAqIEBidWY6IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBmcm9tIHdoZXJlIHRoZSBkYXRhIGhhcyB0byBiZSB0YWtlbi5cXG4gIDM2OlxcdCAqIEBsZW46IExlbmd0aCB0byBiZSB3cml0dGVuLlxcbiAgMzc6XFx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxcbiAgMzg6XFx0ICpcXG4gIDM5OlxcdCAqIFJldHVybjogc3RhdHVzOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgNDA6XFx0ICovXFxuICA0MTpcXHRzdGF0aWMgaW50IHJzaV91c2JfY2FyZF93cml0ZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxcbiAgNDI6XFx0XFx0XFx0XFx0ICAgICAgdTggKmJ1ZixcXG4gIDQzOlxcdFxcdFxcdFxcdCAgICAgIHUxNiBsZW4sXFxuICA0NDpcXHRcXHRcXHRcXHQgICAgICB1OCBlbmRwb2ludClcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHN0cnVjdCByc2lfOTF4X3VzYmRldiAqZGV2ID0gYWRhcHRlci1cXHUwMDNlcnNpX2RldjtcXG4gIDQ3OlxcdFxcdGludCBzdGF0dXM7XFxuICA0ODpcXHRcXHR1OCAqc2VnID0gZGV2LVxcdTAwM2V0eF9idWZmZXI7XFxuICA0OTpcXHRcXHRpbnQgdHJhbnNmZXI7XFxuICA1MDpcXHRcXHRpbnQgZXAgPSBkZXYtXFx1MDAzZWJ1bGtvdXRfZW5kcG9pbnRfYWRkcltlbmRwb2ludCAtIDFdO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRtZW1zZXQoc2VnLCAwLCBsZW4gKyBSU0lfVVNCX1RYX0hFQURfUk9PTSk7XFxuICA1MzpcXHRcXHRtZW1jcHkoc2VnICsgUlNJX1VTQl9UWF9IRUFEX1JPT00sIGJ1ZiwgbGVuKTtcXG4gIDU0OlxcdFxcdGxlbiArPSBSU0lfVVNCX1RYX0hFQURfUk9PTTtcXG4gIDU1OlxcdFxcdHRyYW5zZmVyID0gbGVuO1xcbiAgNTY6XFx0XFx0c3RhdHVzID0gdXNiX2J1bGtfbXNnKGRldi1cXHUwMDNldXNiZGV2LFxcbiAgNTc6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3NuZGJ1bGtwaXBlKGRldi1cXHUwMDNldXNiZGV2LCBlcCksXFxuICA1ODpcXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKXNlZyxcXG4gIDU5OlxcdFxcdFxcdFxcdCAgICAgIChpbnQpbGVuLFxcbiAgNjA6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRyYW5zZmVyLFxcbiAgNjE6XFx0XFx0XFx0XFx0ICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiAgNjQ6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSxcXG4gIDY1OlxcdFxcdFxcdFxcdFxcXCJDYXJkIHdyaXRlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgOiUxMGRcXFxcblxcXCIsIHN0YXR1cyk7XFxuICA2NjpcXHRcXHRcXHRkZXYtXFx1MDAzZXdyaXRlX2ZhaWwgPSAxO1xcbiAgNjc6XFx0XFx0fVxcbiAgNjg6XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0LyoqXFxuICA3MjpcXHQgKiByc2lfd3JpdGVfbXVsdGlwbGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG11bHRpcGxlIGJ5dGVzIG9mIGluZm9ybWF0aW9uXFxuICA3MzpcXHQgKlxcdFxcdFxcdCAgdG8gdGhlIFVTQiBjYXJkLlxcbiAgNzQ6XFx0ICogQGFkYXB0ZXI6IFBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLlxcbiAgNzU6XFx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxcbiAgNzY6XFx0ICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGRhdGEgdGhhdCBoYXMgdG8gYmUgd3JpdHRlbi5cXG4gIDc3OlxcdCAqIEBjb3VudDogTnVtYmVyIG9mIG11bHRpcGxlIGJ5dGVzIHRvIGJlIHdyaXR0ZW4uXFxuICA3ODpcXHQgKlxcbiAgNzk6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgODA6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ0OjQ1LjMzNzAzODcxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc3Mjc4OTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhhdCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgcnNpX3Byb2JlYCBJbXBsZW1lbnRhdGlvbiBpbiBVU0IqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYHJzaV9wcm9iZWAgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFVTQiBwcm90b2NvbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBzcGVjaWZpYyB1c2UgY2FzZXMgZHJpdmluZyB0aGUgbmVlZCBmb3IgdGhpcyBwcm9iZT8gSXMgaXQgYWJvdXQgaW5pdGlhbCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIGNhcGFiaWxpdHkgbmVnb3RpYXRpb24sIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGlzIGNydWNpYWwgdG8gdW5wYWNraW5nIHRoZSAqaG93Ki5cblxuSSdtIG1lbnRhbGx5IHNpZnRpbmcgdGhyb3VnaCBteSBrbm93bGVkZ2Ugb2YgVVNCIGRldmljZSBlbnVtZXJhdGlvbi4gSSdtIGFzc3VtaW5nIGl0IGludm9sdmVzIHRoZSBzdGFuZGFyZCBVU0IgZGVzY3JpcHRvcnMg4oCTIGRldmljZSwgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlLCBlbmRwb2ludCDigJMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIGR1cmluZyBpbml0aWFsIHNldHVwLiBJIGJldCBgcnNpX3Byb2JlYCBpcyBpbnRyaWNhdGVseSBsaW5rZWQgdG8gaG93IHRoZSBob3N0IGludGVyYWN0cyB3aXRoIHRob3NlIGRlc2NyaXB0b3JzIHRvIGdhdGhlciByZWxldmFudCBpbmZvcm1hdGlvbi4gUGVyaGFwcyBpdCdzIGEgc3BlY2lmaWMgdmVuZG9yLWRlZmluZWQgY29tbWFuZCwgbGV2ZXJhZ2luZyBhIGNvbnRyb2wgdHJhbnNmZXIsIHRvIGVsaWNpdCBhIHBhcnRpY3VsYXIgc2V0IG9mIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgYmV5b25kIHRoZSBzdGFuZGFyZCBkZXNjcmlwdG9ycz8gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIHRoYXQuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBsYXllcnMgaW52b2x2ZWQuIElzIHRoaXMgYSBwcm90b2NvbC1sZXZlbCBtZWNoYW5pc20sIGhhbmRsZWQgYnkgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgYW5kIGRldmljZSBmaXJtd2FyZT8gT3IgZG9lcyBpdCByZXNpZGUgaGlnaGVyIHVwLCBwZXJoYXBzIGluIHRoZSBkZXZpY2UgZHJpdmVyPyBJIHN1c3BlY3QgaXQncyBhIG1vcmUgaW50ZWdyYXRlZCBhcHByb2FjaCwgbGlrZWx5IGludm9sdmluZyBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgY3JpdGljYWwgaGFuZG9mZnMgYW5kIG1lc3NhZ2UgZXhjaGFuZ2VzIG9jY3VyLlxuXG5VbHRpbWF0ZWx5LCBJIGV4cGVjdCBgcnNpX3Byb2JlYCBpcyBhIGNsZXZlciBkYW5jZSBvZiBzaWduYWxpbmcgYW5kIGRhdGEgZXhjaGFuZ2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgc2VxdWVuY2UsIHN0YXJ0aW5nIGZyb20gdGhlIGhvc3QncyByZXF1ZXN0LCB0aHJvdWdoIGFueSBkZXZpY2Utc2lkZSBwcm9jZXNzaW5nLCBhbmQgYmFjayB0byB0aGUgaG9zdCB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24uIE5vdywgbGV0J3Mgc2VlIHdoZXJlIHRvIGJlZ2luIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDQ5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTowNy4xMDk4MzAwMTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHRcXG4gNzAxOlxcdFxcdG1zbGVlcCgyMCk7XFxuIDcwMjpcXHRcXG4gNzAzOlxcdFxcdHJldHVybiAwO1xcbiA3MDQ6XFx0fVxcbiA3MDU6XFx0XFxuIDcwNjpcXHRzdGF0aWMgaW50IHJzaV9yZXNldF9jYXJkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuIDcwNzpcXHR7XFxuIDcwODpcXHRcXHRpbnQgcmV0O1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRyc2lfZGJnKElORk9fWk9ORSwgXFxcIlJlc2V0dGluZyBDYXJkLi4uXFxcXG5cXFwiKTtcXG4gNzExOlxcdFxcdHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBSU0lfVEFfSE9MRF9SRUcsIDB4RSwgNCk7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdC8qIFRoaXMgbXNsZWVwIHdpbGwgZW5zdXJlIFRocmVhZC1BcmNoIHByb2Nlc3NvciB0byBnbyB0byBob2xkXFxuIDcxNDpcXHRcXHQgKiBhbmQgYW55IHBlbmRpbmcgZG1hIHRyYW5zZmVycyB0byByZiBpbiBkZXZpY2UgdG8gZmluaXNoLlxcbiA3MTU6XFx0XFx0ICovXFxuIDcxNjpcXHRcXHRtc2xlZXAoMTAwKTtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFNXQkxfUkVHT1VULFxcbiA3MTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFJTSV9GV19XRFRfRElTQUJMRV9SRVEsXFxuIDcyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XFxuIDcyMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA3MjI6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIkRpc2FibGluZyBmaXJtd2FyZSB3YXRjaGRvZyB0aW1lciBmYWlsZWRcXFxcblxcXCIpO1xcbiA3MjM6XFx0XFx0XFx0Z290byBmYWlsO1xcbiA3MjQ6XFx0XFx0fVxcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlZGV2aWNlX21vZGVsICE9IFJTSV9ERVZfOTExNikge1xcbiA3Mjc6XFx0XFx0XFx0cmV0ID0gdXNiX3VscF9yZWFkX3dyaXRlKGFkYXB0ZXIsIFJTSV9XQVRDSF9ET0dfVElNRVJfMSxcXG4gNzI4OlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1dSSVRFXzIsIDMyKTtcXG4gNzI5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MzA6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiA3MzE6XFx0XFx0XFx0cmV0ID0gdXNiX3VscF9yZWFkX3dyaXRlKGFkYXB0ZXIsIFJTSV9XQVRDSF9ET0dfVElNRVJfMixcXG4gNzMyOlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1dSSVRFXzAsIDMyKTtcXG4gNzMzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MzQ6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiA3MzU6XFx0XFx0XFx0cmV0ID0gdXNiX3VscF9yZWFkX3dyaXRlKGFkYXB0ZXIsIFJTSV9XQVRDSF9ET0dfREVMQVlfVElNRVJfMSxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1dSSVRFXzUwLCAzMik7XFxuIDczNzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzM4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzM5OlxcdFxcdFxcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX0RFTEFZX1RJTUVSXzIsXFxuIDc0MDpcXHRcXHRcXHRcXHRcXHRcXHQgUlNJX1VMUF9XUklURV8wLCAzMik7XFxuIDc0MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzQyOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzQzOlxcdFxcdFxcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX1RJTUVSX0VOQUJMRSxcXG4gNzQ0OlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1RJTUVSX0VOQUJMRSwgMzIpO1xcbiA3NDU6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc0NjpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDc0NzpcXHRcXHR9IGVsc2Uge1xcbiA3NDg6XFx0XFx0XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXFxuIDc0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTldQX1dXRF9JTlRFUlJVUFRfVElNRVIsXFxuIDc1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTldQX1dXRF9JTlRfVElNRVJfQ0xLUyxcXG4gNzUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBSU0lfOTExNl9SRUdfU0laRSk7XFxuIDc1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzUzOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzU0OlxcdFxcdFxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxcbiA3NTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5XUF9XV0RfU1lTVEVNX1JFU0VUX1RJTUVSLFxcbiA3NTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5XUF9XV0RfU1lTX1JFU0VUX1RJTUVSX0NMS1MsXFxuIDc1NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xcbiA3NTg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc1OTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDc2MDpcXHRcXHRcXHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcXG4gNzYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOV1BfV1dEX01PREVfQU5EX1JTVEFSVCxcXG4gNzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOV1BfV1dEX1RJTUVSX0RJU0FCTEUsXFxuIDc2MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xcbiA3NjQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc2NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDc2NjpcXHRcXHR9XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdHJzaV9kYmcoSU5GT19aT05FLCBcXFwiUmVzZXQgY2FyZCBkb25lXFxcXG5cXFwiKTtcXG4gNzY5OlxcdFxcdHJldHVybiByZXQ7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdGZhaWw6XFxuIDc3MjpcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiUmVzZXQgY2FyZCBmYWlsZWRcXFxcblxcXCIpO1xcbiA3NzM6XFx0XFx0cmV0dXJuIHJldDtcXG4gNzc0OlxcdH1cXG4gNzc1OlxcdFxcbiA3NzY6XFx0LyoqXFxuIDc3NzpcXHQgKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcXG4gNzc4OlxcdCAqXFx0XFx0IFZlbmRvciBhbmQgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZC4gQWxsIHRoZSBpbml0aWFsaXphdGlvblxcbiA3Nzk6XFx0ICpcXHRcXHQgd29yayBpcyBkb25lIGhlcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjA3LjEwOTkzMTk3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIyNDk2MDY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGByc2lfcHJlcGFyZV9iZWFjb25gIGRvZXMgYW5kIHdoYXQncyBjaGFuZ2VkIHdpdGggdGhpcyBwYXRjaC4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuK1x0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcbitcdGlmICh0YWlscm9vbSBcdTAwM2MgRlJBTUVfREVTQ19TWiB8fFxuK1x0ICAgIG1hY19iY24tXHUwMDNlbGVuIFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcbitcdFx0ZGV2X2tmcmVlX3NrYihtYWNfYmNuKTtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdH1cbitcbiBcdG1lbWNweShcdTAwMjZza2ItXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cdTAwM2VkYXRhLCBtYWNfYmNuLVx1MDAzZWxlbik7XG4gXHRza2JfcHV0KHNrYiwgbWFjX2Jjbi1cdTAwM2VsZW4gKyBGUkFNRV9ERVNDX1NaKTtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGJ1ZmZlciBwcmVwYXJhdGlvbiBmb3IgYSBiZWFjb24gZnJhbWUuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgdGFpbHJvb20gY2hlY2suIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgaWYgdGhlIGFsbG9jYXRlZCBgc2tiYCBpbiBgcnNpX3NlbmRfYmVhY29uYCAob3IgZWxzZXdoZXJlKSBkaWRuJ3QgaGF2ZSBlbm91Z2ggdGFpbHJvb20gZm9yIHRoZSBmcmFtZSBkZXNjcmlwdG9yIHNpemUgKGBGUkFNRV9ERVNDX1NaYCkgcGx1cyB0aGUgYmVhY29uIGRhdGEgbGVuZ3RoIChgbWFjX2Jjbi1cdTAwM2VsZW5gKSwgdGhlIGBza2JfcHV0YCBjYWxsIHdvdWxkIHBvdGVudGlhbGx5IHRyaWdnZXIgYSBgQlVHX09OYCBvciB0aGUgYG1lbWNweWAgY291bGQgb3ZlcmZsb3cgdGhlIGBza2ItXHUwMDNlZGF0YWAgYnVmZmVyLiAgQWxzbywgaWYgdGhlIHRhaWxyb29tIGNoZWNrIGZhaWxzLCBgbWFjX2JjbmAgaXMgZnJlZWQgd2hpY2ggaXMgZ29vZCwgYW5kIGl0IHJldHVybnMgYW4gZXJyb3IuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgZXhwbG9pdGFiaWxpdHkuIElzIHRoaXMgZnVuY3Rpb24sIG9yIHRoZSByZWxhdGVkIGByc2lfOTF4YCBkcml2ZXIsIHJlYWNoYWJsZSBhbmQgZnV6emFibGU/ICBgcnNpXzkxeGAgaXMgYSBtYWM4MDIxMSBkcml2ZXIgZm9yIHRoZSBSZWRwaW5lIFNpZ25hbHMgOTExMy85MTE2IGNoaXBzLCBjb3ZlcmluZyBVU0IgYW5kIFNESU8gaW50ZXJmYWNlcy4gIEluIGEgZnV6emluZyBjb250ZXh0IGxpa2UgU3l6a2FsbGVyLCBhIFVTQiBkZXZpY2UgY2FuIGJlIGVtdWxhdGVkIHVzaW5nIHRoZSBVU0IgcmF3IGdhZGdldCAodmhjaS9yYXctZ2FkZ2V0KS5cblxuV2hlbiB0aGUgUlNJIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBhIG1hYzgwMjExIHdpcmVsZXNzIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHZpYSBgcnNpX21hYzgwMjExX2F0dGFjaGAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCB1c2Vyc3BhY2UsIGFuZCBieSBleHRlbnNpb24gU3l6a2FsbGVyLCBjYW4gaW50ZXJhY3QgdXNpbmcgYG5sODAyMTFgIG5ldGxpbmsgY29tbWFuZHMgdG8gY29uZmlndXJlIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UsIGVpdGhlciBhcyBhbiBBUCBvciBhIFAyUF9HTy5cblxuU28sIHdoZW4gYmVhY29uaW5nIGlzIHRyaWdnZXJlZCwgZWl0aGVyIHRocm91Z2ggdGhlIHN0YW5kYXJkIGJlYWNvbiBwcm9jZXNzLCBiZWFjb24gY29uZmlndXJhdGlvbiwgZmlybXdhcmUgYmVhY29uIHJlcXVlc3RzLCBvciBieSB0aGUgbWFjODAyMTEgc3RhY2ssIG9yIGlmIHRoZSBmaXJtd2FyZSBzZW5kcyBhIGJlYWNvbiByZXF1ZXN0IG1hbmFnZW1lbnQgcGFja2V0IChgUlNJX0JFQUNPTl9SRVFVRVNUYCksIGByc2lfbWdtdF9wa3RfcmVjdmAgd2lsbCBiZSBjYWxsZWQsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJzaV9zZW5kX2JlYWNvbmAsIHdoaWNoICpmaW5hbGx5KiBjYWxscyBgcnNpX3ByZXBhcmVfYmVhY29uYC4gVGhpcyBsb29rcyBsaWtlIHRoZSBhdHRhY2sgcGF0aC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGByc2lfbWdtdF9wa3RfcmVjdmAgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY2AgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGlucHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMzgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NToyOC4zMzQ4OTUxOTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTg1OlxcdGludCByc2lfbWdtdF9wa3RfcmVjdihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxcbjIxODY6XFx0e1xcbjIxODc6XFx0XFx0czMyIG1zZ19sZW4gPSAobGUxNl90b19jcHUoKihfX2xlMTYgKilcXHUwMDI2bXNnWzBdKSBcXHUwMDI2IDB4MGZmZik7XFxuMjE4ODpcXHRcXHR1MTYgbXNnX3R5cGUgPSAobXNnWzJdKTtcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0cnNpX2RiZyhGU01fWk9ORSwgXFxcIiVzOiBNc2cgTGVuOiAlZCwgTXNnIFR5cGU6ICU0eFxcXFxuXFxcIixcXG4yMTkxOlxcdFxcdFxcdF9fZnVuY19fLCBtc2dfbGVuLCBtc2dfdHlwZSk7XFxuMjE5MjpcXHRcXG4yMTkzOlxcdFxcdHN3aXRjaCAobXNnX3R5cGUpIHtcXG4yMTk0OlxcdFxcdGNhc2UgVEFfQ09ORklSTV9UWVBFOlxcbjIxOTU6XFx0XFx0XFx0cmV0dXJuIHJzaV9oYW5kbGVfdGFfY29uZmlybV90eXBlKGNvbW1vbiwgbXNnKTtcXG4yMTk2OlxcdFxcdGNhc2UgQ0FSRF9SRUFEWV9JTkQ6XFxuMjE5NzpcXHRcXHRcXHRjb21tb24tXFx1MDAzZWhpYmVybmF0ZV9yZXN1bWUgPSBmYWxzZTtcXG4yMTk4OlxcdFxcdFxcdHJzaV9kYmcoRlNNX1pPTkUsIFxcXCIlczogQ2FyZCByZWFkeSBpbmRpY2F0aW9uIHJlY2VpdmVkXFxcXG5cXFwiLFxcbjIxOTk6XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbjIyMDA6XFx0XFx0XFx0cmV0dXJuIHJzaV9oYW5kbGVfY2FyZF9yZWFkeShjb21tb24sIG1zZyk7XFxuMjIwMTpcXHRcXHRjYXNlIFRYX1NUQVRVU19JTkQ6XFxuMjIwMjpcXHRcXHRcXHRzd2l0Y2ggKG1zZ1tSU0lfVFhfU1RBVFVTX1RZUEVdKSB7XFxuMjIwMzpcXHRcXHRcXHRjYXNlIFBST0JFUkVRX0NPTkZJUk06XFxuMjIwNDpcXHRcXHRcXHRcXHRjb21tb24tXFx1MDAzZW1nbXRfcV9ibG9jayA9IGZhbHNlO1xcbjIyMDU6XFx0XFx0XFx0XFx0cnNpX2RiZyhGU01fWk9ORSwgXFxcIiVzOiBQcm9iZSBjb25maXJtIHJlY2VpdmVkXFxcXG5cXFwiLFxcbjIyMDY6XFx0XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbjIyMDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjIwODpcXHRcXHRcXHRjYXNlIEVBUE9MNF9DT05GSVJNOlxcbjIyMDk6XFx0XFx0XFx0XFx0aWYgKG1zZ1tSU0lfVFhfU1RBVFVTXSkge1xcbjIyMTA6XFx0XFx0XFx0XFx0XFx0Y29tbW9uLVxcdTAwM2VlYXBvbDRfY29uZmlybSA9IHRydWU7XFxuMjIxMTpcXHRcXHRcXHRcXHRcXHRpZiAoIXJzaV9zZW5kX2Jsb2NrX3VuYmxvY2tfZnJhbWUoY29tbW9uLFxcbjIyMTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSkpXFxuMjIxMzpcXHRcXHRcXHRcXHRcXHRcXHRjb21tb24tXFx1MDAzZWh3X2RhdGFfcXNfYmxvY2tlZCA9IGZhbHNlO1xcbjIyMTQ6XFx0XFx0XFx0XFx0fVxcbjIyMTU6XFx0XFx0XFx0fVxcbjIyMTY6XFx0XFx0XFx0YnJlYWs7XFxuMjIxNzpcXHRcXHRjYXNlIEJFQUNPTl9FVkVOVF9JTkQ6XFxuMjIxODpcXHRcXHRcXHRyc2lfZGJnKElORk9fWk9ORSwgXFxcIkJlYWNvbiBldmVudFxcXFxuXFxcIik7XFxuMjIxOTpcXHRcXHRcXHRpZiAoY29tbW9uLVxcdTAwM2Vmc21fc3RhdGUgIT0gRlNNX01BQ19JTklUX0RPTkUpXFxuMjIyMDpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMjIyMTpcXHRcXHRcXHRpZiAoY29tbW9uLVxcdTAwM2VpZmFjZV9kb3duKVxcbjIyMjI6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjIyMjM6XFx0XFx0XFx0aWYgKCFjb21tb24tXFx1MDAzZWJlYWNvbl9lbmFibGVkKVxcbjIyMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjIyMjU6XFx0XFx0XFx0cnNpX3NlbmRfYmVhY29uKGNvbW1vbik7XFxuMjIyNjpcXHRcXHRcXHRicmVhaztcXG4yMjI3OlxcdFxcdGNhc2UgV09XTEFOX1dBS0VVUF9SRUFTT046XFxuMjIyODpcXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiXFxcXG5cXFxcbldha2V1cCBUeXBlOiAleFxcXFxuXFxcIiwgbXNnWzE1XSk7XFxuMjIyOTpcXHRcXHRcXHRzd2l0Y2ggKG1zZ1sxNV0pIHtcXG4yMjMwOlxcdFxcdFxcdGNhc2UgUlNJX1VOSUNBU1RfTUFHSUNfUEtUOlxcbjIyMzE6XFx0XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSxcXG4yMjMyOlxcdFxcdFxcdFxcdFxcdFxcXCIqKiogV2FrZXVwIGZvciBVbmljYXN0IG1hZ2ljIHBhY2tldCAqKipcXFxcblxcXCIpO1xcbjIyMzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjIzNDpcXHRcXHRcXHRjYXNlIFJTSV9CUk9BRENBU1RfTUFHSUNQS1Q6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjI4LjMzNTAxMTgwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgwMDAzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNoaXBzaGFwZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGRlcGVuZGVuY3kgc2l0dWF0aW9uIGZvciBgcnNpXzkxeF9oYWwuY2AgYW5kIHNwZWNpZmljYWxseSBgcnNpX3ByZXBhcmVfYmVhY29uYC4gR290dGEgbWFrZSBzdXJlIHRoZSBLY29uZmlnIHNldHVwIGlzIGNvcnJlY3Q7IGl0J3MgdGhlIGdhdGVrZWVwZXIgZm9yIHRoZXNlIHRoaW5ncy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBpbmNsdXNpb24gc2hvdWxkIHJlc2lkZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkIGluIEtjb25maWcsIGFuZCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTozMC44MTUwMTc5ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9SU0lcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFJTSV85MVhcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxcbiAgMTg6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFiZXMgc3VwcG9ydCBmb3IgUlNJIDF4MSBkZXZpY2VzLlxcbiAgMjE6XFx0XFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRjb25maWcgUlNJX0RFQlVHRlNcXG4gIDI0OlxcdFxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFxcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUlNJXzkxWFxcbiAgMjY6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgU2F5IFksIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGVuYWJsZSBkZWJ1ZyBzdXBwb3J0LiBUaGlzIG9wdGlvblxcbiAgMjk6XFx0XFx0IGNyZWF0ZXMgZGVidWdmcyBlbnRyaWVzXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBSU0lfU0RJT1xcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBNTUMgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgMzQ6XFx0XFx0ZGVmYXVsdCBtXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXFxuICAzNzpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBSU0lfVVNCXFxuICA0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFxcXCJcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IFJTSV85MVhcXG4gIDQyOlxcdFxcdGRlZmF1bHQgbVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXFxuICA0NTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBSU0lfQ09FWFxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gQlQgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNTA6XFx0XFx0ZGVwZW5kcyBvbiAhKEJUPW0gXFx1MDAyNlxcdTAwMjYgUlNJXzkxWD15KVxcbiAgNTE6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFdMQU4gQlQgY29leCBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxcbiAgNTQ6XFx0XFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSB3YW50IHRvIHVzZSB0aGlzIGZlYXR1cmVcXG4gIDU1OlxcdFxcdCAgYW5kIHlvdSBoYXZlIFJTOTExMyBtb2R1bGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjMwLjgxNTA5NzY1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc5ODcwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgUlNJIFdpcmVsZXNzIERyaXZlciBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIFJTSSB3aXJlbGVzcyBkcml2ZXIgYnVpbGQgcHJvY2Vzcy4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlYC4gVGhpcyBpcyBnZW5lcmFsbHkgd2hlcmUgdGhlIGNvcmUgY29tcGlsYXRpb24gcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHkgdGhlIG9iamVjdCBmaWxlcyBmb3IgdGhpcyBkcml2ZXIgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhpbmdzIGxpa2Ugc291cmNlIGZpbGUgbGlzdHMsIGluY2x1ZGUgcGF0aHMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHByb2JhYmx5IHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgYWRhcHRhdGlvbnMuIEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3ZlIG9yZ2FuaXplZCB0aGUgZHJpdmVyJ3MgYnVpbGQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSBjdXN0b21pemF0aW9uIG9yIHBvdGVudGlhbCBwcm9ibGVtcyBtaWdodCBsaWUuIExldCdzIHNlZSBpZiB0aGlzIE1ha2VmaWxlIHByb3ZpZGVzIHNvbWUgY2xhcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyMTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjM0LjE5NDk3MDg5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRyc2lfOTF4LXlcXHRcXHRcXHQrPSByc2lfOTF4X21haW4ub1xcbiAgIDM6XFx0cnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9jb3JlLm9cXG4gICA0OlxcdHJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfbWFjODAyMTEub1xcbiAgIDU6XFx0cnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9tZ210Lm9cXG4gICA2OlxcdHJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfaGFsLm9cXG4gICA3OlxcdHJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfcHMub1xcbiAgIDg6XFx0cnNpXzkxeC0kKENPTkZJR19SU0lfQ09FWClcXHQrPSByc2lfOTF4X2NvZXgub1xcbiAgIDk6XFx0cnNpXzkxeC0kKENPTkZJR19SU0lfREVCVUdGUylcXHQrPSByc2lfOTF4X2RlYnVnZnMub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRyc2lfdXNiLXlcXHRcXHRcXHQrPSByc2lfOTF4X3VzYi5vIHJzaV85MXhfdXNiX29wcy5vXFxuICAxMjpcXHRyc2lfc2Rpby15XFx0XFx0XFx0Kz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfUlNJXzkxWCkgXFx0XFx0Kz0gcnNpXzkxeC5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfUlNJX1NESU8pXFx0XFx0Kz0gcnNpX3NkaW8ub1xcbiAgMTU6XFx0b2JqLSQoQ09ORklHX1JTSV9VU0IpXFx0XFx0Kz0gcnNpX3VzYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjM0LjE5NTAyNjUxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzYyNzQzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFdMQU5fVkVORE9SX1JTSSBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYFdMQU5fVkVORE9SX1JTSWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGluY2x1ZGVkLiBUaGlzIG1lYW5zIEkgbmVlZCB0byB0cmFjZSBpdHMgb3JpZ2luIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHkuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHBhcmVudCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyBzdGVwIHdoZW4gbmF2aWdhdGluZyB0aGUgY29tcGxleGl0aWVzIG9mIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgb2YgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiB0byBncmFzcCBpdHMgcm9sZSBhbmQgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEhvcGVmdWxseSwgdGhpcyBzaG91bGQgcXVpY2tseSBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBzZWN0aW9ucyBhbmQgdW5jb3ZlciB0aGUgc3BlY2lmaWNzIG9mIGl0cyBkZWZpbml0aW9uIG9yIGluY2x1c2lvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODQyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo0MC41NTc3NzI5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjY4OTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXTEFOX1ZFTkRPUl9SU0lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnPTUzPUNPTkZJR19BVEg1Sz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctNjItIyBDT05GSUdfV0xBTl9WRU5ET1JfUkVBTFRFSyBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnOjYzOiMgQ09ORklHX1dMQU5fVkVORE9SX1JTSSBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnLTY0LSMgQ09ORklHX1dMQU5fVkVORE9SX1NUIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnPTc4PUNPTkZJR19CUkNNRk1BQz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy04Ny0jIENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzo4ODojIENPTkZJR19XTEFOX1ZFTkRPUl9SU0kgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTg5LSMgQ09ORklHX1dMQU5fVkVORE9SX1NJTEFCUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZz0zOD1DT05GSUdfUlRMODE5MkNVPW1cXG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZy0zOS0jIENPTkZJR19SVExXSUZJX0RFQlVHIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZzo0MDojIENPTkZJR19XTEFOX1ZFTkRPUl9SU0kgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2djdzBfZGVmY29uZmlnLTQxLSMgQ09ORklHX1dMQU5fVkVORE9SX1NUIGlzIG5vdCBzZXRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLKSArPSByZWFsdGVrL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SU0kpICs9IHJzaS9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfU0lMQUJTKSArPSBzaWxhYnMvXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUlNJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz00Nz1jb25maWcgUlNJX0NPRVhcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTU2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjU3OmVuZGlmICMgV0xBTl9WRU5ET1JfUlNJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjQyLjE1MDQ3MDExNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTI5MzU2NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB3aXJlbGVzcyBuZXR3b3JraW5nLiBUaGUgZmlyc3QgcGxhY2UgSSdtIGdvaW5nIHRvIGxvb2sgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBkZWZpbmluZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFsbCB0aGUgd2lyZWxlc3MgZHJpdmVycy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBzdHJ1Y3R1cmUgaGVyZTogdG9wLWxldmVsIGNob2ljZXMsIGRlcGVuZGVuY2llcyBiYXNlZCBvbiBoYXJkd2FyZSBvciBmdW5jdGlvbmFsaXR5LCBhbmQgaGVscCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvcHRpb24gYWN0dWFsbHkgZG9lcy4gVGhpcyBmaWxlIGlzIGdvaW5nIHRvIHRlbGwgbWUgd2hhdCB2YXJpYWJsZXMgSSBjYW4gdHdlYWsgdG8gZ2V0IHRoZSB3aXJlbGVzcyBzdGFjayBiZWhhdmluZyBhcyBJIG5lZWQgaXQgdG8uIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGJ1cmllZCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2OTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo0Ni4yNzk4MjkzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODU1NjY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjQ3LjcwODM5MDQ4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTQyMDYxMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVmVyZGljdDogUlNJIFdpcmVsZXNzIERyaXZlciBCZWFjb24gUHJlcGFyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBmaWxlIGNvbnRleHQgYW5kIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYE1BQzgwMjExYCwgYW5kIGBSU0lfVVNCYCBhcmUgdGhlIGtleSBjb25maWdzIGhlcmUuIEkgY29uZmlybWVkIHRoYXQgYHJzaV9wcmVwYXJlX2JlYWNvbmAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBkZWNsYXJlZCBpbiBgcnNpX2hhbC5oYCBhbmQgZGVmaW5lZCBpbiBgcnNpXzkxeF9oYWwuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBub24tc3RhdGljIG1ha2VzIGl0IGEgdmlhYmxlIGVudHJ5IHBvaW50LiBJIGFsc28gbG9va2VkIGF0IGByc2lfc2VuZF9iZWFjb25gLCB3aGljaCAqaXMqIHN0YXRpYywgc28gdGhhdCdzIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIGByc2lfbWdtdF9wa3RfcmVjdmAgaXMgYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cbkFmdGVyIHJldmlld2luZyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkLCBvbmx5IGByc2lfcHJlcGFyZV9iZWFjb25gIHdhcyBtb2RpZmllZC5cblxuQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGByc2lfcHJlcGFyZV9iZWFjb25gIGFuZCBgcnNpX21nbXRfcGt0X3JlY3ZgLiBJIGtub3cgYFJTSV85MVhgIGFuZCBgUlNJX1VTQmAgYXJlIHRyaXN0YXRlLCBhbmQgYFdMQU5fVkVORE9SX1JTSWAgaXMgYSBib29sZWFuIGFuZCBkZWZhdWx0cyB0byAneScuXG5cblNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBmaXggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIGByc2lfcHJlcGFyZV9iZWFjb25gLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBpbXBhY3QuIEFuZCBnaXZlbiBpdCdzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExYCBhbmQgdGhlIFJTSSB3aXJlbGVzcyBVU0IgZHJpdmVyIGVtdWxhdGlvbiwgaXQncyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdGFyZ2V0ZWQgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zIG1lYW5zIHRoZXkncmUgYWNjZXNzaWJsZSBlbnRyeXBvaW50cy4gSXQgYWxsIGNoZWNrcyBvdXQuIFRoaXMgaXMgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTgxLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo1Ni42NTA0NTQxMzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk3MjUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9wcmVwYXJlX2JlYWNvblwiLFxuICAgIFwicnNpX21nbXRfcGt0X3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgdGFpbHJvb20gYm91bmRzIGNoZWNrcyBpbiByc2lfcHJlcGFyZV9iZWFjb24oKSBiZWZvcmUgY29weWluZyBiZWFjb24gZGF0YSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgY3Jhc2guIFRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlciBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKFJTSV9VU0IpIGFuZCBtYWM4MDIxMSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9SU0lcIixcbiAgICBcIlJTSV85MVhcIixcbiAgICBcIlJTSV9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3ByZXBhcmVfYmVhY29uXCIsXG4gICAgXCJyc2lfbWdtdF9wa3RfcmVjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyB0YWlscm9vbSBib3VuZHMgY2hlY2tzIGluIHJzaV9wcmVwYXJlX2JlYWNvbigpIGJlZm9yZSBjb3B5aW5nIGJlYWNvbiBkYXRhLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvciBjcmFzaC4gVGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoUlNJX1VTQikgYW5kIG1hYzgwMjExIGluIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo1Ni43MTk0MzM4NDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTY2MDk5NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDU6NTYuNzE5ODQ3Mjg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjY5NjU2ODE4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBza2JfdGFpbHJvb20oc2tiKWApIGluIGByc2lfcHJlcGFyZV9iZWFjb24oKWAgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3cgKG91dC1vZi1ib3VuZHMgd3JpdGUpIHdoZW4gY29weWluZyBiZWFjb24gZGF0YSAoYG1hY19iY24tXFx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcHJldmVudGlvbiBmaXguIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGJ1ZmZlciBvdmVyZmxvd3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIChhbmQgc2tiIGFzc2VydGlvbnMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQ5ZDFiNzkyOTg3MDFjNGE2Yjc1Zjk3NjFhNmQ2M2U5YjdmNDI2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE5OjQzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuaW5kZXggN2QyNjMxNGEzZTc2YS4uNTBmNzdmM2VlZTkyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuQEAgLTQzMSw2ICs0MzEsNyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gXHR1OCB2YXBfaWQgPSAwLCBpO1xuK1x0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcbkBAIC00ODAsNiArNDgxLDEzIEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCArIDJdID09IDApXG4gXHRcdGJjbl9mcm0tXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcbiBcbitcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XG4rXHRpZiAodGFpbHJvb20gXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcbitcdCAgICBtYWNfYmNuLVx1MDAzZWxlbiBcdTAwM2UgdGFpbHJvb20gLSBGUkFNRV9ERVNDX1NaKSB7XG4rXHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4gXHRtZW1jcHkoXHUwMDI2c2tiLVx1MDAzZWRhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tXHUwMDNlZGF0YSwgbWFjX2Jjbi1cdTAwM2VsZW4pO1xuIFx0c2tiX3B1dChza2IsIG1hY19iY24tXHUwMDNlbGVuICsgRlJBTUVfREVTQ19TWik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo1Ni43MTk4NDgyMjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxNDU0ODYyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkFuYWx5emluZyB0aGUgUlNJIFdpcmVsZXNzIEhBTCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0J3MgYmVlbiBhbHRlcmVkIGFuZCB3aHkuIE5vdywgSSBzdXNwZWN0IHRoZSBjb3JlIG9mIHRoaXMgYmVhY29uIGhhbmRsaW5nIG1pZ2h0IGJlIGluIGByc2lfcHJlcGFyZV9iZWFjb25gLCBzbyBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBvZiB0aGF0IGZ1bmN0aW9uLiBTZWVpbmcgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6MDYuODY1MzM3MDA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MjY6XFx0e1xcbiA0Mjc6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cXHUwMDNlcHJpdjtcXG4gNDI4OlxcdFxcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xcbiA0Mjk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXFx1MDAzZXByaXYtXFx1MDAzZWh3O1xcbiA0MzA6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gXFx1MDAyNmh3LVxcdTAwM2Vjb25mO1xcbiA0MzE6XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjtcXG4gNDMyOlxcdFxcdHN0cnVjdCBza19idWZmICptYWNfYmNuO1xcbiA0MzM6XFx0XFx0dTggdmFwX2lkID0gMCwgaTtcXG4gNDM0OlxcdFxcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcXG4gNDM1OlxcdFxcdHUxNiB0aW1fb2Zmc2V0ID0gMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuIDQzODpcXHRcXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbiA0Mzk6XFx0XFx0XFx0aWYgKCF2aWYpXFxuIDQ0MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDQxOlxcdFxcdFxcdGlmICgodmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxcbiA0NDI6XFx0XFx0XFx0ICAgICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSlcXG4gNDQzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFx0aWYgKCF2aWYpXFxuIDQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdG1hY19iY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYWRhcHRlci1cXHUwMDNlaHcsXFxuIDQ0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICB2aWYsXFxuIDQ0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XFxuIDQ1MDpcXHRcXHRpZiAoIW1hY19iY24pIHtcXG4gNDUxOlxcdFxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsIFxcXCJGYWlsZWQgdG8gZ2V0IGJlYWNvbiBmcm9tIG1hYzgwMjExXFxcXG5cXFwiKTtcXG4gNDUyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTM6XFx0XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRjb21tb24tXFx1MDAzZWJlYWNvbl9jbnQrKztcXG4gNDU2OlxcdFxcdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXFx1MDAzZWRhdGE7XFxuIDQ1NzpcXHRcXHRyc2lfc2V0X2xlbl9xbm8oXFx1MDAyNmJjbl9mcm0tXFx1MDAzZWxlbl9xbm8sIG1hY19iY24tXFx1MDAzZWxlbiwgUlNJX1dJRklfREFUQV9RKTtcXG4gNDU4OlxcdFxcdGJjbl9mcm0tXFx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XFxuIDQ1OTpcXHRcXHRiY25fZnJtLVxcdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxcbiA0NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX05PX0FDS19JTkQgfFxcbiA0NjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1NFUV9OTyB8XFxuIDQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgIFJBVEVfSU5GT19FTkFCTEUpO1xcbiA0NjU6XFx0XFx0YmNuX2ZybS1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYodmFwX2lkIFxcdTAwM2NcXHUwMDNjIDE0KTtcXG4gNDY2OlxcdFxcdGJjbl9mcm0tXFx1MDAzZXFpZF90aWQgPSBCRUFDT05fSFdfUTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XFxuIDQ2OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSk7XFxuIDQ3MDpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyB8PSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUgXFx1MDAzZVxcdTAwM2UgMTIpO1xcbiA0NzE6XFx0XFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcXG4gNDcyOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvID0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFKTtcXG4gNDczOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSBcXHUwMDNlXFx1MDAzZSAxMik7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGlmIChjb21tb24tXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXFxuIDQ3NzpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuIDQ3ODpcXHRcXHRlbHNlXFxuIDQ3OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdGlmIChtYWNfYmNuLVxcdTAwM2VkYXRhW3RpbV9vZmZzZXQgKyAyXSA9PSAwKVxcbiA0ODI6XFx0XFx0XFx0YmNuX2ZybS1cXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcXG4gNDg1OlxcdFxcdGlmICh0YWlscm9vbSBcXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcXG4gNDg2OlxcdFxcdCAgICBtYWNfYmNuLVxcdTAwM2VsZW4gXFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcXG4gNDg3OlxcdFxcdFxcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRtZW1jcHkoXFx1MDAyNnNrYi1cXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cXHUwMDNlZGF0YSwgbWFjX2Jjbi1cXHUwMDNlbGVuKTtcXG4gNDkyOlxcdFxcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVxcdTAwM2VsZW4gKyBGUkFNRV9ERVNDX1NaKTtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0ZGV2X2tmcmVlX3NrYihtYWNfYmNuKTtcXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHR9XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdHN0YXRpYyB2b2lkIGJsX2NtZF90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiA1MDA6XFx0e1xcbiA1MDE6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHRhZGFwdGVyLVxcdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcXG4gNTA0OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlYmxfY21kX3RpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6MDYuODY1NDYyMzc0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDA4NzUzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEJlYWNvbidzIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGByc2lfcHJlcGFyZV9iZWFjb25gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBhbmQgKndoeSogdGhpcyBiZWFjb24gcHJlcGFyYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdHJpZ2dlcmVkLiBXaGVyZSdzIHRoZSBjYWxsaW5nIGNvZGU/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdy4gSXMgdGhpcyBwYXJ0IG9mIGFuIGludGVycnVwdCBoYW5kbGVyLCBhIHNjaGVkdWxlZCB0YXNrLCBvciBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGFuIGV4dGVybmFsIGV2ZW50PyBUaGUgY29udGV4dCB3aWxsIHNoYXBlIGhvdyBJIGludGVycHJldCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIHNwZWNpZmljIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBkYXRhIGl0J3Mgb3BlcmF0aW5nIG9uIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgYmVhY29uIGlzIGJlaW5nIHNldCB1cC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgcXVpY2tseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIElERSBvciBzb3VyY2UgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIGNhbiBvZmZlci4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGJlYWNvbmluZyBtZWNoYW5pc20gaW4gcGxheSBoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NjowOS44MDYzMzk4ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA0OTA5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX3ByZXBhcmVfYmVhY29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTM4OD1pbnQgcnNpX3NlbmRfYnRfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDI1OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTE3NjM9c3RhdGljIGludCByc2lfc2VuZF9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzc2LVxcdFxcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6MTc3NzpcXHRpZiAocnNpX3ByZXBhcmVfYmVhY29uKGNvbW1vbiwgc2tiKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzc4LVxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsIFxcXCJGYWlsZWQgdG8gcHJlcGFyZSBiZWFjb25cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaD0yMjU9aW50IHJzaV9wcmVwYXJlX2RhdGFfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oOjIyNjppbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmgtMjI3LWludCByc2lfc2VuZF9wa3RfdG9fYnVzKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NjoxMS4yNTY4MzU5ODVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE0MjM4MTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIHJzaV9zZW5kX2JlYWNvbiBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGByc2lfc2VuZF9iZWFjb25gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGZpbmQgaXQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbiBsb2dpYyBmb3IgdGhlIFJTSSA5MXggd2lyZWxlc3MgY2hpcHNldC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGJlYWNvbiBmcmFtZXMuIEknbGwgYmUgbG9va2luZyBmb3IgZGV0YWlscyBsaWtlIGhvdyB0aGUgZnJhbWUgaXMgY29uc3RydWN0ZWQsIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBiZWFjb24gc2VuZGluZyBwcm9jZXNzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIGRyaXZlciBhbmQsIHVsdGltYXRlbHksIHRoZSBoYXJkd2FyZSBpdHNlbGYuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBsZWFybi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ2OjE0LjM5OTIyMDI5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xcbjE3NjE6XFx0fVxcbjE3NjI6XFx0XFxuMTc2MzpcXHRzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbjE3NjQ6XFx0e1xcbjE3NjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuMTc2NjpcXHRcXHR1OCBkd29yZF9hbGlnbl9ieXRlcyA9IDA7XFxuMTc2NzpcXHRcXG4xNzY4OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IoTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3Njk6XFx0XFx0aWYgKCFza2IpXFxuMTc3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNzcxOlxcdFxcbjE3NzI6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHRkd29yZF9hbGlnbl9ieXRlcyA9ICgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEgXFx1MDAyNiAweDNmKTtcXG4xNzc1OlxcdFxcdGlmIChkd29yZF9hbGlnbl9ieXRlcylcXG4xNzc2OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcXG4xNzc3OlxcdFxcdGlmIChyc2lfcHJlcGFyZV9iZWFjb24oY29tbW9uLCBza2IpKSB7XFxuMTc3ODpcXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgYmVhY29uXFxcXG5cXFwiKTtcXG4xNzc5OlxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4xNzgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3ODE6XFx0XFx0fVxcbjE3ODI6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmNvbW1vbi1cXHUwMDNldHhfcXVldWVbTUdNVF9CRUFDT05fUV0sIHNrYik7XFxuMTc4MzpcXHRcXHRyc2lfc2V0X2V2ZW50KFxcdTAwMjZjb21tb24tXFx1MDAzZXR4X3RocmVhZC5ldmVudCk7XFxuMTc4NDpcXHRcXHRyc2lfZGJnKERBVEFfVFhfWk9ORSwgXFxcIiVzOiBBZGRlZCB0byBiZWFjb24gcXVldWVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFx0cmV0dXJuIDA7XFxuMTc4NzpcXHR9XFxuMTc4ODpcXHRcXG4xNzg5OlxcdCNpZmRlZiBDT05GSUdfUE1cXG4xNzkwOlxcdGludCByc2lfc2VuZF93b3dsYW5fcmVxdWVzdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1MTYgZmxhZ3MsXFxuMTc5MTpcXHRcXHRcXHRcXHQgICAgdTE2IHNsZWVwX3N0YXR1cylcXG4xNzkyOlxcdHtcXG4xNzkzOlxcdFxcdHN0cnVjdCByc2lfd293bGFuX3JlcSAqY21kX2ZyYW1lO1xcbjE3OTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNzk1OlxcdFxcdHU4IGxlbmd0aDtcXG4xNzk2OlxcdFxcbjE3OTc6XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBTZW5kaW5nIHdvd2xhbiByZXF1ZXN0IGZyYW1lXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdGxlbmd0aCA9IHNpemVvZigqY21kX2ZyYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6MTQuMzk5MzgwNzA1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyODYxMjQ1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEJlYWNvbiBQcmVwYXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG9yaWdpbmFsIGNvZGUgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbmAgd2FzIHZ1bG5lcmFibGU6IGl0IHVzZWQgYG1lbWNweWAgYW5kIGBza2JfcHV0YCB3aXRob3V0IHZlcmlmeWluZyB0aGUgYHNrYmAgaGFkIGVub3VnaCBzcGFjZSBmb3IgdGhlIGJlYWNvbiBkYXRhIChgbWFjX2Jjbi1cdTAwM2VsZW5gKS4gVGhpcywgb2YgY291cnNlLCBwcmVzZW50ZWQgYSBjbGVhciBidWZmZXIgb3ZlcmZsb3cgcmlza+KAlGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuXG5cblRoZSBwYXRjaCBzbWFydGx5IGFkZHMgYSBib3VuZHMgY2hlY2s6IGl0IHZlcmlmaWVzIGBza2JfdGFpbHJvb20oc2tiKWAgaXMgc3VmZmljaWVudCBiZWZvcmUgcHJvY2VlZGluZy4gSWYgdGhlcmUncyBub3QgZW5vdWdoIHJvb20sIHRoZSBiZWFjb24gYnVmZmVyIGlzIGZyZWVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZC4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBJbiBgcnNpX3NlbmRfYmVhY29uYCwgdGhlIGBza2JgIGl0c2VsZiBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgemVyb2VkLCBzbyB0aGF0J3MgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgY2hhbmdlIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnl0aGluZyBLTVNBTiB3b3VsZCBiZSBzcGVjaWZpY2FsbHkgdXNlZnVsIGZvcj8gSSBkb24ndCBzZWUgaXQuIFRoZSBwcmltYXJ5IGNoYW5nZSBpcyBhICpyZXN0cmljdGlvbiogb24gYWNjZXNzLCBub3QgYW4gaW50cm9kdWN0aW9uIG9mIG5ldyByaXNrcy5cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNoZW5hbmlnYW5zLCBpb2N0bHMsIG9yIHNvY2tldCBvcHRpb25zIGFyZSB0b3VjaGVkLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vcGUuIFRoZSBjaGVjayBkZXBlbmRzIG9uIGBza2JfdGFpbHJvb21gLCBhIGtub3duIHZhbGlkIHZhbHVlLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOb3BlLiBUaGUgYnVmZmVyIGlzIG1lbXNldCB0byB6ZXJvICpiZWZvcmUqIGFueSBvZiB0aGlzIGhhcHBlbnMuXG40LiAgKipCb3VuZHMgY2hlY2tzIHRoYXQgKmFsbG93KiB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIE5vcGUuIFRoaXMgY2hlY2sgKnByZXZlbnRzKiBpdC4gV2UncmUgZXhwbGljaXRseSBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBpbml0aWFsIHplcm9pbmcgbWFrZXMgdGhpcyBidWxsZXQtcHJvb2YuXG5cblNvLCB0aGUgY2hhbmdlICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMuIEtBU0FOIGlzIHRoZSByZWxldmFudCBzYW5pdGl6ZXIuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoaXMgaXMgYSBLQVNBTiBjYXNlLlxuXG5BbGwgY2hlY2tzIGFyZSBkb25lLiBJJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHM6IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OSwiT3V0cHV0VG9rZW5zIjoxNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NjoyMy42ODU1MDc4MDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBza2JfdGFpbHJvb20oc2tiKWApIGluIGByc2lfcHJlcGFyZV9iZWFjb24oKWAgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3cgKG91dC1vZi1ib3VuZHMgd3JpdGUpIHdoZW4gY29weWluZyBiZWFjb24gZGF0YSAoYG1hY19iY24tXFx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcHJldmVudGlvbiBmaXguIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGJ1ZmZlciBvdmVyZmxvd3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIChhbmQgc2tiIGFzc2VydGlvbnMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYHNrYl90YWlscm9vbShza2IpYCkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbigpYCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyAob3V0LW9mLWJvdW5kcyB3cml0ZSkgd2hlbiBjb3B5aW5nIGJlYWNvbiBkYXRhIChgbWFjX2Jjbi1cXHUwMDNlZGF0YWApIGludG8gdGhlIHRhcmdldCBgc2tiYC4gXFxuXFxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBwcmV2ZW50aW9uIGZpeC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgYnVmZmVyIG92ZXJmbG93cyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4gKGFuZCBza2IgYXNzZXJ0aW9ucykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowd6wwj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 18:44:42 +0000 UTC FinishedAt: 2026-08-31 19:46:25 +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": "462bdd08fbdf41db223c6117d907c8fd68d666ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "462bdd08fbdf41db223c6117d907c8fd68d666ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211" ], "series_id": "603fb900-1dfb-44db-b792-de3f895b779a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rsi_prepare_beacon", "rsi_mgmt_pkt_recv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgdGFpbHJvb20gYm91bmRzIGNoZWNrcyBpbiByc2lfcHJlcGFyZV9iZWFjb24oKSBiZWZvcmUgY29weWluZyBiZWFjb24gZGF0YSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgY3Jhc2guIFRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlciBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKFJTSV9VU0IpIGFuZCBtYWM4MDIxMSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkOWQxYjc5Mjk4NzAxYzRhNmI3NWY5NzYxYTZkNjNlOWI3ZjQyNjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxOTo0MzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG5pbmRleCA3ZDI2MzE0YTNlNzZhLi41MGY3N2YzZWVlOTJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG5AQCAtNDMxLDYgJiM0Mzs0MzEsNyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gXHR1OCB2YXBfaWQgPSAwLCBpO1xuJiM0MztcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcbiBcdHUxNiB0aW1fb2Zmc2V0ID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaSYjNDM7JiM0MzspIHtcbkBAIC00ODAsNiAmIzQzOzQ4MSwxMyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAobWFjX2Jjbi1cdTAwM2VkYXRhW3RpbV9vZmZzZXQgJiM0MzsgMl0gPT0gMClcbiBcdFx0YmNuX2ZybS1cdTAwM2VmcmFtZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9EQVRBX0RFU0NfRFRJTV9CRUFDT04pO1xuIFxuJiM0MztcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XG4mIzQzO1x0aWYgKHRhaWxyb29tIFx1MDAzYyBGUkFNRV9ERVNDX1NaIHx8XG4mIzQzO1x0ICAgIG1hY19iY24tXHUwMDNlbGVuIFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRtZW1jcHkoXHUwMDI2c2tiLVx1MDAzZWRhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tXHUwMDNlZGF0YSwgbWFjX2Jjbi1cdTAwM2VsZW4pO1xuIFx0c2tiX3B1dChza2IsIG1hY19iY24tXHUwMDNlbGVuICYjNDM7IEZSQU1FX0RFU0NfU1opO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHRhaWxyb29tIGJvdW5kcyBjaGVja3MgaW4gcnNpX3ByZXBhcmVfYmVhY29uKCkgYmVmb3JlIGNvcHlpbmcgYmVhY29uIGRhdGEsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIGNyYXNoLiBUaGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChSU0lfVVNCKSBhbmQgbWFjODAyMTEgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDlkMWI3OTI5ODcwMWM0YTZiNzVmOTc2MWE2ZDYzZTliN2Y0MjYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCmluZGV4IDdkMjYzMTRhM2U3NmEuLjUwZjc3ZjNlZWU5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCkBAIC00MzEsNiAmIzQzOzQzMSw3IEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBza19idWZmICptYWNfYmNuOwogCXU4IHZhcF9pZCA9IDAsIGk7CiYjNDM7CXVuc2lnbmVkIGludCB0YWlscm9vbTsKIAl1MTYgdGltX29mZnNldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykgewpAQCAtNDgwLDYgJiM0Mzs0ODEsMTMgQEAgaW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChtYWNfYmNuLSZndDtkYXRhW3RpbV9vZmZzZXQgJiM0MzsgMl0gPT0gMCkKIAkJYmNuX2ZybS0mZ3Q7ZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTsKIAomIzQzOwl0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOwomIzQzOwlpZiAodGFpbHJvb20gJmx0OyBGUkFNRV9ERVNDX1NaIHx8CiYjNDM7CSAgICBtYWNfYmNuLSZndDtsZW4gJmd0OyB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHsKJiM0MzsJCWRldl9rZnJlZV9za2IobWFjX2Jjbik7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiAJbWVtY3B5KCZhbXA7c2tiLSZndDtkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLSZndDtkYXRhLCBtYWNfYmNuLSZndDtsZW4pOwogCXNrYl9wdXQoc2tiLCBtYWNfYmNuLSZndDtsZW4gJiM0MzsgRlJBTUVfREVTQ19TWik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGByc2lfcHJlcGFyZV9iZWFjb25gIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY2AuIFJpZ2h0LCBzbyB0aGlzIGlzIHRoZSBSZWRwaW5lIFNpZ25hbHMgOTF4IHdpcmVsZXNzIGRyaXZlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIFVTQiBvciBTRElPPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgY2FuIEkgZnV6eiBpdCBlZmZlY3RpdmVseT8gSWYgaXQmIzM5O3MgVVNCLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciYjMzk7cyBVU0IgcmF3IGdhZGdldCBvciBzb21lIGtpbmQgb2YgVVNCIGVtdWxhdGlvbiB0byBnZXQgYXQgaXQuIFRoYXTigJlzIHRoZSBpZGVhbCBzY2VuYXJpbyBmb3IgdGhvcm91Z2ggdGVzdGluZy4gSWYgbm90LCB3aGF0IG90aGVyIGF0dGFjayBzdXJmYWNlcyBhcmUgcHJlc2VudD8KCkxldCYjMzk7cyBxdWlja2x5IHNlYXJjaCBmb3Igb3RoZXIgYHJzaWAgZHJpdmVyIGZpbGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaXRzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBkZXRlcm1pbmUgaG93IGFjY2Vzc2libGUgdGhpcyBmdW5jdGlvbiBpcywgYW5kIHdoYXQgYXR0YWNrIHZlY3RvcnMgbWlnaHQgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlNJXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTk2MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc9MTM9aWYgV0xBTl9WRU5ET1JfUlNJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xNi1cdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE3Olx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTgtXHRkZXBlbmRzIG9uIE1BQzgwMjExXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoyMzpjb25maWcgUlNJX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRlYnVnIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBSU0lfOTFYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MzE6Y29uZmlnIFJTSV9TRElPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gTU1DIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zNC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6Mzk6Y29uZmlnIFJTSV9VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDE6XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDItXHRkZWZhdWx0IG1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy00Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQ3OmNvbmZpZyBSU0lfQ09FWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBXTEFOIEJUIENvZXhpc3RlbmNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBCVCBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NTA6XHRkZXBlbmRzIG9uICEoQlQ9bSBcdTAwMjZcdTAwMjYgUlNJXzkxWD15KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNTEtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU9Nz1yc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9wcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6ODpyc2lfOTF4LSQoQ09ORklHX1JTSV9DT0VYKVx0JiM0Mzs9IHJzaV85MXhfY29leC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6OTpyc2lfOTF4LSQoQ09ORklHX1JTSV9ERUJVR0ZTKVx0JiM0Mzs9IHJzaV85MXhfZGVidWdmcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTEyPXJzaV9zZGlvLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1JTSV85MVgpIFx0XHQmIzQzOz0gcnNpXzkxeC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1JTSV9TRElPKVx0XHQmIzQzOz0gcnNpX3NkaW8ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19SU0lfVVNCKVx0XHQmIzQzOz0gcnNpX3VzYi5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTIyPXN0YXRpYyBlbnVtIHJzaV9jb2V4X3F1ZXVlcyByc2lfY29leF9kZXRlcm1pbmVfY29leF9xXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTI0LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyNTpcdGVudW0gcnNpX2NvZXhfcXVldWVzIHFfbnVtID0gUlNJX0NPRVhfUV9JTlZBTElEO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjI3Olx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2Y29leF9jYi1cdTAwM2Vjb2V4X3R4X3FzW1JTSV9DT0VYX1FfQ09NTU9OXSkgXHUwMDNlIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6Mjg6XHRcdHFfbnVtID0gUlNJX0NPRVhfUV9DT01NT047XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6Mjk6XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZjb2V4X2NiLVx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9CVF0pIFx1MDAzZSAwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjMwOlx0XHRxX251bSA9IFJTSV9DT0VYX1FfQlQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MzE6XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZjb2V4X2NiLVx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9XTEFOXSkgXHUwMDNlIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MzI6XHRcdHFfbnVtID0gUlNJX0NPRVhfUV9XTEFOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTMzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYz0zNz1zdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTM4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzozOTpcdGVudW0gcnNpX2NvZXhfcXVldWVzIGNvZXhfcSA9IFJTSV9DT0VYX1FfSU5WQUxJRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy00MC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjQ2Olx0XHRpZiAoY29leF9xID09IFJTSV9DT0VYX1FfQlQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo0NzpcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZjb2V4X2NiLVx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9CVF0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTQ4LVx0XHRcdHJzaV9zZW5kX2J0X3BrdChjb2V4X2NiLVx1MDAzZXByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNDktXHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo1MDpcdH0gd2hpbGUgKGNvZXhfcSAhPSBSU0lfQ09FWF9RX0lOVkFMSUQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTUxLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9Njg9aW50IHJzaV9jb2V4X3JlY3ZfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4ICptc2cpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNjkte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjcwOlx0dTggbXNnX3R5cGUgPSBtc2dbUlNJX1JYX0RFU0NfTVNHX1RZUEVfT0ZGU0VUXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy03MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9ODc9c3RhdGljIGlubGluZSBpbnQgcnNpX21hcF9jb2V4X3EodTggaGFsX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy04OS1cdHN3aXRjaCAoaGFsX3F1ZXVlKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTA6XHRjYXNlIFJTSV9DT0VYX1E6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTE6XHRcdHJldHVybiBSU0lfQ09FWF9RX0NPTU1PTjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MjpcdGNhc2UgUlNJX1dMQU5fUTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MzpcdFx0cmV0dXJuIFJTSV9DT0VYX1FfV0xBTjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NDpcdGNhc2UgUlNJX0JUX1E6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTU6XHRcdHJldHVybiBSU0lfQ09FWF9RX0JUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTk2LVx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjk3Olx0cmV0dXJuIFJTSV9DT0VYX1FfSU5WQUxJRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy05OC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTEwMD1pbnQgcnNpX2NvZXhfc2VuZF9wa3Qodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaGFsX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMDgtXHRjb2V4X3EgPSByc2lfbWFwX2NvZXhfcShoYWxfcXVldWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjEwOTpcdGlmIChjb2V4X3EgPT0gUlNJX0NPRVhfUV9JTlZBTElEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTEwLVx0XHRyc2lfZGJnKEVSUl9aT05FLCBcJiMzNDtJbnZhbGlkIGNvZXggcXVldWVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMTItXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTEzOlx0aWYgKGNvZXhfcSAhPSBSU0lfQ09FWF9RX0NPTU1PTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoxMTQ6XHQgICAgY29leF9xICE9IFJTSV9DT0VYX1FfV0xBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTExNS1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y29leF9jYi1cdTAwM2Vjb2V4X3R4X3FzW2NvZXhfcV0sIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTkxPXN0YXRpYyB1MzIgcnNpX2dldF9udW1fcGt0c19kZXF1ZXVlKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4IHFfbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0xMDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MTAyOlx0cmF0ZS5iaXRyYXRlID0gUlNJX1JBVEVfTUNTMCAqIDUgKiAxMDsgLyogQ29udmVydCB0byBLYnBzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMTAzLVx0aWYgKHFfbnVtID09IFZJX1EpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTI2MT12b2lkIHJzaV9jb3JlX3Fvc19wcm9jZXNzb3Ioc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzA3LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjMwODojaWZkZWYgQ09ORklHX1JTSV9DT0VYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzA5LVx0XHRcdGlmIChjb21tb24tXHUwMDNlY29leF9tb2RlIFx1MDAzZSAxKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzEwLVx0XHRcdFx0c3RhdHVzID0gcnNpX2NvZXhfc2VuZF9wa3QoY29tbW9uLCBza2IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MzExOlx0XHRcdFx0XHRcdFx0ICAgUlNJX1dMQU5fUSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzEyLVx0XHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTMxNy1cdFx0XHRcdFx0c3RhdHVzID0gcnNpX3NlbmRfZGF0YV9wa3QoY29tbW9uLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjMxODojaWZkZWYgQ09ORklHX1JTSV9DT0VYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzE5LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM9MzUyPXN0cnVjdCBpZWVlODAyMTFfdmlmICpyc2lfZ2V0X3ZpZihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zNTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MzU3Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM1OC1cdFx0dmlmID0gYWRhcHRlci1cdTAwM2V2aWZzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYz0zNzQ9dm9pZCByc2lfY29yZV94bWl0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM5Mi1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozOTM6XHRpZiAoY29tbW9uLVx1MDAzZXdvd19mbGFncyBcdTAwMjYgUlNJX1dPV19FTkFCTEVEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzk0LVx0XHRyc2lfZGJnKEVSUl9aT05FLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy00MjAtXHRcdFx0cnNpX2hhbF9zZW5kX3N0YV9ub3RpZnlfZnJhbWUoY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjQyMTpcdFx0XHRcdFx0XHQgICAgICBSU0lfSUZUWVBFX1NUQVRJT04sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtNDIyLVx0XHRcdFx0XHRcdCAgICAgIFNUQV9DT05ORUNURUQsIGJzcy1cdTAwM2Vic3NpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz01OD1pbnQgcnNpX3ByZXBhcmVfbWdtdF9kZXNjKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA1LVx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNm1nbXRfZGVzYy1cdTAwM2VsZW5fcW5vLCAoc2tiLVx1MDAzZWxlbiAtIEZSQU1FX0RFU0NfU1opLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA2Olx0XHRcdFJTSV9XSUZJX01HTVRfUSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDctXHRtZ210X2Rlc2MtXHUwMDNlZnJhbWVfdHlwZSA9IFRYX0RPVDExX01HTVQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTExLVx0aWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEod2gtXHUwMDNlZnJhbWVfY29udHJvbCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTI6XHRcdG1nbXRfZGVzYy1cdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0lOU0VSVF9TRVFfSU5fRlcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEzLVx0bWdtdF9kZXNjLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUkFURV9JTkZPX0VOQUJMRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTQtXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2gtXHUwMDNlYWRkcjEpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTE1Olx0XHRtZ210X2Rlc2MtXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfQlJPQURDQVNUX1BLVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE5LVx0aWYgKChjb21tb24tXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdIWikgXHUwMDI2XHUwMDI2ICFjb21tb24tXHUwMDNlcDJwX2VuYWJsZWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMjA6XHRcdG1nbXRfZGVzYy1cdTAwM2VyYXRlX2luZm8gPSBjcHVfdG9fbGUxNihSU0lfUkFURV8xKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEyMS1cdGVsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyMjpcdFx0bWdtdF9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTIzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEyNy1cdGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcCh3aC1cdTAwM2VmcmFtZV9jb250cm9sKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTI4Olx0XHRtZ210X2Rlc2MtXHUwMDNlbWlzY19mbGFncyB8PSAoUlNJX0FERF9ERUxUQV9UU0ZfVkFQX0lEIHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyOTpcdFx0XHRcdFx0ICBSU0lfRkVUQ0hfUkVUUllfQ05UX0ZSTV9IU1QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTMwLSNkZWZpbmUgUFJPQkVfUkVTUF9SRVRSWV9DTlRcdDNcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xNDQtXHRtZ210X2Rlc2MtXHUwMDNlcmF0ZV9pbmZvIHw9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxNDU6XHRcdGNwdV90b19sZTE2KCh0eF9wYXJhbXMtXHUwMDNldmFwX2lkIFx1MDAzY1x1MDAzYyBSU0lfREVTQ19WQVBfSURfT0ZTVCkgXHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxNDY6XHRcdFx0ICAgIFJTSV9ERVNDX1ZBUF9JRF9NQVNLKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTE0Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0xNTI9aW50IHJzaV9wcmVwYXJlX2RhdGFfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwMC1cdFx0aWVlZTgwMjExX3NpemUgJiM0Mzs9IDI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyMDE6XHRcdGRhdGFfZGVzYy1cdTAwM2VtYWNfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoUlNJX1FPU19FTkFCTEUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjAyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwNi1cdCAgICAoYWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9PSBQU19FTkFCTEVEKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIwNzpcdFx0d2gtXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihSU0lfU0VUX1BTX0VOQUJMRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMDgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjE0LVx0XHRcdGllZWU4MDIxMV9zaXplICYjNDM7PSA4O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjE1Olx0XHRkYXRhX2Rlc2MtXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9FTkNSWVBUX1BLVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMTYtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMTctXHRyc2lfc2V0X2xlbl9xbm8oXHUwMDI2ZGF0YV9kZXNjLVx1MDAzZWxlbl9xbm8sIChza2ItXHUwMDNlbGVuIC0gRlJBTUVfREVTQ19TWiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyMTg6XHRcdFx0UlNJX1dJRklfREFUQV9RKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIxOS1cdGRhdGFfZGVzYy1cdTAwM2VoZWFkZXJfbGVuID0gaWVlZTgwMjExX3NpemU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjQyLVx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNDM6XHRcdFx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjQ0LVx0XHRlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNDU6XHRcdFx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjQ2Olx0XHRkYXRhX2Rlc2MtXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9SRUtFWV9QVVJQT1NFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI0NzpcdFx0ZGF0YV9kZXNjLVx1MDAzZW1pc2NfZmxhZ3MgfD0gUlNJX0ZFVENIX1JFVFJZX0NOVF9GUk1fSFNUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjQ4LSNkZWZpbmUgRUFQT0xfUkVUUllfQ05UIDE1XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjU1LVx0XHRcdFx0XHQoc2tiLVx1MDAzZWxlbiAtIEZSQU1FX0RFU0NfU1opLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjU2Olx0XHRcdFx0XHRSU0lfV0lGSV9NR01UX1EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjU3LVx0XHRpZiAoKChza2ItXHUwMDNlbGVuIC0gaGVhZGVyX3NpemUpID09IEVBUE9MNF9QQUNLRVRfTEVOKSB8fFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI1OS1cdFx0XHRkYXRhX2Rlc2MtXHUwMDNlbWlzY19mbGFncyB8PVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjYwOlx0XHRcdFx0UlNJX0RFU0NfUkVRVUlSRV9DRk1fVE9fSE9TVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI2MS1cdFx0XHR4dGVuZF9kZXNjLVx1MDAzZWNvbmZpcm1fZnJhbWVfdHlwZSA9IEVBUE9MNF9DT05GSVJNO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3Mi1cdFx0ZGF0YV9kZXNjLVx1MDAzZWZyYW1lX2luZm8gPSBjcHVfdG9fbGUxNihSQVRFX0lORk9fRU5BQkxFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI3MzpcdFx0ZGF0YV9kZXNjLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0JST0FEQ0FTVF9QS1QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjc0LVx0XHRkYXRhX2Rlc2MtXHUwMDNlc3RhX2lkID0gdmFwX2lkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3OC1cdFx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNzk6XHRcdFx0XHRkYXRhX2Rlc2MtXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yODAtXHRcdFx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjgxOlx0XHRcdFx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjgyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjg5LVx0ZGF0YV9kZXNjLVx1MDAzZXJhdGVfaW5mbyB8PVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjkwOlx0XHRjcHVfdG9fbGUxNigodHhfcGFyYW1zLVx1MDAzZXZhcF9pZCBcdTAwM2NcdTAwM2MgUlNJX0RFU0NfVkFQX0lEX09GU1QpIFx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjkxOlx0XHRcdCAgICBSU0lfREVTQ19WQVBfSURfTUFTSyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MzM3PWludCByc2lfc2VuZF9tZ210X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTM3My1cdFx0XHRcJiMzNDslczogYmxvY2tpbmcgbWdtdCBxdWV1ZVxcblwmIzM0OywgX19mdW5jX18pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6Mzc0Olx0XHRtZ210X2Rlc2MtXHUwMDNlbWlzY19mbGFncyA9IFJTSV9ERVNDX1JFUVVJUkVfQ0ZNX1RPX0hPU1Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0zNzUtXHRcdHh0ZW5kX2Rlc2MtXHUwMDNlY29uZmlybV9mcmFtZV90eXBlID0gUFJPQkVSRVFfQ09ORklSTTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zODg9aW50IHJzaV9zZW5kX2J0X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTM5NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjM5NTpcdGlmIChxdWV1ZW5vID09IFJTSV9CVF9NR01UX1EpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTM5Ni1cdFx0c3RhdHVzID0gcnNpX3NlbmRfcGt0X3RvX2J1cyhjb21tb24sIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDEyLVx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNmJ0X2Rlc2MtXHUwMDNlbGVuX3FubywgKHNrYi1cdTAwM2VsZW4gLSBGUkFNRV9ERVNDX1NaKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQxMzpcdFx0XHRSU0lfQlRfREFUQV9RKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQxNC1cdGJ0X2Rlc2MtXHUwMDNlYnRfcGt0X3R5cGUgPSBjcHVfdG9fbGUxNihidF9jYihza2IpLVx1MDAzZXBrdF90eXBlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz00MjU9aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQzNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQzNzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQzOC1cdFx0dmlmID0gYWRhcHRlci1cdTAwM2V2aWZzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ1Ni1cdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXHUwMDNlZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ1NzpcdHJzaV9zZXRfbGVuX3FubyhcdTAwMjZiY25fZnJtLVx1MDAzZWxlbl9xbm8sIG1hY19iY24tXHUwMDNlbGVuLCBSU0lfV0lGSV9EQVRBX1EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDU4LVx0YmNuX2ZybS1cdTAwM2VoZWFkZXJfbGVuID0gTUlOXzgwMl8xMV9IRFJfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDU5Olx0YmNuX2ZybS1cdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYwOlx0XHRcdFx0XHQgIFJTSV9EQVRBX0RFU0NfTk9fQUNLX0lORCB8XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0NjE6XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19CRUFDT05fRlJBTUUgfFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYyOlx0XHRcdFx0XHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0NjM6XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfU0VRX05PIHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ2NC1cdFx0XHRcdFx0ICBSQVRFX0lORk9fRU5BQkxFKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NzYtXHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0Nzc6XHRcdGJjbl9mcm0tXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDc4LVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDc5Olx0XHRiY25fZnJtLVx1MDAzZXJhdGVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfUkFURV82KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ4MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ4MS1cdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCAmIzQzOyAyXSA9PSAwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDgyOlx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00ODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9NjUwPXN0YXRpYyBpbnQgYmxfd3JpdGVfaGVhZGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4ICpmbGFzaF9jb250ZW50LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjY3MTpcdGlmIChhZGFwdGVyLVx1MDAzZXJzaV9ob3N0X2ludGYgPT0gUlNJX0hPU1RfSU5URl9VU0IpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY3Mi1cdFx0d3JpdGVfYWRkciA9IFBJTkdfQlVGRkVSX0FERFJFU1M7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNjg5LVx0XHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo2OTA6XHRcdHdyaXRlX2FkZHIgPSBSU0lfU0RfUkVRVUVTVF9NQVNURVIgfFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNjkxLVx0XHRcdCAgICAgKFBJTkdfQlVGRkVSX0FERFJFU1MgXHUwMDI2IDB4RkZGRik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9ODUwPXN0YXRpYyBpbnQgcnNpX2hhbF9wcmVwYXJlX2Z3bG9hZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2MC1cdFx0XHRcdFx0XHQgIFx1MDAyNnJlZ291dF92YWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo4NjE6XHRcdFx0XHRcdFx0ICBSU0lfQ09NTU9OX1JFR19TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2Mi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg4NS1cdFx0XHRcdFx0ICAgIFJFR09VVF9JTlZBTElEIFx1MDAzY1x1MDAzYyA4KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjg4NjpcdFx0XHRcdFx0ICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy04ODctXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTEwMTE9c3RhdGljIGludCByc2lfbG9hZF85MTE2X2Zpcm13YXJlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTAyNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwMjY6XHRpZiAoYWRhcHRlci1cdTAwM2Vyc2lfaG9zdF9pbnRmID09IFJTSV9IT1NUX0lOVEZfVVNCKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDI3LVx0XHRzdGF0dXMgPSBibF9jbWQoYWRhcHRlciwgUE9MTElOR19NT0RFLCBDTURfUEFTUyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDM0LVx0XHRcdFx0XHQgICBSQU1fMzg0S19BQ0NFU1NfRlJPTV9UQSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwMzU6XHRcdFx0XHRcdCAgIFJTSV85MTE2X1JFR19TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMzYtXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwNzI6XHRpZiAoKih1MTYgKilmd19wID09IFJTSV85MTE2X0ZXX01BR0lDX1dPUkQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwNzMtXHRcdG1lbWNweShcdTAwMjZib290bG9hZF9kcywgZndfcCwgc2l6ZW9mKHN0cnVjdCBib290bG9hZF9kcykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwODMtXHRcdFx0bGVuID0gbGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwODQ6XHRcdFx0ICAgICAgUlNJX0JMX0NUUkxfTEVOX01BU0s7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDg1LVx0XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtsZW5ndGggJWQgZGVzdGluYXRpb24gJXhcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA5OC1cdFx0XHRpZiAobGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwOTk6XHRcdFx0ICAgIFJTSV9CTF9DVFJMX0xBU1RfRU5UUlkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTAwLVx0XHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEyMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjExMjE6XHRpZiAoYWRhcHRlci1cdTAwM2Vyc2lfaG9zdF9pbnRmID09IFJTSV9IT1NUX0lOVEZfU0RJTykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEyMi1cdFx0aWYgKGhpZl9vcHMtXHUwMDNldGFfcmVzZXQoYWRhcHRlcikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTE0MD1pbnQgcnNpX2hhbF9kZXZpY2VfaW5pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNDUtXHRzd2l0Y2ggKGFkYXB0ZXItXHUwMDNlZGV2aWNlX21vZGVsKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTQ2Olx0Y2FzZSBSU0lfREVWXzkxMTM6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTQ3LVx0XHRzdGF0dXMgPSByc2lfaGFsX3ByZXBhcmVfZndsb2FkKGFkYXB0ZXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNTYtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTE1NzpcdGNhc2UgUlNJX0RFVl85MTE2OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE1OC1cdFx0c3RhdHVzID0gcnNpX2hhbF9wcmVwYXJlX2Z3bG9hZChhZGFwdGVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEwNj1zdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnNpX3JhdGVzWzEyXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA3Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzAxICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzEgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA4Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzAyICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzIgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA5Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzVfNSAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzVfNSB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTA6XHR7IC5iaXRyYXRlID0gU1REX1JBVEVfMTEgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfMTEgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTExOlx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzA2ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzYgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEyOlx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzA5ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzkgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEzOlx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzEyICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzEyIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExNDpcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8xOCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xOCB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTU6XHR7IC5iaXRyYXRlID0gU1REX1JBVEVfMjQgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfMjQgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE2Olx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzM2ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzM2IH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExNzpcdHsgLmJpdHJhdGUgPSBTVERfUkFURV80OCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV80OCB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTg6XHR7IC5iaXRyYXRlID0gU1REX1JBVEVfNTQgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfNTQgfSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTE5LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMjE9Y29uc3QgdTE2IHJzaV9tY3NyYXRlc1s4XSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTIyOlx0UlNJX1JBVEVfTUNTMCwgUlNJX1JBVEVfTUNTMSwgUlNJX1JBVEVfTUNTMiwgUlNJX1JBVEVfTUNTMyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTIzOlx0UlNJX1JBVEVfTUNTNCwgUlNJX1JBVEVfTUNTNSwgUlNJX1JBVEVfTUNTNiwgUlNJX1JBVEVfTUNTN1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMjQtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTIzMz1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9od19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoyNDc6XHRpZiAoKGNvbW1vbi1cdTAwM2V3b3dfZmxhZ3MgXHUwMDI2IFJTSV9XT1dfRU5BQkxFRCkgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjQ4LVx0ICAgIHNjYW5fcmVxLVx1MDAzZW5fY2hhbm5lbHMgPT0gMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI2Mi1cdGNvbW1vbi1cdTAwM2Vod3NjYW4gPSBzY2FuX3JlcTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MjYzOlx0aWYgKCFyc2lfc2VuZF9iZ3NjYW5fcGFyYW1zKGNvbW1vbiwgUlNJX1NUQVJUX0JHU0NBTikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjY0LVx0XHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wcm9iZV9yZXEoY29tbW9uLCB2aWYpKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0yNzQ9c3RhdGljIHZvaWQgcnNpX21hYzgwMjExX2NhbmNlbF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjg0LVx0aWYgKGNvbW1vbi1cdTAwM2ViZ3NjYW5fZW4pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6Mjg1Olx0XHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wYXJhbXMoY29tbW9uLCBSU0lfU1RPUF9CR1NDQU4pKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0yODYtXHRcdFx0Y29tbW9uLVx1MDAzZWJnc2Nhbl9lbiA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MzAyPXZvaWQgcnNpX21hYzgwMjExX2RldGFjaChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMzIwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzozMjE6I2lmZGVmIENPTkZJR19SU0lfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0zMjItXHRyc2lfcmVtb3ZlX2RiZ2ZzKGFkYXB0ZXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9NDMzPXN0YXRpYyBpbnQgcnNpX21hcF9pbnRmX21vZGUoZW51bSBubDgwMjExX2lmdHlwZSB2aWZfdHlwZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQzNi1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDM3Olx0XHRyZXR1cm4gUlNJX09QTU9ERV9TVEE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQzOC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQzOTpcdFx0cmV0dXJuIFJTSV9PUE1PREVfQVA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ0MC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDQxOlx0XHRyZXR1cm4gUlNJX09QTU9ERV9QMlBfQ0xJRU5UO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00NDItXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0MzpcdFx0cmV0dXJuIFJTSV9PUE1PREVfUDJQX0NMSUVOVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQ0LVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0NTpcdFx0cmV0dXJuIFJTSV9PUE1PREVfUDJQX0dPO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00NDYtXHRkZWZhdWx0OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo0NDc6XHRcdHJldHVybiBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00NDgtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz00NTk9c3RhdGljIGludCByc2lfbWFjODAyMTFfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ3Mi1cdGludGZfbW9kZSA9IHJzaV9tYXBfaW50Zl9tb2RlKHZpZi1cdTAwM2V0eXBlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDczOlx0aWYgKGludGZfbW9kZSA9PSBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ3NC1cdFx0cnNpX2RiZyhFUlJfWk9ORSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4NS1cdC8qIEdldCBmcmVlIHZhcCBpbmRleCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo0ODY6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4Ny1cdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXZpZnNbaV0gfHxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTUzMD1zdGF0aWMgdm9pZCByc2lfbWFjODAyMTFfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU0Ny1cdG9wbW9kZSA9IHJzaV9tYXBfaW50Zl9tb2RlKHZpZi1cdTAwM2V0eXBlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NTQ4Olx0aWYgKG9wbW9kZSA9PSBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU0OS1cdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7T3Btb2RlIGVycm9yIDogJWRcXG5cJiMzNDssIG9wbW9kZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01NTItXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjU1MzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNTU0LVx0XHRpZiAoIWFkYXB0ZXItXHUwMDNldmlmc1tpXSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTU3ND1zdGF0aWMgaW50IHJzaV9jaGFubmVsX2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NTkwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01OTEtXHRcdHZpZiA9IGFkYXB0ZXItXHUwMDNldmlmc1tpXTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTY2ND1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjY5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTItXHRcdFx0dmlmID0gYWRhcHRlci1cdTAwM2V2aWZzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9Nzg2PXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODA4LVx0XHRyc2lfaW5mb3JtX2Jzc19zdGF0dXMoY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo4MDk6XHRcdFx0XHQgICAgICBSU0lfT1BNT0RFX1NUQSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODEwLVx0XHRcdFx0ICAgICAgdmlmLVx1MDAzZWNmZy5hc3NvYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTg0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6ODQ3Olx0XHRcdFx0cnNpX3NldF92YXBfY2FwYWJpbGl0aWVzKGNvbW1vbiwgUlNJX09QTU9ERV9BUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODQ4LVx0XHRcdFx0XHRcdFx0IHZpZi1cdTAwM2VhZGRyLCB2aWZfaW5mby1cdTAwM2V2YXBfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz04ODA9c3RhdGljIHZvaWQgcnNpX21hYzgwMjExX2NvbmZfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODg1LVx0LyogTm90IGRvaW5nIG11Y2ggaGVyZSBhcyBvZiBub3cgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6ODg2Olx0KnRvdGFsX2ZsYWdzIFx1MDAyNj0gUlNJX1NVUFBfRklMVEVSUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODg3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTk2MT1zdGF0aWMgaW50IHJzaV9oYWxfa2V5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Mi1cdGlmIChrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTczOlx0XHRrZXlfdHlwZSA9IFJTSV9QQUlSV0lTRV9LRVk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3NC1cdGVsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTc1Olx0XHRrZXlfdHlwZSA9IFJTSV9HUk9VUF9LRVk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk5My1cdFx0XHRcdFx0XHQgIGtleS1cdTAwM2VrZXlsZW4sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjk5NDpcdFx0XHRcdFx0XHQgIFJTSV9QQUlSV0lTRV9LRVksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk5NS1cdFx0XHRcdFx0XHQgIGtleS1cdTAwM2VrZXlpZHgsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMDkxPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMDg6XHRmb3IgKGlpID0gMDsgaWkgXHUwMDNjIFJTSV9NQVhfVklGUzsgaWkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMDktXHRcdGlmICh2aWYgPT0gYWRhcHRlci1cdTAwM2V2aWZzW2lpXSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMTM6XHRpZiAoaWkgXHUwMDNlPSBSU0lfTUFYX1ZJRlMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMTQtXHRcdHJldHVybiBzdGF0dXM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMzA5PXN0YXRpYyB2b2lkIHJzaV9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEzNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEzNTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEzNTQtXHRcdHZpZiA9IGFkYXB0ZXItXHUwMDNldmlmc1tpXTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE0MDc9c3RhdGljIGludCByc2lfbWFjODAyMTFfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0NzAtXHRcdFx0cnNpX2RiZyhJTkZPX1pPTkUsIFwmIzM0O0luZGljYXRlIGJzcyBzdGF0dXMgdG8gZGV2aWNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTQ3MTpcdFx0XHRyc2lfaW5mb3JtX2Jzc19zdGF0dXMoY29tbW9uLCBSU0lfT1BNT0RFX0FQLCAxLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDcyLVx0XHRcdFx0XHQgICAgICBzdGEtXHUwMDNlYWRkciwgc3RhLVx1MDAzZXdtZSwgc3RhLVx1MDAzZWFpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0ODItXHRcdFx0XHRcdFx0XHQga2V5LVx1MDAzZWtleWxlbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTQ4MzpcdFx0XHRcdFx0XHRcdCBSU0lfUEFJUldJU0VfS0VZLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDg0LVx0XHRcdFx0XHRcdFx0IGtleS1cdTAwM2VrZXlpZHgsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNTIzPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNTQ3LVx0XHRcdGlmICghbWVtY21wKHJzdGEtXHUwMDNlc3RhLVx1MDAzZWFkZHIsIHN0YS1cdTAwM2VhZGRyLCBFVEhfQUxFTikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTU0ODpcdFx0XHRcdHJzaV9pbmZvcm1fYnNzX3N0YXR1cyhjb21tb24sIFJTSV9PUE1PREVfQVAsIDAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE1NDktXHRcdFx0XHRcdFx0ICAgICAgc3RhLVx1MDAzZWFkZHIsIHN0YS1cdTAwM2V3bWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNjY1PXN0YXRpYyBpbnQgcnNpX21hcF9yZWdpb25fY29kZShlbnVtIG5sODAyMTFfZGZzX3JlZ2lvbnMgcmVnaW9uX2NvZGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjY4LVx0Y2FzZSBOTDgwMjExX0RGU19GQ0M6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2Njk6XHRcdHJldHVybiBSU0lfUkVHSU9OX0ZDQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3MC1cdGNhc2UgTkw4MDIxMV9ERlNfRVRTSTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTY3MTpcdFx0cmV0dXJuIFJTSV9SRUdJT05fRVRTSTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3Mi1cdGNhc2UgTkw4MDIxMV9ERlNfSlA6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2NzM6XHRcdHJldHVybiBSU0lfUkVHSU9OX1RFTEVDO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjc0LVx0Y2FzZSBOTDgwMjExX0RGU19VTlNFVDpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTY3NTpcdFx0cmV0dXJuIFJTSV9SRUdJT05fV09STEQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE2NzYtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2Nzc6XHRyZXR1cm4gUlNJX1JFR0lPTl9XT1JMRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3OC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNzI5PXN0YXRpYyB2b2lkIHJzaV9yZXN1bWVfY29ubl9jaGFubmVsKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNzM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNzM1Olx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIFJTSV9NQVhfVklGUzsgY250JiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNzM2LVx0XHR2aWYgPSBhZGFwdGVyLVx1MDAzZXZpZnNbY250XTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE4NDk9c3RhdGljIHUxNiByc2lfd293X21hcF90cmlnZ2VycyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg1Ni1cdGlmICh3b3dsYW4tXHUwMDNlYW55KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxODU3Olx0XHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19BTlk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4NTgtXHRpZiAod293bGFuLVx1MDAzZW1hZ2ljX3BrdClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg1OTpcdFx0d293X3RyaWdnZXJzIHw9IFJTSV9XT1dfTUFHSUNfUEtUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODYwLVx0aWYgKHdvd2xhbi1cdTAwM2VkaXNjb25uZWN0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxODYxOlx0XHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19ESVNDT05ORUNUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODYyLVx0aWYgKHdvd2xhbi1cdTAwM2VndGtfcmVrZXlfZmFpbHVyZSB8fCB3b3dsYW4tXHUwMDNlZWFwX2lkZW50aXR5X3JlcSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODYzLVx0ICAgIHdvd2xhbi1cdTAwM2Vmb3VyX3dheV9oYW5kc2hha2UpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4NjQ6XHRcdHdvd190cmlnZ2VycyB8PSBSU0lfV09XX0dUS19SRUtFWTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg2NS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE4Njk9aW50IHJzaV9jb25maWdfd293bGFuKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4ODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4ODY6XHRjb21tb24tXHUwMDNld293X2ZsYWdzIHw9IFJTSV9XT1dfRU5BQkxFRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg4Ny1cdHRyaWdnZXJzID0gcnNpX3dvd19tYXBfdHJpZ2dlcnMoY29tbW9uLCB3b3dsYW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg5NC1cdFx0XHRcJiMzNDtDYW5ub3QgY29uZmlndXJlIFdvV0xBTiAoU3RhdGlvbiBub3QgY29ubmVjdGVkKVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4OTU6XHRcdGNvbW1vbi1cdTAwM2V3b3dfZmxhZ3MgfD0gUlNJX1dPV19OT19DT05ORUNUSU9OO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODk2LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTIwMDc9aW50IHJzaV9tYWM4MDIxMV9hdHRhY2goc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqQmVhY29uIFByZXBhcmF0aW9uIENhbGwgU3RhY2sgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGByc2lfcHJlcGFyZV9iZWFjb25gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkg4oCTIHdobyYjMzk7cyBpbnZva2luZyB0aGlzIHRoaW5nLCBhbmQgd2hlcmUgYXJlIHRob3NlIGNhbGxzIG9yaWdpbmF0aW5nIGZyb20/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgY3J1Y2lhbCBmb3IgZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24mIzM5O3MgdXNhZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UsIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycywgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHJzaV9wcmVwYXJlX2JlYWNvbmAgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYmVhY29uIHByZXBhcmF0aW9uIG9yIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHN0YXJ0IHRoZSBodW50IGFuZCBnZXQgYSBjbGVhciBtYXAgb2YgdGhlc2UgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX3ByZXBhcmVfYmVhY29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTM4OD1pbnQgcnNpX3NlbmRfYnRfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDI1OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTE3NjM9c3RhdGljIGludCByc2lfc2VuZF9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc3Ni1cdFx0c2tiX3B1bGwoc2tiLCAoNjQgLSBkd29yZF9hbGlnbl9ieXRlcykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jOjE3Nzc6XHRpZiAocnNpX3ByZXBhcmVfYmVhY29uKGNvbW1vbiwgc2tiKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzgtXHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0O0ZhaWxlZCB0byBwcmVwYXJlIGJlYWNvblxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaD0yMjU9aW50IHJzaV9wcmVwYXJlX2RhdGFfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmg6MjI2OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oLTIyNy1pbnQgcnNpX3NlbmRfcGt0X3RvX2J1cyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyMQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGByc2lfc2VuZF9iZWFjb25gIEZ1bmN0aW9uIENhbGwgYW5kIERyaXZlciBPcGVyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGByc2lfc2VuZF9iZWFjb25gIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBzdGFydCBpbiBgcnNpXzkxeF9tZ210LmNgLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDE3NjMsIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IG1pZ2h0IHJlc2lkZS4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbiBsb2dpYy4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24gY2FsbCBhbmQgaG93IHRoZSBkcml2ZXIgb3JjaGVzdHJhdGVzIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uIHByb2Nlc3MuIEhvcGVmdWxseSB0aGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgYmVhY29uJiMzOTtzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc2MDpcdFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xuMTc2MTpcdH1cbjE3NjI6XHRcbjE3NjM6XHRzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuMTc2NDpcdHtcbjE3NjU6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuMTc2NjpcdFx0dTggZHdvcmRfYWxpZ25fYnl0ZXMgPSAwO1xuMTc2NzpcdFxuMTc2ODpcdFx0c2tiID0gZGV2X2FsbG9jX3NrYihNQVhfTUdNVF9QS1RfU0laRSk7XG4xNzY5Olx0XHRpZiAoIXNrYilcbjE3NzA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzcxOlx0XG4xNzcyOlx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIE1BWF9NR01UX1BLVF9TSVpFKTtcbjE3NzM6XHRcbjE3NzQ6XHRcdGR3b3JkX2FsaWduX2J5dGVzID0gKCh1bnNpZ25lZCBsb25nKXNrYi1cdTAwM2VkYXRhIFx1MDAyNiAweDNmKTtcbjE3NzU6XHRcdGlmIChkd29yZF9hbGlnbl9ieXRlcylcbjE3NzY6XHRcdFx0c2tiX3B1bGwoc2tiLCAoNjQgLSBkd29yZF9hbGlnbl9ieXRlcykpO1xuMTc3NzpcdFx0aWYgKHJzaV9wcmVwYXJlX2JlYWNvbihjb21tb24sIHNrYikpIHtcbjE3Nzg6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgYmVhY29uXFxuXCYjMzQ7KTtcbjE3Nzk6XHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuMTc4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3ODE6XHRcdH1cbjE3ODI6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmNvbW1vbi1cdTAwM2V0eF9xdWV1ZVtNR01UX0JFQUNPTl9RXSwgc2tiKTtcbjE3ODM6XHRcdHJzaV9zZXRfZXZlbnQoXHUwMDI2Y29tbW9uLVx1MDAzZXR4X3RocmVhZC5ldmVudCk7XG4xNzg0Olx0XHRyc2lfZGJnKERBVEFfVFhfWk9ORSwgXCYjMzQ7JXM6IEFkZGVkIHRvIGJlYWNvbiBxdWV1ZVxcblwmIzM0OywgX19mdW5jX18pO1xuMTc4NTpcdFxuMTc4NjpcdFx0cmV0dXJuIDA7XG4xNzg3Olx0fVxuMTc4ODpcdFxuMTc4OTpcdCNpZmRlZiBDT05GSUdfUE1cbjE3OTA6XHRpbnQgcnNpX3NlbmRfd293bGFuX3JlcXVlc3Qoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgdTE2IGZsYWdzLFxuMTc5MTpcdFx0XHRcdCAgICB1MTYgc2xlZXBfc3RhdHVzKVxuMTc5MjpcdHtcbjE3OTM6XHRcdHN0cnVjdCByc2lfd293bGFuX3JlcSAqY21kX2ZyYW1lO1xuMTc5NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE3OTU6XHRcdHU4IGxlbmd0aDtcbjE3OTY6XHRcbjE3OTc6XHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0OyVzOiBTZW5kaW5nIHdvd2xhbiByZXF1ZXN0IGZyYW1lXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xNzk4Olx0XG4xNzk5Olx0XHRsZW5ndGggPSBzaXplb2YoKmNtZF9mcmFtZSk7XG4xODAwOlx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCk7XG4xODAxOlx0XHRpZiAoIXNrYilcbjE4MDI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODAzOlx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIGxlbmd0aCk7XG4xODA0Olx0XHRjbWRfZnJhbWUgPSAoc3RydWN0IHJzaV93b3dsYW5fcmVxICopc2tiLVx1MDAzZWRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHJzaV9zZW5kX2JlYWNvbmAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGhpZXJhcmNoeSBmb3IgYHJzaV9zZW5kX2JlYWNvbmAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IGNvbnRleHRzIGFuZCBkYXRhIGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG11bHRpcGxlIHVzZXMsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucyBpbiB0aG9zZSBjYWxscyDigJMgYXJlIHRoZXkgY2x1c3RlcmVkIGFyb3VuZCBzcGVjaWZpYyBtb2R1bGVzLCBkZXZpY2UgZHJpdmVycywgb3IgaGlnaGVyLWxldmVsIGZ1bmN0aW9uYWxpdGllcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHdoZXJlIHRoaXMgYmVhY29uIHRyYW5zbWlzc2lvbiBpcyBvY2N1cnJpbmc/IFdoYXQgc29ydCBvZiBkYXRhIGlzIGxpa2VseSBiZWluZyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGluIGVhY2ggb2YgdGhlIHBsYWNlcyB0aGF0IGNhbGxzIGl0PyBBbmQgZmluYWxseSwgd2hhdCYjMzk7cyBpdHMgcm9sZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX3NlbmRfYmVhY29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz0xNzM4PWludCByc2lfc2V0X2FudGVubmEoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgdTggYW50ZW5uYSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoxNzYzOnN0YXRpYyBpbnQgcnNpX3NlbmRfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc2NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTIxODU9aW50IHJzaV9tZ210X3BrdF9yZWN2KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4ICptc2cpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTIyMjQtXHRcdFx0cmV0dXJuIC0xO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jOjIyMjU6XHRcdHJzaV9zZW5kX2JlYWNvbihjb21tb24pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTIyMjYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEzNgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHJzaV9yc2lfOTF4X2hhbC5jYCBhbmQgYHJzaV9wcmVwYXJlX2JlYWNvbmAqKgoKT2theSwgc28gd2UgbmVlZCB0byBsb29rIGF0IHRoZSByYWRpbyBjb25maWd1cmF0aW9uIGhlcmUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGByc2lfcnNpXzkxeF9oYWwuY2AuIFRoZSBwcm9ibGVtIHN1Z2dlc3RzIGEgY29uZmlndXJhdGlvbiBpc3N1ZSBhbmQgSSBoYXZlIHRvIHRyYWNlIGJhY2sgdGhlIGJlYWNvbiBwcmVwZXJhdGlvbiB0byBmaWd1cmUgb3V0IGhvdyByYWRpbyBjb25maWd1cmF0aW9uIG1heSBiZSBnb2luZyBhd3J5LiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgcnNpX3ByZXBhcmVfYmVhY29uYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCB3aGVyZSB0aGUgYmVhY29uIGZyYW1lIGlzIGFzc2VtYmxlZCBiZWZvcmUgYmVpbmcgdHJhbnNtaXR0ZWQsIG1ha2luZyBpdCB0aGUgcGVyZmVjdCBzdGFydGluZyBwb2ludCB0byBkaWFnbm9zZSBhbnkgY29uZmlndXJhdGlvbiBlcnJvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGZpbmFsIGJlYWNvbiBjb250ZW50LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGhhdmUgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDQyNjpcdHtcbiA0Mjc6XHRcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiA0Mjg6XHRcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xuIDQyOTpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXHUwMDNlcHJpdi1cdTAwM2VodztcbiA0MzA6XHRcdHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IFx1MDAyNmh3LVx1MDAzZWNvbmY7XG4gNDMxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIDQzMjpcdFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gNDMzOlx0XHR1OCB2YXBfaWQgPSAwLCBpO1xuIDQzNDpcdFx0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIDQzNTpcdFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIDQzNjpcdFxuIDQzNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuIDQzODpcdFx0XHR2aWYgPSBhZGFwdGVyLVx1MDAzZXZpZnNbaV07XG4gNDM5Olx0XHRcdGlmICghdmlmKVxuIDQ0MDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ0MTpcdFx0XHRpZiAoKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxuIDQ0MjpcdFx0XHQgICAgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykpXG4gNDQzOlx0XHRcdFx0YnJlYWs7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XHRpZiAoIXZpZilcbiA0NDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ3Olx0XHRtYWNfYmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFkYXB0ZXItXHUwMDNlaHcsXG4gNDQ4Olx0XHRcdFx0XHRcdCAgIHZpZixcbiA0NDk6XHRcdFx0XHRcdFx0ICAgXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XG4gNDUwOlx0XHRpZiAoIW1hY19iY24pIHtcbiA0NTE6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGdldCBiZWFjb24gZnJvbSBtYWM4MDIxMVxcblwmIzM0Oyk7XG4gNDUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0Y29tbW9uLVx1MDAzZWJlYWNvbl9jbnQmIzQzOyYjNDM7O1xuIDQ1NjpcdFx0YmNuX2ZybSA9IChzdHJ1Y3QgcnNpX2RhdGFfZGVzYyAqKXNrYi1cdTAwM2VkYXRhO1xuIDQ1NzpcdFx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNmJjbl9mcm0tXHUwMDNlbGVuX3FubywgbWFjX2Jjbi1cdTAwM2VsZW4sIFJTSV9XSUZJX0RBVEFfUSk7XG4gNDU4Olx0XHRiY25fZnJtLVx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XG4gNDU5Olx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gPSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX01BQ19CQlBfSU5GTyB8XG4gNDYwOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19OT19BQ0tfSU5EIHxcbiA0NjE6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XG4gNDYyOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfVFNGIHxcbiA0NjM6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0lOU0VSVF9TRVFfTk8gfFxuIDQ2NDpcdFx0XHRcdFx0XHQgIFJBVEVfSU5GT19FTkFCTEUpO1xuIDQ2NTpcdFx0YmNuX2ZybS1cdTAwM2VyYXRlX2luZm8gPSBjcHVfdG9fbGUxNih2YXBfaWQgXHUwMDNjXHUwMDNjIDE0KTtcbiA0NjY6XHRcdGJjbl9mcm0tXHUwMDNlcWlkX3RpZCA9IEJFQUNPTl9IV19RO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XG4gNDY5Olx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gPSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUpO1xuIDQ3MDpcdFx0XHRiY25fZnJtLVx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSBcdTAwM2VcdTAwM2UgMTIpO1xuIDQ3MTpcdFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcbiA0NzI6XHRcdFx0YmNuX2ZybS1cdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSk7XG4gNDczOlx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gfD0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFIFx1MDAzZVx1MDAzZSAxMik7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXG4gNDc3Olx0XHRcdGJjbl9mcm0tXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuIDQ3ODpcdFx0ZWxzZVxuIDQ3OTpcdFx0XHRiY25fZnJtLVx1MDAzZXJhdGVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfUkFURV82KTtcbiA0ODA6XHRcbiA0ODE6XHRcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCAmIzQzOyAyXSA9PSAwKVxuIDQ4MjpcdFx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XG4gNDgzOlx0XG4gNDg0Olx0XHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuIDQ4NTpcdFx0aWYgKHRhaWxyb29tIFx1MDAzYyBGUkFNRV9ERVNDX1NaIHx8XG4gNDg2Olx0XHQgICAgbWFjX2Jjbi1cdTAwM2VsZW4gXHUwMDNlIHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikge1xuIDQ4NzpcdFx0XHRkZXZfa2ZyZWVfc2tiKG1hY19iY24pO1xuIDQ4ODpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0bWVtY3B5KFx1MDAyNnNrYi1cdTAwM2VkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLVx1MDAzZWRhdGEsIG1hY19iY24tXHUwMDNlbGVuKTtcbiA0OTI6XHRcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVx1MDAzZWxlbiAmIzQzOyBGUkFNRV9ERVNDX1NaKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4gNDk1Olx0XG4gNDk2Olx0XHRyZXR1cm4gMDtcbiA0OTc6XHR9XG4gNDk4Olx0XG4gNDk5Olx0c3RhdGljIHZvaWQgYmxfY21kX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gNTAwOlx0e1xuIDUwMTpcdFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xuIDUwMjpcdFxuIDUwMzpcdFx0YWRhcHRlci1cdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcbiA1MDQ6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZWJsX2NtZF90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTI4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBSU0kgQnVzIFR5cGUgRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSB0aGUgc3VwcG9ydGVkIGJ1cyB0eXBlcyBmb3IgdGhlIGByc2lgIGRyaXZlci4gQWgsIGBSU0lfU0RJT2AgYW5kIGBSU0lfVVNCYCwgZ290IGl0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGVmZmVjdGl2ZWx5IGVtdWxhdGUgb3IgZnV6eiB0aGUgYFJTSV9VU0JgIGludGVyZmFjZSB3aXRoaW4gb3VyIFFFTVUvU3l6a2FsbGVyIGVudmlyb25tZW50LiBDYW4gd2UgbGV2ZXJhZ2UgdGhlIFVTQiByYXcgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkgb3Igc29tZSBmb3JtIG9mIFVTQiBlbXVsYXRpb24/IFRoYXQmIzM5O3MgdGhlIGtleSB0byBtYWtpbmcgcHJvZ3Jlc3MgaGVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jYCBzb3VyY2UgZmlsZS4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBVU0IgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhbnN3ZXJzIGFyZSBsaWtlbHkgaGlkZGVuLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgVVNCIGNvbW11bmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LypcbiAgIDI6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTQgUmVkcGluZSBTaWduYWxzIEluYy5cbiAgIDM6XHQgKlxuICAgNDpcdCAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxuICAgNTpcdCAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcbiAgIDY6XHQgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICAgNzpcdCAqXG4gICA4Olx0ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwmIzM0O0FTIElTXCYjMzQ7IEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFU1xuICAgOTpcdCAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0ZcbiAgMTA6XHQgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICAxMTpcdCAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVNcbiAgMTI6XHQgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU5cbiAgMTM6XHQgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxuICAxNDpcdCAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4gIDE1Olx0ICpcbiAgMTY6XHQgKi9cbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvcnNpXzkxeC5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7cnNpX3VzYi5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7cnNpX2hhbC5oXCYjMzQ7XG4gIDIzOlx0I2luY2x1ZGUgXCYjMzQ7cnNpX2NvZXguaFwmIzM0O1xuICAyNDpcdFxuICAyNTpcdC8qIERlZmF1bHQgb3BlcmF0aW5nIG1vZGUgaXMgd2xhbiBTVEEgJiM0MzsgQlQgKi9cbiAgMjY6XHRzdGF0aWMgdTE2IGRldl9vcGVyX21vZGUgPSBERVZfT1BNT0RFX1NUQV9CVF9EVUFMO1xuICAyNzpcdG1vZHVsZV9wYXJhbShkZXZfb3Blcl9tb2RlLCB1c2hvcnQsIDA0NDQpO1xuICAyODpcdE1PRFVMRV9QQVJNX0RFU0MoZGV2X29wZXJfbW9kZSwgREVWX09QTU9ERV9QQVJBTV9ERVNDKTtcbiAgMjk6XHRcbiAgMzA6XHRzdGF0aWMgaW50IHJzaV9yeF91cmJfc3VibWl0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGVwX251bSwgZ2ZwX3QgZmxhZ3MpO1xuICAzMTpcdFxuICAzMjpcdC8qKlxuICAzMzpcdCAqIHJzaV91c2JfY2FyZF93cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gdGhlIFVTQiBDYXJkLlxuICAzNDpcdCAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cbiAgMzU6XHQgKiBAYnVmOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgZnJvbSB3aGVyZSB0aGUgZGF0YSBoYXMgdG8gYmUgdGFrZW4uXG4gIDM2Olx0ICogQGxlbjogTGVuZ3RoIHRvIGJlIHdyaXR0ZW4uXG4gIDM3Olx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxuICAzODpcdCAqXG4gIDM5Olx0ICogUmV0dXJuOiBzdGF0dXM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gIDQwOlx0ICovXG4gIDQxOlx0c3RhdGljIGludCByc2lfdXNiX2NhcmRfd3JpdGUoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcbiAgNDI6XHRcdFx0XHQgICAgICB1OCAqYnVmLFxuICA0MzpcdFx0XHRcdCAgICAgIHUxNiBsZW4sXG4gIDQ0Olx0XHRcdFx0ICAgICAgdTggZW5kcG9pbnQpXG4gIDQ1Olx0e1xuICA0NjpcdFx0c3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLVx1MDAzZXJzaV9kZXY7XG4gIDQ3Olx0XHRpbnQgc3RhdHVzO1xuICA0ODpcdFx0dTggKnNlZyA9IGRldi1cdTAwM2V0eF9idWZmZXI7XG4gIDQ5Olx0XHRpbnQgdHJhbnNmZXI7XG4gIDUwOlx0XHRpbnQgZXAgPSBkZXYtXHUwMDNlYnVsa291dF9lbmRwb2ludF9hZGRyW2VuZHBvaW50IC0gMV07XG4gIDUxOlx0XG4gIDUyOlx0XHRtZW1zZXQoc2VnLCAwLCBsZW4gJiM0MzsgUlNJX1VTQl9UWF9IRUFEX1JPT00pO1xuICA1MzpcdFx0bWVtY3B5KHNlZyAmIzQzOyBSU0lfVVNCX1RYX0hFQURfUk9PTSwgYnVmLCBsZW4pO1xuICA1NDpcdFx0bGVuICYjNDM7PSBSU0lfVVNCX1RYX0hFQURfUk9PTTtcbiAgNTU6XHRcdHRyYW5zZmVyID0gbGVuO1xuICA1NjpcdFx0c3RhdHVzID0gdXNiX2J1bGtfbXNnKGRldi1cdTAwM2V1c2JkZXYsXG4gIDU3Olx0XHRcdFx0ICAgICAgdXNiX3NuZGJ1bGtwaXBlKGRldi1cdTAwM2V1c2JkZXYsIGVwKSxcbiAgNTg6XHRcdFx0XHQgICAgICAodm9pZCAqKXNlZyxcbiAgNTk6XHRcdFx0XHQgICAgICAoaW50KWxlbixcbiAgNjA6XHRcdFx0XHQgICAgICBcdTAwMjZ0cmFuc2ZlcixcbiAgNjE6XHRcdFx0XHQgICAgICBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7XG4gIDYyOlx0XG4gIDYzOlx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gIDY0Olx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsXG4gIDY1Olx0XHRcdFx0XCYjMzQ7Q2FyZCB3cml0ZSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlIDolMTBkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuICA2NjpcdFx0XHRkZXYtXHUwMDNld3JpdGVfZmFpbCA9IDE7XG4gIDY3Olx0XHR9XG4gIDY4Olx0XHRyZXR1cm4gc3RhdHVzO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHQvKipcbiAgNzI6XHQgKiByc2lfd3JpdGVfbXVsdGlwbGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG11bHRpcGxlIGJ5dGVzIG9mIGluZm9ybWF0aW9uXG4gIDczOlx0ICpcdFx0XHQgIHRvIHRoZSBVU0IgY2FyZC5cbiAgNzQ6XHQgKiBAYWRhcHRlcjogUG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuXG4gIDc1Olx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxuICA3NjpcdCAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIHRoYXQgaGFzIHRvIGJlIHdyaXR0ZW4uXG4gIDc3Olx0ICogQGNvdW50OiBOdW1iZXIgb2YgbXVsdGlwbGUgYnl0ZXMgdG8gYmUgd3JpdHRlbi5cbiAgNzg6XHQgKlxuICA3OTpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgODA6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NDkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoYXQsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGByc2lfcHJvYmVgIEltcGxlbWVudGF0aW9uIGluIFVTQioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYHJzaV9wcm9iZWAgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFVTQiBwcm90b2NvbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBzcGVjaWZpYyB1c2UgY2FzZXMgZHJpdmluZyB0aGUgbmVlZCBmb3IgdGhpcyBwcm9iZT8gSXMgaXQgYWJvdXQgaW5pdGlhbCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIGNhcGFiaWxpdHkgbmVnb3RpYXRpb24sIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGlzIGNydWNpYWwgdG8gdW5wYWNraW5nIHRoZSAqaG93Ki4KCkkmIzM5O20gbWVudGFsbHkgc2lmdGluZyB0aHJvdWdoIG15IGtub3dsZWRnZSBvZiBVU0IgZGV2aWNlIGVudW1lcmF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0IGludm9sdmVzIHRoZSBzdGFuZGFyZCBVU0IgZGVzY3JpcHRvcnMg4oCTIGRldmljZSwgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlLCBlbmRwb2ludCDigJMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIGR1cmluZyBpbml0aWFsIHNldHVwLiBJIGJldCBgcnNpX3Byb2JlYCBpcyBpbnRyaWNhdGVseSBsaW5rZWQgdG8gaG93IHRoZSBob3N0IGludGVyYWN0cyB3aXRoIHRob3NlIGRlc2NyaXB0b3JzIHRvIGdhdGhlciByZWxldmFudCBpbmZvcm1hdGlvbi4gUGVyaGFwcyBpdCYjMzk7cyBhIHNwZWNpZmljIHZlbmRvci1kZWZpbmVkIGNvbW1hbmQsIGxldmVyYWdpbmcgYSBjb250cm9sIHRyYW5zZmVyLCB0byBlbGljaXQgYSBwYXJ0aWN1bGFyIHNldCBvZiBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGJleW9uZCB0aGUgc3RhbmRhcmQgZGVzY3JpcHRvcnM/IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgdGhhdC4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgbGF5ZXJzIGludm9sdmVkLiBJcyB0aGlzIGEgcHJvdG9jb2wtbGV2ZWwgbWVjaGFuaXNtLCBoYW5kbGVkIGJ5IHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGFuZCBkZXZpY2UgZmlybXdhcmU/IE9yIGRvZXMgaXQgcmVzaWRlIGhpZ2hlciB1cCwgcGVyaGFwcyBpbiB0aGUgZGV2aWNlIGRyaXZlcj8gSSBzdXNwZWN0IGl0JiMzOTtzIGEgbW9yZSBpbnRlZ3JhdGVkIGFwcHJvYWNoLCBsaWtlbHkgaW52b2x2aW5nIGJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgY3JpdGljYWwgaGFuZG9mZnMgYW5kIG1lc3NhZ2UgZXhjaGFuZ2VzIG9jY3VyLgoKVWx0aW1hdGVseSwgSSBleHBlY3QgYHJzaV9wcm9iZWAgaXMgYSBjbGV2ZXIgZGFuY2Ugb2Ygc2lnbmFsaW5nIGFuZCBkYXRhIGV4Y2hhbmdlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHNlcXVlbmNlLCBzdGFydGluZyBmcm9tIHRoZSBob3N0JiMzOTtzIHJlcXVlc3QsIHRocm91Z2ggYW55IGRldmljZS1zaWRlIHByb2Nlc3NpbmcsIGFuZCBiYWNrIHRvIHRoZSBob3N0IHdpdGggdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbi4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRvIGJlZ2luIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFxuIDcwMTpcdFx0bXNsZWVwKDIwKTtcbiA3MDI6XHRcbiA3MDM6XHRcdHJldHVybiAwO1xuIDcwNDpcdH1cbiA3MDU6XHRcbiA3MDY6XHRzdGF0aWMgaW50IHJzaV9yZXNldF9jYXJkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG4gNzA3Olx0e1xuIDcwODpcdFx0aW50IHJldDtcbiA3MDk6XHRcbiA3MTA6XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtSZXNldHRpbmcgQ2FyZC4uLlxcblwmIzM0Oyk7XG4gNzExOlx0XHRyc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX1RBX0hPTERfUkVHLCAweEUsIDQpO1xuIDcxMjpcdFxuIDcxMzpcdFx0LyogVGhpcyBtc2xlZXAgd2lsbCBlbnN1cmUgVGhyZWFkLUFyY2ggcHJvY2Vzc29yIHRvIGdvIHRvIGhvbGRcbiA3MTQ6XHRcdCAqIGFuZCBhbnkgcGVuZGluZyBkbWEgdHJhbnNmZXJzIHRvIHJmIGluIGRldmljZSB0byBmaW5pc2guXG4gNzE1Olx0XHQgKi9cbiA3MTY6XHRcdG1zbGVlcCgxMDApO1xuIDcxNzpcdFxuIDcxODpcdFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFNXQkxfUkVHT1VULFxuIDcxOTpcdFx0XHRcdFx0ICAgICAgIFJTSV9GV19XRFRfRElTQUJMRV9SRVEsXG4gNzIwOlx0XHRcdFx0XHQgICAgICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XG4gNzIxOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gNzIyOlx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0O0Rpc2FibGluZyBmaXJtd2FyZSB3YXRjaGRvZyB0aW1lciBmYWlsZWRcXG5cJiMzNDspO1xuIDcyMzpcdFx0XHRnb3RvIGZhaWw7XG4gNzI0Olx0XHR9XG4gNzI1Olx0XG4gNzI2Olx0XHRpZiAoYWRhcHRlci1cdTAwM2VkZXZpY2VfbW9kZWwgIT0gUlNJX0RFVl85MTE2KSB7XG4gNzI3Olx0XHRcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX1RJTUVSXzEsXG4gNzI4Olx0XHRcdFx0XHRcdCBSU0lfVUxQX1dSSVRFXzIsIDMyKTtcbiA3Mjk6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MzA6XHRcdFx0XHRnb3RvIGZhaWw7XG4gNzMxOlx0XHRcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX1RJTUVSXzIsXG4gNzMyOlx0XHRcdFx0XHRcdCBSU0lfVUxQX1dSSVRFXzAsIDMyKTtcbiA3MzM6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MzQ6XHRcdFx0XHRnb3RvIGZhaWw7XG4gNzM1Olx0XHRcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX0RFTEFZX1RJTUVSXzEsXG4gNzM2Olx0XHRcdFx0XHRcdCBSU0lfVUxQX1dSSVRFXzUwLCAzMik7XG4gNzM3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzM4Olx0XHRcdFx0Z290byBmYWlsO1xuIDczOTpcdFx0XHRyZXQgPSB1c2JfdWxwX3JlYWRfd3JpdGUoYWRhcHRlciwgUlNJX1dBVENIX0RPR19ERUxBWV9USU1FUl8yLFxuIDc0MDpcdFx0XHRcdFx0XHQgUlNJX1VMUF9XUklURV8wLCAzMik7XG4gNzQxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzQyOlx0XHRcdFx0Z290byBmYWlsO1xuIDc0MzpcdFx0XHRyZXQgPSB1c2JfdWxwX3JlYWRfd3JpdGUoYWRhcHRlciwgUlNJX1dBVENIX0RPR19USU1FUl9FTkFCTEUsXG4gNzQ0Olx0XHRcdFx0XHRcdCBSU0lfVUxQX1RJTUVSX0VOQUJMRSwgMzIpO1xuIDc0NTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc0NjpcdFx0XHRcdGdvdG8gZmFpbDtcbiA3NDc6XHRcdH0gZWxzZSB7XG4gNzQ4Olx0XHRcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxuIDc0OTpcdFx0XHRcdFx0XHQgICAgICAgTldQX1dXRF9JTlRFUlJVUFRfVElNRVIsXG4gNzUwOlx0XHRcdFx0XHRcdCAgICAgICBOV1BfV1dEX0lOVF9USU1FUl9DTEtTLFxuIDc1MTpcdFx0XHRcdFx0XHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xuIDc1MjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc1MzpcdFx0XHRcdGdvdG8gZmFpbDtcbiA3NTQ6XHRcdFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXG4gNzU1Olx0XHRcdFx0XHRcdCAgICAgICBOV1BfV1dEX1NZU1RFTV9SRVNFVF9USU1FUixcbiA3NTY6XHRcdFx0XHRcdFx0ICAgICAgIE5XUF9XV0RfU1lTX1JFU0VUX1RJTUVSX0NMS1MsXG4gNzU3Olx0XHRcdFx0XHRcdCAgICAgICBSU0lfOTExNl9SRUdfU0laRSk7XG4gNzU4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzU5Olx0XHRcdFx0Z290byBmYWlsO1xuIDc2MDpcdFx0XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcbiA3NjE6XHRcdFx0XHRcdFx0ICAgICAgIE5XUF9XV0RfTU9ERV9BTkRfUlNUQVJULFxuIDc2MjpcdFx0XHRcdFx0XHQgICAgICAgTldQX1dXRF9USU1FUl9ESVNBQkxFLFxuIDc2MzpcdFx0XHRcdFx0XHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xuIDc2NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc2NTpcdFx0XHRcdGdvdG8gZmFpbDtcbiA3NjY6XHRcdH1cbiA3Njc6XHRcbiA3Njg6XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtSZXNldCBjYXJkIGRvbmVcXG5cJiMzNDspO1xuIDc2OTpcdFx0cmV0dXJuIHJldDtcbiA3NzA6XHRcbiA3NzE6XHRmYWlsOlxuIDc3MjpcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7UmVzZXQgY2FyZCBmYWlsZWRcXG5cJiMzNDspO1xuIDc3MzpcdFx0cmV0dXJuIHJldDtcbiA3NzQ6XHR9XG4gNzc1Olx0XG4gNzc2Olx0LyoqXG4gNzc3Olx0ICogcnNpX3Byb2JlKCkgLSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBrZXJuZWwgd2hlbiB0aGUgZHJpdmVyIHByb3ZpZGVkXG4gNzc4Olx0ICpcdFx0IFZlbmRvciBhbmQgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZC4gQWxsIHRoZSBpbml0aWFsaXphdGlvblxuIDc3OTpcdCAqXHRcdCB3b3JrIGlzIGRvbmUgaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMzgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA1NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGluIGByc2lfcHJlcGFyZV9iZWFjb25gKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGByc2lfcHJlcGFyZV9iZWFjb25gIGRvZXMgYW5kIHdoYXQmIzM5O3MgY2hhbmdlZCB3aXRoIHRoaXMgcGF0Y2guIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCiYjNDM7CXRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7CiYjNDM7CWlmICh0YWlscm9vbSAmbHQ7IEZSQU1FX0RFU0NfU1ogfHwKJiM0MzsJICAgIG1hY19iY24tJmd0O2xlbiAmZ3Q7IHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikgewomIzQzOwkJZGV2X2tmcmVlX3NrYihtYWNfYmNuKTsKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CX0KJiM0MzsKIAltZW1jcHkoJmFtcDtza2ItJmd0O2RhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tJmd0O2RhdGEsIG1hY19iY24tJmd0O2xlbik7CiAJc2tiX3B1dChza2IsIG1hY19iY24tJmd0O2xlbiAmIzQzOyBGUkFNRV9ERVNDX1NaKTsKYGBgCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGJ1ZmZlciBwcmVwYXJhdGlvbiBmb3IgYSBiZWFjb24gZnJhbWUuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgdGFpbHJvb20gY2hlY2suIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgaWYgdGhlIGFsbG9jYXRlZCBgc2tiYCBpbiBgcnNpX3NlbmRfYmVhY29uYCAob3IgZWxzZXdoZXJlKSBkaWRuJiMzOTt0IGhhdmUgZW5vdWdoIHRhaWxyb29tIGZvciB0aGUgZnJhbWUgZGVzY3JpcHRvciBzaXplIChgRlJBTUVfREVTQ19TWmApIHBsdXMgdGhlIGJlYWNvbiBkYXRhIGxlbmd0aCAoYG1hY19iY24tJmd0O2xlbmApLCB0aGUgYHNrYl9wdXRgIGNhbGwgd291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBhIGBCVUdfT05gIG9yIHRoZSBgbWVtY3B5YCBjb3VsZCBvdmVyZmxvdyB0aGUgYHNrYi0mZ3Q7ZGF0YWAgYnVmZmVyLiAgQWxzbywgaWYgdGhlIHRhaWxyb29tIGNoZWNrIGZhaWxzLCBgbWFjX2JjbmAgaXMgZnJlZWQgd2hpY2ggaXMgZ29vZCwgYW5kIGl0IHJldHVybnMgYW4gZXJyb3IuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBleHBsb2l0YWJpbGl0eS4gSXMgdGhpcyBmdW5jdGlvbiwgb3IgdGhlIHJlbGF0ZWQgYHJzaV85MXhgIGRyaXZlciwgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZT8gIGByc2lfOTF4YCBpcyBhIG1hYzgwMjExIGRyaXZlciBmb3IgdGhlIFJlZHBpbmUgU2lnbmFscyA5MTEzLzkxMTYgY2hpcHMsIGNvdmVyaW5nIFVTQiBhbmQgU0RJTyBpbnRlcmZhY2VzLiAgSW4gYSBmdXp6aW5nIGNvbnRleHQgbGlrZSBTeXprYWxsZXIsIGEgVVNCIGRldmljZSBjYW4gYmUgZW11bGF0ZWQgdXNpbmcgdGhlIFVTQiByYXcgZ2FkZ2V0ICh2aGNpL3Jhdy1nYWRnZXQpLgoKV2hlbiB0aGUgUlNJIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBhIG1hYzgwMjExIHdpcmVsZXNzIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHZpYSBgcnNpX21hYzgwMjExX2F0dGFjaGAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCB1c2Vyc3BhY2UsIGFuZCBieSBleHRlbnNpb24gU3l6a2FsbGVyLCBjYW4gaW50ZXJhY3QgdXNpbmcgYG5sODAyMTFgIG5ldGxpbmsgY29tbWFuZHMgdG8gY29uZmlndXJlIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UsIGVpdGhlciBhcyBhbiBBUCBvciBhIFAyUF9HTy4KClNvLCB3aGVuIGJlYWNvbmluZyBpcyB0cmlnZ2VyZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBzdGFuZGFyZCBiZWFjb24gcHJvY2VzcywgYmVhY29uIGNvbmZpZ3VyYXRpb24sIGZpcm13YXJlIGJlYWNvbiByZXF1ZXN0cywgb3IgYnkgdGhlIG1hYzgwMjExIHN0YWNrLCBvciBpZiB0aGUgZmlybXdhcmUgc2VuZHMgYSBiZWFjb24gcmVxdWVzdCBtYW5hZ2VtZW50IHBhY2tldCAoYFJTSV9CRUFDT05fUkVRVUVTVGApLCBgcnNpX21nbXRfcGt0X3JlY3ZgIHdpbGwgYmUgY2FsbGVkLCB3aGljaCBpbiB0dXJuIGNhbGxzIGByc2lfc2VuZF9iZWFjb25gLCB3aGljaCAqZmluYWxseSogY2FsbHMgYHJzaV9wcmVwYXJlX2JlYWNvbmAuIFRoaXMgbG9va3MgbGlrZSB0aGUgYXR0YWNrIHBhdGguCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYHJzaV9tZ210X3BrdF9yZWN2YCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jYCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgaW5wdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE4NTpcdGludCByc2lfbWdtdF9wa3RfcmVjdihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxuMjE4NjpcdHtcbjIxODc6XHRcdHMzMiBtc2dfbGVuID0gKGxlMTZfdG9fY3B1KCooX19sZTE2ICopXHUwMDI2bXNnWzBdKSBcdTAwMjYgMHgwZmZmKTtcbjIxODg6XHRcdHUxNiBtc2dfdHlwZSA9IChtc2dbMl0pO1xuMjE4OTpcdFxuMjE5MDpcdFx0cnNpX2RiZyhGU01fWk9ORSwgXCYjMzQ7JXM6IE1zZyBMZW46ICVkLCBNc2cgVHlwZTogJTR4XFxuXCYjMzQ7LFxuMjE5MTpcdFx0XHRfX2Z1bmNfXywgbXNnX2xlbiwgbXNnX3R5cGUpO1xuMjE5MjpcdFxuMjE5MzpcdFx0c3dpdGNoIChtc2dfdHlwZSkge1xuMjE5NDpcdFx0Y2FzZSBUQV9DT05GSVJNX1RZUEU6XG4yMTk1Olx0XHRcdHJldHVybiByc2lfaGFuZGxlX3RhX2NvbmZpcm1fdHlwZShjb21tb24sIG1zZyk7XG4yMTk2Olx0XHRjYXNlIENBUkRfUkVBRFlfSU5EOlxuMjE5NzpcdFx0XHRjb21tb24tXHUwMDNlaGliZXJuYXRlX3Jlc3VtZSA9IGZhbHNlO1xuMjE5ODpcdFx0XHRyc2lfZGJnKEZTTV9aT05FLCBcJiMzNDslczogQ2FyZCByZWFkeSBpbmRpY2F0aW9uIHJlY2VpdmVkXFxuXCYjMzQ7LFxuMjE5OTpcdFx0XHRcdF9fZnVuY19fKTtcbjIyMDA6XHRcdFx0cmV0dXJuIHJzaV9oYW5kbGVfY2FyZF9yZWFkeShjb21tb24sIG1zZyk7XG4yMjAxOlx0XHRjYXNlIFRYX1NUQVRVU19JTkQ6XG4yMjAyOlx0XHRcdHN3aXRjaCAobXNnW1JTSV9UWF9TVEFUVVNfVFlQRV0pIHtcbjIyMDM6XHRcdFx0Y2FzZSBQUk9CRVJFUV9DT05GSVJNOlxuMjIwNDpcdFx0XHRcdGNvbW1vbi1cdTAwM2VtZ210X3FfYmxvY2sgPSBmYWxzZTtcbjIyMDU6XHRcdFx0XHRyc2lfZGJnKEZTTV9aT05FLCBcJiMzNDslczogUHJvYmUgY29uZmlybSByZWNlaXZlZFxcblwmIzM0OyxcbjIyMDY6XHRcdFx0XHRcdF9fZnVuY19fKTtcbjIyMDc6XHRcdFx0XHRicmVhaztcbjIyMDg6XHRcdFx0Y2FzZSBFQVBPTDRfQ09ORklSTTpcbjIyMDk6XHRcdFx0XHRpZiAobXNnW1JTSV9UWF9TVEFUVVNdKSB7XG4yMjEwOlx0XHRcdFx0XHRjb21tb24tXHUwMDNlZWFwb2w0X2NvbmZpcm0gPSB0cnVlO1xuMjIxMTpcdFx0XHRcdFx0aWYgKCFyc2lfc2VuZF9ibG9ja191bmJsb2NrX2ZyYW1lKGNvbW1vbixcbjIyMTI6XHRcdFx0XHRcdFx0XHRcdFx0ICBmYWxzZSkpXG4yMjEzOlx0XHRcdFx0XHRcdGNvbW1vbi1cdTAwM2Vod19kYXRhX3FzX2Jsb2NrZWQgPSBmYWxzZTtcbjIyMTQ6XHRcdFx0XHR9XG4yMjE1Olx0XHRcdH1cbjIyMTY6XHRcdFx0YnJlYWs7XG4yMjE3Olx0XHRjYXNlIEJFQUNPTl9FVkVOVF9JTkQ6XG4yMjE4Olx0XHRcdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtCZWFjb24gZXZlbnRcXG5cJiMzNDspO1xuMjIxOTpcdFx0XHRpZiAoY29tbW9uLVx1MDAzZWZzbV9zdGF0ZSAhPSBGU01fTUFDX0lOSVRfRE9ORSlcbjIyMjA6XHRcdFx0XHRyZXR1cm4gLTE7XG4yMjIxOlx0XHRcdGlmIChjb21tb24tXHUwMDNlaWZhY2VfZG93bilcbjIyMjI6XHRcdFx0XHRyZXR1cm4gLTE7XG4yMjIzOlx0XHRcdGlmICghY29tbW9uLVx1MDAzZWJlYWNvbl9lbmFibGVkKVxuMjIyNDpcdFx0XHRcdHJldHVybiAtMTtcbjIyMjU6XHRcdFx0cnNpX3NlbmRfYmVhY29uKGNvbW1vbik7XG4yMjI2Olx0XHRcdGJyZWFrO1xuMjIyNzpcdFx0Y2FzZSBXT1dMQU5fV0FLRVVQX1JFQVNPTjpcbjIyMjg6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7XFxuXFxuV2FrZXVwIFR5cGU6ICV4XFxuXCYjMzQ7LCBtc2dbMTVdKTtcbjIyMjk6XHRcdFx0c3dpdGNoIChtc2dbMTVdKSB7XG4yMjMwOlx0XHRcdGNhc2UgUlNJX1VOSUNBU1RfTUFHSUNfUEtUOlxuMjIzMTpcdFx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsXG4yMjMyOlx0XHRcdFx0XHRcJiMzNDsqKiogV2FrZXVwIGZvciBVbmljYXN0IG1hZ2ljIHBhY2tldCAqKipcXG5cJiMzNDspO1xuMjIzMzpcdFx0XHRcdGJyZWFrO1xuMjIzNDpcdFx0XHRjYXNlIFJTSV9CUk9BRENBU1RfTUFHSUNQS1Q6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBzaGlwc2hhcGUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBkZXBlbmRlbmN5IHNpdHVhdGlvbiBmb3IgYHJzaV85MXhfaGFsLmNgIGFuZCBzcGVjaWZpY2FsbHkgYHJzaV9wcmVwYXJlX2JlYWNvbmAuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgS2NvbmZpZyBzZXR1cCBpcyBjb3JyZWN0OyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhlc2UgdGhpbmdzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBpbmNsdXNpb24gc2hvdWxkIHJlc2lkZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkIGluIEtjb25maWcsIGFuZCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgdG8gZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0xBTl9WRU5ET1JfUlNJXG4gICAzOlx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGV2aWNlc1wmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCB5XG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gICA3Olx0XG4gICA4Olx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAgOTpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuICAxMDpcdFx0ICBxdWVzdGlvbnMgYWJvdXQgdGhlc2UgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXG4gIDExOlx0XHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTI6XHRcbiAgMTM6XHRpZiBXTEFOX1ZFTkRPUl9SU0lcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgUlNJXzkxWFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyA5MXggV0xBTiBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxuICAxODpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAxOTpcdFx0aGVscFxuICAyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFiZXMgc3VwcG9ydCBmb3IgUlNJIDF4MSBkZXZpY2VzLlxuICAyMTpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBSU0lfREVCVUdGU1xuICAyNDpcdFx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRlYnVnIHN1cHBvcnRcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gUlNJXzkxWFxuICAyNjpcdFx0ZGVmYXVsdCB5XG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgU2F5IFksIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGVuYWJsZSBkZWJ1ZyBzdXBwb3J0LiBUaGlzIG9wdGlvblxuICAyOTpcdFx0IGNyZWF0ZXMgZGVidWdmcyBlbnRyaWVzXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIFJTSV9TRElPXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgU0RJTyBidXMgc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBNTUMgXHUwMDI2XHUwMDI2IFJTSV85MVhcbiAgMzQ6XHRcdGRlZmF1bHQgbVxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBTRElPIGJ1cyBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxuICAzNzpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICAzODpcdFxuICAzOTpcdGNvbmZpZyBSU0lfVVNCXG4gIDQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDQxOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICA0MjpcdFx0ZGVmYXVsdCBtXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cbiAgNDU6XHRcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgUlNJX0NPRVhcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBCVCBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICA1MDpcdFx0ZGVwZW5kcyBvbiAhKEJUPW0gXHUwMDI2XHUwMDI2IFJTSV85MVg9eSlcbiAgNTE6XHRcdGRlZmF1bHQgeVxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBXTEFOIEJUIGNvZXggc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cbiAgNTQ6XHRcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgd2FudCB0byB1c2UgdGhpcyBmZWF0dXJlXG4gIDU1Olx0XHQgIGFuZCB5b3UgaGF2ZSBSUzkxMTMgbW9kdWxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODIxOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBSU0kgV2lyZWxlc3MgRHJpdmVyIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlciBidWlsZCBwcm9jZXNzLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IHdpdGggdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGVgLiBUaGlzIGlzIGdlbmVyYWxseSB3aGVyZSB0aGUgY29yZSBjb21waWxhdGlvbiBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSB0aGUgb2JqZWN0IGZpbGVzIGZvciB0aGlzIGRyaXZlciBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGluZ3MgbGlrZSBzb3VyY2UgZmlsZSBsaXN0cywgaW5jbHVkZSBwYXRocywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgYmFzZWQgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgcHJvYmFibHkgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBhZGFwdGF0aW9ucy4gSeKAmW0gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3ZlIG9yZ2FuaXplZCB0aGUgZHJpdmVyJiMzOTtzIGJ1aWxkIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgY3VzdG9taXphdGlvbiBvciBwb3RlbnRpYWwgcHJvYmxlbXMgbWlnaHQgbGllLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgTWFrZWZpbGUgcHJvdmlkZXMgc29tZSBjbGFyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tYWluLm9cbiAgIDM6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9jb3JlLm9cbiAgIDQ6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tYWM4MDIxMS5vXG4gICA1Olx0cnNpXzkxeC15XHRcdFx0JiM0Mzs9IHJzaV85MXhfbWdtdC5vXG4gICA2Olx0cnNpXzkxeC15XHRcdFx0JiM0Mzs9IHJzaV85MXhfaGFsLm9cbiAgIDc6XHRyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9wcy5vXG4gICA4Olx0cnNpXzkxeC0kKENPTkZJR19SU0lfQ09FWClcdCYjNDM7PSByc2lfOTF4X2NvZXgub1xuICAgOTpcdHJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXHQmIzQzOz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cbiAgMTA6XHRcbiAgMTE6XHRyc2lfdXNiLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF91c2IubyByc2lfOTF4X3VzYl9vcHMub1xuICAxMjpcdHJzaV9zZGlvLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX1JTSV85MVgpIFx0XHQmIzQzOz0gcnNpXzkxeC5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX1JTSV9TRElPKVx0XHQmIzQzOz0gcnNpX3NkaW8ub1xuICAxNTpcdG9iai0kKENPTkZJR19SU0lfVVNCKVx0XHQmIzQzOz0gcnNpX3VzYi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODQyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgV0xBTl9WRU5ET1JfUlNJIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBXTEFOX1ZFTkRPUl9SU0lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpbmNsdWRlZC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiB3aXRoaW4gdGhlIEtjb25maWcgaGllcmFyY2h5LiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcGFyZW50IEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAgd2hlbiBuYXZpZ2F0aW5nIHRoZSBjb21wbGV4aXRpZXMgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBvZiB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIHRvIGdyYXNwIGl0cyByb2xlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgY29uZmlndXJhdGlvbiBzcGFjZS4gSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBxdWlja2x5IGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFuZCB1bmNvdmVyIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGRlZmluaXRpb24gb3IgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWc9NTM9Q09ORklHX0FUSDVLPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctNjItIyBDT05GSUdfV0xBTl9WRU5ET1JfUkVBTFRFSyBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWc6NjM6IyBDT05GSUdfV0xBTl9WRU5ET1JfUlNJIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZy02NC0jIENPTkZJR19XTEFOX1ZFTkRPUl9TVCBpcyBub3Qgc2V0XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWc9Nzg9Q09ORklHX0JSQ01GTUFDPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy04Ny0jIENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnOjg4OiMgQ09ORklHX1dMQU5fVkVORE9SX1JTSSBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy04OS0jIENPTkZJR19XTEFOX1ZFTkRPUl9TSUxBQlMgaXMgbm90IHNldFxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2djdzBfZGVmY29uZmlnPTM4PUNPTkZJR19SVEw4MTkyQ1U9bVxuYXJjaC9taXBzL2NvbmZpZ3MvZ2N3MF9kZWZjb25maWctMzktIyBDT05GSUdfUlRMV0lGSV9ERUJVRyBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZzo0MDojIENPTkZJR19XTEFOX1ZFTkRPUl9SU0kgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvZ2N3MF9kZWZjb25maWctNDEtIyBDT05GSUdfV0xBTl9WRU5ET1JfU1QgaXMgbm90IHNldFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLKSAmIzQzOz0gcmVhbHRlay9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SU0kpICYjNDM7PSByc2kvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfU0lMQUJTKSAmIzQzOz0gc2lsYWJzL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoyOmNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMtXHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUlNJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz00Nz1jb25maWcgUlNJX0NPRVhcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy01Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjU3OmVuZGlmICMgV0xBTl9WRU5ET1JfUlNJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjkxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHdpcmVsZXNzIG5ldHdvcmtpbmcuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBkZWZpbmluZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFsbCB0aGUgd2lyZWxlc3MgZHJpdmVycy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RydWN0dXJlIGhlcmU6IHRvcC1sZXZlbCBjaG9pY2VzLCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gaGFyZHdhcmUgb3IgZnVuY3Rpb25hbGl0eSwgYW5kIGhlbHAgdGV4dCB0aGF0IGRlc2NyaWJlcyB3aGF0IGVhY2ggb3B0aW9uIGFjdHVhbGx5IGRvZXMuIFRoaXMgZmlsZSBpcyBnb2luZyB0byB0ZWxsIG1lIHdoYXQgdmFyaWFibGVzIEkgY2FuIHR3ZWFrIHRvIGdldCB0aGUgd2lyZWxlc3Mgc3RhY2sgYmVoYXZpbmcgYXMgSSBuZWVkIGl0IHRvLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk4MQoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBSU0kgV2lyZWxlc3MgRHJpdmVyIEJlYWNvbiBQcmVwYXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0IGFuZCBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBNQUM4MDIxMWAsIGFuZCBgUlNJX1VTQmAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLiBJIGNvbmZpcm1lZCB0aGF0IGByc2lfcHJlcGFyZV9iZWFjb25gIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgZGVjbGFyZWQgaW4gYHJzaV9oYWwuaGAgYW5kIGRlZmluZWQgaW4gYHJzaV85MXhfaGFsLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIG5vbi1zdGF0aWMgbWFrZXMgaXQgYSB2aWFibGUgZW50cnkgcG9pbnQuIEkgYWxzbyBsb29rZWQgYXQgYHJzaV9zZW5kX2JlYWNvbmAsIHdoaWNoICppcyogc3RhdGljLCBzbyB0aGF0JiMzOTtzIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIGByc2lfbWdtdF9wa3RfcmVjdmAgaXMgYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgpBZnRlciByZXZpZXdpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgb25seSBgcnNpX3ByZXBhcmVfYmVhY29uYCB3YXMgbW9kaWZpZWQuCgpCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgYHJzaV9wcmVwYXJlX2JlYWNvbmAgYW5kIGByc2lfbWdtdF9wa3RfcmVjdmAuIEkga25vdyBgUlNJXzkxWGAgYW5kIGBSU0lfVVNCYCBhcmUgdHJpc3RhdGUsIGFuZCBgV0xBTl9WRU5ET1JfUlNJYCBpcyBhIGJvb2xlYW4gYW5kIGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7LgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZpeCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGltcGFjdC4gQW5kIGdpdmVuIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExYCBhbmQgdGhlIFJTSSB3aXJlbGVzcyBVU0IgZHJpdmVyIGVtdWxhdGlvbiwgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHRhcmdldGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBtZWFucyB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlIGVudHJ5cG9pbnRzLiBJdCBhbGwgY2hlY2tzIG91dC4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHRhaWxyb29tIGJvdW5kcyBjaGVja3MgaW4gcnNpX3ByZXBhcmVfYmVhY29uKCkgYmVmb3JlIGNvcHlpbmcgYmVhY29uIGRhdGEsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIGNyYXNoLiBUaGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChSU0lfVVNCKSBhbmQgbWFjODAyMTEgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfcHJlcGFyZV9iZWFjb24mIzM0OywKICAgICYjMzQ7cnNpX21nbXRfcGt0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHRhaWxyb29tIGJvdW5kcyBjaGVja3MgaW4gcnNpX3ByZXBhcmVfYmVhY29uKCkgYmVmb3JlIGNvcHlpbmcgYmVhY29uIGRhdGEsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIGNyYXNoLiBUaGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChSU0lfVVNCKSBhbmQgbWFjODAyMTEgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDlkMWI3OTI5ODcwMWM0YTZiNzVmOTc2MWE2ZDYzZTliN2Y0MjYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCmluZGV4IDdkMjYzMTRhM2U3NmEuLjUwZjc3ZjNlZWU5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jCkBAIC00MzEsNiAmIzQzOzQzMSw3IEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBza19idWZmICptYWNfYmNuOwogCXU4IHZhcF9pZCA9IDAsIGk7CiYjNDM7CXVuc2lnbmVkIGludCB0YWlscm9vbTsKIAl1MTYgdGltX29mZnNldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykgewpAQCAtNDgwLDYgJiM0Mzs0ODEsMTMgQEAgaW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChtYWNfYmNuLSZndDtkYXRhW3RpbV9vZmZzZXQgJiM0MzsgMl0gPT0gMCkKIAkJYmNuX2ZybS0mZ3Q7ZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTsKIAomIzQzOwl0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOwomIzQzOwlpZiAodGFpbHJvb20gJmx0OyBGUkFNRV9ERVNDX1NaIHx8CiYjNDM7CSAgICBtYWNfYmNuLSZndDtsZW4gJmd0OyB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHsKJiM0MzsJCWRldl9rZnJlZV9za2IobWFjX2Jjbik7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiAJbWVtY3B5KCZhbXA7c2tiLSZndDtkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLSZndDtkYXRhLCBtYWNfYmNuLSZndDtsZW4pOwogCXNrYl9wdXQoc2tiLCBtYWNfYmNuLSZndDtsZW4gJiM0MzsgRlJBTUVfREVTQ19TWik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIFJTSSBXaXJlbGVzcyBIQUwqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZCBhbmQgd2h5LiBOb3csIEkgc3VzcGVjdCB0aGUgY29yZSBvZiB0aGlzIGJlYWNvbiBoYW5kbGluZyBtaWdodCBiZSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uYCwgc28gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIG9mIHRoYXQgZnVuY3Rpb24uIFNlZWluZyB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMgZ29pbmcgdG8gZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDQyNjpcdHtcbiA0Mjc6XHRcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiA0Mjg6XHRcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xuIDQyOTpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXHUwMDNlcHJpdi1cdTAwM2VodztcbiA0MzA6XHRcdHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IFx1MDAyNmh3LVx1MDAzZWNvbmY7XG4gNDMxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIDQzMjpcdFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gNDMzOlx0XHR1OCB2YXBfaWQgPSAwLCBpO1xuIDQzNDpcdFx0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIDQzNTpcdFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIDQzNjpcdFxuIDQzNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpJiM0MzsmIzQzOykge1xuIDQzODpcdFx0XHR2aWYgPSBhZGFwdGVyLVx1MDAzZXZpZnNbaV07XG4gNDM5Olx0XHRcdGlmICghdmlmKVxuIDQ0MDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ0MTpcdFx0XHRpZiAoKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxuIDQ0MjpcdFx0XHQgICAgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykpXG4gNDQzOlx0XHRcdFx0YnJlYWs7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XHRpZiAoIXZpZilcbiA0NDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ3Olx0XHRtYWNfYmNuID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKGFkYXB0ZXItXHUwMDNlaHcsXG4gNDQ4Olx0XHRcdFx0XHRcdCAgIHZpZixcbiA0NDk6XHRcdFx0XHRcdFx0ICAgXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XG4gNDUwOlx0XHRpZiAoIW1hY19iY24pIHtcbiA0NTE6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGdldCBiZWFjb24gZnJvbSBtYWM4MDIxMVxcblwmIzM0Oyk7XG4gNDUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0Y29tbW9uLVx1MDAzZWJlYWNvbl9jbnQmIzQzOyYjNDM7O1xuIDQ1NjpcdFx0YmNuX2ZybSA9IChzdHJ1Y3QgcnNpX2RhdGFfZGVzYyAqKXNrYi1cdTAwM2VkYXRhO1xuIDQ1NzpcdFx0cnNpX3NldF9sZW5fcW5vKFx1MDAyNmJjbl9mcm0tXHUwMDNlbGVuX3FubywgbWFjX2Jjbi1cdTAwM2VsZW4sIFJTSV9XSUZJX0RBVEFfUSk7XG4gNDU4Olx0XHRiY25fZnJtLVx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XG4gNDU5Olx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gPSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX01BQ19CQlBfSU5GTyB8XG4gNDYwOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19OT19BQ0tfSU5EIHxcbiA0NjE6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XG4gNDYyOlx0XHRcdFx0XHRcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfVFNGIHxcbiA0NjM6XHRcdFx0XHRcdFx0ICBSU0lfREFUQV9ERVNDX0lOU0VSVF9TRVFfTk8gfFxuIDQ2NDpcdFx0XHRcdFx0XHQgIFJBVEVfSU5GT19FTkFCTEUpO1xuIDQ2NTpcdFx0YmNuX2ZybS1cdTAwM2VyYXRlX2luZm8gPSBjcHVfdG9fbGUxNih2YXBfaWQgXHUwMDNjXHUwMDNjIDE0KTtcbiA0NjY6XHRcdGJjbl9mcm0tXHUwMDNlcWlkX3RpZCA9IEJFQUNPTl9IV19RO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XG4gNDY5Olx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gPSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUpO1xuIDQ3MDpcdFx0XHRiY25fZnJtLVx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSBcdTAwM2VcdTAwM2UgMTIpO1xuIDQ3MTpcdFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcbiA0NzI6XHRcdFx0YmNuX2ZybS1cdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSk7XG4gNDczOlx0XHRcdGJjbl9mcm0tXHUwMDNlYmJwX2luZm8gfD0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFIFx1MDAzZVx1MDAzZSAxMik7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRpZiAoY29tbW9uLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXG4gNDc3Olx0XHRcdGJjbl9mcm0tXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xuIDQ3ODpcdFx0ZWxzZVxuIDQ3OTpcdFx0XHRiY25fZnJtLVx1MDAzZXJhdGVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfUkFURV82KTtcbiA0ODA6XHRcbiA0ODE6XHRcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCAmIzQzOyAyXSA9PSAwKVxuIDQ4MjpcdFx0XHRiY25fZnJtLVx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XG4gNDgzOlx0XG4gNDg0Olx0XHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuIDQ4NTpcdFx0aWYgKHRhaWxyb29tIFx1MDAzYyBGUkFNRV9ERVNDX1NaIHx8XG4gNDg2Olx0XHQgICAgbWFjX2Jjbi1cdTAwM2VsZW4gXHUwMDNlIHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikge1xuIDQ4NzpcdFx0XHRkZXZfa2ZyZWVfc2tiKG1hY19iY24pO1xuIDQ4ODpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0bWVtY3B5KFx1MDAyNnNrYi1cdTAwM2VkYXRhW0ZSQU1FX0RFU0NfU1pdLCBtYWNfYmNuLVx1MDAzZWRhdGEsIG1hY19iY24tXHUwMDNlbGVuKTtcbiA0OTI6XHRcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVx1MDAzZWxlbiAmIzQzOyBGUkFNRV9ERVNDX1NaKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4gNDk1Olx0XG4gNDk2Olx0XHRyZXR1cm4gMDtcbiA0OTc6XHR9XG4gNDk4Olx0XG4gNDk5Olx0c3RhdGljIHZvaWQgYmxfY21kX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gNTAwOlx0e1xuIDUwMTpcdFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xuIDUwMjpcdFxuIDUwMzpcdFx0YWRhcHRlci1cdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcbiA1MDQ6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZWJsX2NtZF90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBCZWFjb24mIzM5O3MgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgcnNpX3ByZXBhcmVfYmVhY29uYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogYW5kICp3aHkqIHRoaXMgYmVhY29uIHByZXBhcmF0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZC4gV2hlcmUmIzM5O3MgdGhlIGNhbGxpbmcgY29kZT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHM/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3cuIElzIHRoaXMgcGFydCBvZiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYSBzY2hlZHVsZWQgdGFzaywgb3Igc29tZXRoaW5nIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBldmVudD8gVGhlIGNvbnRleHQgd2lsbCBzaGFwZSBob3cgSSBpbnRlcnByZXQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBzcGVjaWZpYyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24gYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBzdGF0ZSB3aGVuIHRoZSBiZWFjb24gaXMgYmVpbmcgc2V0IHVwLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBxdWlja2x5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIElERSBvciBzb3VyY2UgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIGNhbiBvZmZlci4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2YgYmVhY29uaW5nIG1lY2hhbmlzbSBpbiBwbGF5IGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV9wcmVwYXJlX2JlYWNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zODg9aW50IHJzaV9zZW5kX2J0X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQyNTppbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MjYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz0xNzYzPXN0YXRpYyBpbnQgcnNpX3NlbmRfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzYtXHRcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoxNzc3Olx0aWYgKHJzaV9wcmVwYXJlX2JlYWNvbihjb21tb24sIHNrYikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzc4LVx0XHRyc2lfZGJnKEVSUl9aT05FLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBiZWFjb25cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmg9MjI1PWludCByc2lfcHJlcGFyZV9kYXRhX2Rlc2Moc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oOjIyNjppbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaC0yMjctaW50IHJzaV9zZW5kX3BrdF90b19idXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NjUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIHJzaV9zZW5kX2JlYWNvbiBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcnNpX3NlbmRfYmVhY29uYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmaW5kIGl0IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uIGxvZ2ljIGZvciB0aGUgUlNJIDkxeCB3aXJlbGVzcyBjaGlwc2V0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgYmVhY29uIGZyYW1lcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGV0YWlscyBsaWtlIGhvdyB0aGUgZnJhbWUgaXMgY29uc3RydWN0ZWQsIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBiZWFjb24gc2VuZGluZyBwcm9jZXNzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIGRyaXZlciBhbmQsIHVsdGltYXRlbHksIHRoZSBoYXJkd2FyZSBpdHNlbGYuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzYwOlx0XHRyZXR1cm4gcnNpX3NlbmRfaW50ZXJuYWxfbWdtdF9mcmFtZShjb21tb24sIHNrYik7XG4xNzYxOlx0fVxuMTc2MjpcdFxuMTc2MzpcdHN0YXRpYyBpbnQgcnNpX3NlbmRfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4xNzY0Olx0e1xuMTc2NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4xNzY2Olx0XHR1OCBkd29yZF9hbGlnbl9ieXRlcyA9IDA7XG4xNzY3Olx0XG4xNzY4Olx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9NR01UX1BLVF9TSVpFKTtcbjE3Njk6XHRcdGlmICghc2tiKVxuMTc3MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NzE6XHRcbjE3NzI6XHRcdG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgTUFYX01HTVRfUEtUX1NJWkUpO1xuMTc3MzpcdFxuMTc3NDpcdFx0ZHdvcmRfYWxpZ25fYnl0ZXMgPSAoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEgXHUwMDI2IDB4M2YpO1xuMTc3NTpcdFx0aWYgKGR3b3JkX2FsaWduX2J5dGVzKVxuMTc3NjpcdFx0XHRza2JfcHVsbChza2IsICg2NCAtIGR3b3JkX2FsaWduX2J5dGVzKSk7XG4xNzc3Olx0XHRpZiAocnNpX3ByZXBhcmVfYmVhY29uKGNvbW1vbiwgc2tiKSkge1xuMTc3ODpcdFx0XHRyc2lfZGJnKEVSUl9aT05FLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBiZWFjb25cXG5cJiMzNDspO1xuMTc3OTpcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4xNzgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc4MTpcdFx0fVxuMTc4MjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y29tbW9uLVx1MDAzZXR4X3F1ZXVlW01HTVRfQkVBQ09OX1FdLCBza2IpO1xuMTc4MzpcdFx0cnNpX3NldF9ldmVudChcdTAwMjZjb21tb24tXHUwMDNldHhfdGhyZWFkLmV2ZW50KTtcbjE3ODQ6XHRcdHJzaV9kYmcoREFUQV9UWF9aT05FLCBcJiMzNDslczogQWRkZWQgdG8gYmVhY29uIHF1ZXVlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xNzg1Olx0XG4xNzg2Olx0XHRyZXR1cm4gMDtcbjE3ODc6XHR9XG4xNzg4Olx0XG4xNzg5Olx0I2lmZGVmIENPTkZJR19QTVxuMTc5MDpcdGludCByc2lfc2VuZF93b3dsYW5fcmVxdWVzdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1MTYgZmxhZ3MsXG4xNzkxOlx0XHRcdFx0ICAgIHUxNiBzbGVlcF9zdGF0dXMpXG4xNzkyOlx0e1xuMTc5MzpcdFx0c3RydWN0IHJzaV93b3dsYW5fcmVxICpjbWRfZnJhbWU7XG4xNzk0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTc5NTpcdFx0dTggbGVuZ3RoO1xuMTc5NjpcdFxuMTc5NzpcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7JXM6IFNlbmRpbmcgd293bGFuIHJlcXVlc3QgZnJhbWVcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE3OTg6XHRcbjE3OTk6XHRcdGxlbmd0aCA9IHNpemVvZigqY21kX2ZyYW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc4OQoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEJlYWNvbiBQcmVwYXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgb3JpZ2luYWwgY29kZSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uYCB3YXMgdnVsbmVyYWJsZTogaXQgdXNlZCBgbWVtY3B5YCBhbmQgYHNrYl9wdXRgIHdpdGhvdXQgdmVyaWZ5aW5nIHRoZSBgc2tiYCBoYWQgZW5vdWdoIHNwYWNlIGZvciB0aGUgYmVhY29uIGRhdGEgKGBtYWNfYmNuLSZndDtsZW5gKS4gVGhpcywgb2YgY291cnNlLCBwcmVzZW50ZWQgYSBjbGVhciBidWZmZXIgb3ZlcmZsb3cgcmlza+KAlGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuCgpUaGUgcGF0Y2ggc21hcnRseSBhZGRzIGEgYm91bmRzIGNoZWNrOiBpdCB2ZXJpZmllcyBgc2tiX3RhaWxyb29tKHNrYilgIGlzIHN1ZmZpY2llbnQgYmVmb3JlIHByb2NlZWRpbmcuIElmIHRoZXJlJiMzOTtzIG5vdCBlbm91Z2ggcm9vbSwgdGhlIGJlYWNvbiBidWZmZXIgaXMgZnJlZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLiBUaGF0JiMzOTtzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBJbiBgcnNpX3NlbmRfYmVhY29uYCwgdGhlIGBza2JgIGl0c2VsZiBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgemVyb2VkLCBzbyB0aGF0JiMzOTtzIGEgc29saWQgZm91bmRhdGlvbi4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueXRoaW5nIEtNU0FOIHdvdWxkIGJlIHNwZWNpZmljYWxseSB1c2VmdWwgZm9yPyBJIGRvbiYjMzk7dCBzZWUgaXQuIFRoZSBwcmltYXJ5IGNoYW5nZSBpcyBhICpyZXN0cmljdGlvbiogb24gYWNjZXNzLCBub3QgYW4gaW50cm9kdWN0aW9uIG9mIG5ldyByaXNrcy4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgbWV0aG9kaWNhbGx5OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNoZW5hbmlnYW5zLCBpb2N0bHMsIG9yIHNvY2tldCBvcHRpb25zIGFyZSB0b3VjaGVkLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm9wZS4gVGhlIGNoZWNrIGRlcGVuZHMgb24gYHNrYl90YWlscm9vbWAsIGEga25vd24gdmFsaWQgdmFsdWUuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm9wZS4gVGhlIGJ1ZmZlciBpcyBtZW1zZXQgdG8gemVybyAqYmVmb3JlKiBhbnkgb2YgdGhpcyBoYXBwZW5zLgo0LiAgKipCb3VuZHMgY2hlY2tzIHRoYXQgKmFsbG93KiB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIE5vcGUuIFRoaXMgY2hlY2sgKnByZXZlbnRzKiBpdC4gV2UmIzM5O3JlIGV4cGxpY2l0bHkgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgaW5pdGlhbCB6ZXJvaW5nIG1ha2VzIHRoaXMgYnVsbGV0LXByb29mLgoKU28sIHRoZSBjaGFuZ2UgKnByZXZlbnRzKiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy4gS0FTQU4gaXMgdGhlIHJlbGV2YW50IHNhbml0aXplci4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoaXMgaXMgYSBLQVNBTiBjYXNlLgoKQWxsIGNoZWNrcyBhcmUgZG9uZS4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0czogYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYHNrYl90YWlscm9vbShza2IpYCkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbigpYCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyAob3V0LW9mLWJvdW5kcyB3cml0ZSkgd2hlbiBjb3B5aW5nIGJlYWNvbiBkYXRhIChgbWFjX2Jjbi1cdTAwM2VkYXRhYCkgaW50byB0aGUgdGFyZ2V0IGBza2JgLiBcblxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBwcmV2ZW50aW9uIGZpeC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgYnVmZmVyIG92ZXJmbG93cyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4gKGFuZCBza2IgYXNzZXJ0aW9ucykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDM6MTYuMjM5MzExMzQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDQ2MjMxMzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyc2lfcHJlcGFyZV9iZWFjb25cIixcbiAgICBcInJzaV9tZ210X3BrdF9yZWN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgc2tiX3RhaWxyb29tKHNrYilgKSBpbiBgcnNpX3ByZXBhcmVfYmVhY29uKClgIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IChvdXQtb2YtYm91bmRzIHdyaXRlKSB3aGVuIGNvcHlpbmcgYmVhY29uIGRhdGEgKGBtYWNfYmNuLVxcdTAwM2VkYXRhYCkgaW50byB0aGUgdGFyZ2V0IGBza2JgLiBcXG5cXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHByZXZlbnRpb24gZml4LiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBidWZmZXIgb3ZlcmZsb3dzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiAoYW5kIHNrYiBhc3NlcnRpb25zKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyB0YWlscm9vbSBib3VuZHMgY2hlY2tzIGluIHJzaV9wcmVwYXJlX2JlYWNvbigpIGJlZm9yZSBjb3B5aW5nIGJlYWNvbiBkYXRhLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvciBjcmFzaC4gVGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoUlNJX1VTQikgYW5kIG1hYzgwMjExIGluIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0MzoxNi4yMzkzMTU2NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTI2NTkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZDlkMWI3OTI5ODcwMWM0YTZiNzVmOTc2MWE2ZDYzZTliN2Y0MjYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDE5OjQzOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNcXG5pbmRleCA3ZDI2MzE0YTNlNzZhLi41MGY3N2YzZWVlOTJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNcXG5AQCAtNDMxLDYgKzQzMSw3IEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XFxuIFxcdHU4IHZhcF9pZCA9IDAsIGk7XFxuK1xcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcXG4gXFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuQEAgLTQ4MCw2ICs0ODEsMTMgQEAgaW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAobWFjX2Jjbi1cXHUwMDNlZGF0YVt0aW1fb2Zmc2V0ICsgMl0gPT0gMClcXG4gXFx0XFx0YmNuX2ZybS1cXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcXG4gXFxuK1xcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XFxuK1xcdGlmICh0YWlscm9vbSBcXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcXG4rXFx0ICAgIG1hY19iY24tXFx1MDAzZWxlbiBcXHUwMDNlIHRhaWxyb29tIC0gRlJBTUVfREVTQ19TWikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiKG1hY19iY24pO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXHR9XFxuK1xcbiBcXHRtZW1jcHkoXFx1MDAyNnNrYi1cXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cXHUwMDNlZGF0YSwgbWFjX2Jjbi1cXHUwMDNlbGVuKTtcXG4gXFx0c2tiX3B1dChza2IsIG1hY19iY24tXFx1MDAzZWxlbiArIEZSQU1FX0RFU0NfU1opO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDM6MTcuNzUzMTY2NTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTg5NjYyNjMxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9wcmVwYXJlX2JlYWNvblwiLFxuICAgIFwicnNpX21nbXRfcGt0X3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgdGFpbHJvb20gYm91bmRzIGNoZWNrcyBpbiByc2lfcHJlcGFyZV9iZWFjb24oKSBiZWZvcmUgY29weWluZyBiZWFjb24gZGF0YSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgY3Jhc2guIFRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlciBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKFJTSV9VU0IpIGFuZCBtYWM4MDIxMSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQ5ZDFiNzkyOTg3MDFjNGE2Yjc1Zjk3NjFhNmQ2M2U5YjdmNDI2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE5OjQzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuaW5kZXggN2QyNjMxNGEzZTc2YS4uNTBmNzdmM2VlZTkyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuQEAgLTQzMSw2ICs0MzEsNyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gXHR1OCB2YXBfaWQgPSAwLCBpO1xuK1x0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcbkBAIC00ODAsNiArNDgxLDEzIEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCArIDJdID09IDApXG4gXHRcdGJjbl9mcm0tXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcbiBcbitcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XG4rXHRpZiAodGFpbHJvb20gXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcbitcdCAgICBtYWNfYmNuLVx1MDAzZWxlbiBcdTAwM2UgdGFpbHJvb20gLSBGUkFNRV9ERVNDX1NaKSB7XG4rXHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4gXHRtZW1jcHkoXHUwMDI2c2tiLVx1MDAzZWRhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tXHUwMDNlZGF0YSwgbWFjX2Jjbi1cdTAwM2VsZW4pO1xuIFx0c2tiX3B1dChza2IsIG1hY19iY24tXHUwMDNlbGVuICsgRlJBTUVfREVTQ19TWik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0MzoxNy43NTMxNjgwODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTY1MDE5ODExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBUaGUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgcnNpX3ByZXBhcmVfYmVhY29uYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmNgLiBSaWdodCwgc28gdGhpcyBpcyB0aGUgUmVkcGluZSBTaWduYWxzIDkxeCB3aXJlbGVzcyBkcml2ZXIuIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhpcyBVU0Igb3IgU0RJTz8gQW5kIGp1c3QgYXMgaW1wb3J0YW50bHksIGNhbiBJIGZ1enogaXQgZWZmZWN0aXZlbHk/IElmIGl0J3MgVVNCLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGxldmVyYWdlIHNvbWV0aGluZyBsaWtlIHN5emthbGxlcidzIFVTQiByYXcgZ2FkZ2V0IG9yIHNvbWUga2luZCBvZiBVU0IgZW11bGF0aW9uIHRvIGdldCBhdCBpdC4gVGhhdOKAmXMgdGhlIGlkZWFsIHNjZW5hcmlvIGZvciB0aG9yb3VnaCB0ZXN0aW5nLiBJZiBub3QsIHdoYXQgb3RoZXIgYXR0YWNrIHN1cmZhY2VzIGFyZSBwcmVzZW50P1xuXG5MZXQncyBxdWlja2x5IHNlYXJjaCBmb3Igb3RoZXIgYHJzaWAgZHJpdmVyIGZpbGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpdHMgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGRldGVybWluZSBob3cgYWNjZXNzaWJsZSB0aGlzIGZ1bmN0aW9uIGlzLCBhbmQgd2hhdCBhdHRhY2sgdmVjdG9ycyBtaWdodCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQzOjI5LjQwMzM2ODQ5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYwODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSU0lfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE5NjAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTc6XFx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE4LVxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTIyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjIzOmNvbmZpZyBSU0lfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFJTSV85MVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0yNi1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjMxOmNvbmZpZyBSU0lfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgU0RJTyBidXMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIE1NQyBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMzQtXFx0ZGVmYXVsdCBtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzozOTpjb25maWcgUlNJX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQwLVxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQxOlxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IFJTSV85MVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy00Mi1cXHRkZWZhdWx0IG1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjQ3OmNvbmZpZyBSU0lfQ09FWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBXTEFOIEJUIENvZXhpc3RlbmNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBCVCBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NTA6XFx0ZGVwZW5kcyBvbiAhKEJUPW0gXFx1MDAyNlxcdTAwMjYgUlNJXzkxWD15KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTUxLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTc9cnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9wcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjg6cnNpXzkxeC0kKENPTkZJR19SU0lfQ09FWClcXHQrPSByc2lfOTF4X2NvZXgub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZTo5OnJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXFx0Kz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU9MTI9cnNpX3NkaW8teVxcdFxcdFxcdCs9IHJzaV85MXhfc2Rpby5vIHJzaV85MXhfc2Rpb19vcHMub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfUlNJXzkxWCkgXFx0XFx0Kz0gcnNpXzkxeC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19SU0lfU0RJTylcXHRcXHQrPSByc2lfc2Rpby5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19SU0lfVVNCKVxcdFxcdCs9IHJzaV91c2Iub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTIyPXN0YXRpYyBlbnVtIHJzaV9jb2V4X3F1ZXVlcyByc2lfY29leF9kZXRlcm1pbmVfY29leF9xXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMjQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyNTpcXHRlbnVtIHJzaV9jb2V4X3F1ZXVlcyBxX251bSA9IFJTSV9DT0VYX1FfSU5WQUxJRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjI3OlxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZjb2V4X2NiLVxcdTAwM2Vjb2V4X3R4X3FzW1JTSV9DT0VYX1FfQ09NTU9OXSkgXFx1MDAzZSAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyODpcXHRcXHRxX251bSA9IFJTSV9DT0VYX1FfQ09NTU9OO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoyOTpcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2Y29leF9jYi1cXHUwMDNlY29leF90eF9xc1tSU0lfQ09FWF9RX0JUXSkgXFx1MDAzZSAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzozMDpcXHRcXHRxX251bSA9IFJTSV9DT0VYX1FfQlQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjMxOlxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZjb2V4X2NiLVxcdTAwM2Vjb2V4X3R4X3FzW1JTSV9DT0VYX1FfV0xBTl0pIFxcdTAwM2UgMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MzI6XFx0XFx0cV9udW0gPSBSU0lfQ09FWF9RX1dMQU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTMzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTM3PXN0YXRpYyB2b2lkIHJzaV9jb2V4X3NjaGVkX3R4X3BrdHMoc3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTM4LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6Mzk6XFx0ZW51bSByc2lfY29leF9xdWV1ZXMgY29leF9xID0gUlNJX0NPRVhfUV9JTlZBTElEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy00MC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo0NjpcXHRcXHRpZiAoY29leF9xID09IFJTSV9DT0VYX1FfQlQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6NDc6XFx0XFx0XFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNmNvZXhfY2ItXFx1MDAzZWNvZXhfdHhfcXNbUlNJX0NPRVhfUV9CVF0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy00OC1cXHRcXHRcXHRyc2lfc2VuZF9idF9wa3QoY29leF9jYi1cXHUwMDNlcHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNDktXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo1MDpcXHR9IHdoaWxlIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9JTlZBTElEKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtNTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTY4PWludCByc2lfY29leF9yZWN2X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy02OS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjcwOlxcdHU4IG1zZ190eXBlID0gbXNnW1JTSV9SWF9ERVNDX01TR19UWVBFX09GRlNFVF07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTcxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTg3PXN0YXRpYyBpbmxpbmUgaW50IHJzaV9tYXBfY29leF9xKHU4IGhhbF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy04OS1cXHRzd2l0Y2ggKGhhbF9xdWV1ZSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MDpcXHRjYXNlIFJTSV9DT0VYX1E6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjkxOlxcdFxcdHJldHVybiBSU0lfQ09FWF9RX0NPTU1PTjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6OTI6XFx0Y2FzZSBSU0lfV0xBTl9ROlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5MzpcXHRcXHRyZXR1cm4gUlNJX0NPRVhfUV9XTEFOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NDpcXHRjYXNlIFJTSV9CVF9ROlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NTpcXHRcXHRyZXR1cm4gUlNJX0NPRVhfUV9CVDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtOTYtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzo5NzpcXHRyZXR1cm4gUlNJX0NPRVhfUV9JTlZBTElEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy05OC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9MTAwPWludCByc2lfY29leF9zZW5kX3BrdCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBoYWxfcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTA4LVxcdGNvZXhfcSA9IHJzaV9tYXBfY29leF9xKGhhbF9xdWV1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjEwOTpcXHRpZiAoY29leF9xID09IFJTSV9DT0VYX1FfSU5WQUxJRCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMTAtXFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIkludmFsaWQgY29leCBxdWV1ZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTEyLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTEzOlxcdGlmIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9DT01NT04gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTE0OlxcdCAgICBjb2V4X3EgIT0gUlNJX0NPRVhfUV9XTEFOKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTExNS1cXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Y29leF9jYi1cXHUwMDNlY29leF90eF9xc1tjb2V4X3FdLCBza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTkxPXN0YXRpYyB1MzIgcnNpX2dldF9udW1fcGt0c19kZXF1ZXVlKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4IHFfbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTEwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MTAyOlxcdHJhdGUuYml0cmF0ZSA9IFJTSV9SQVRFX01DUzAgKiA1ICogMTA7IC8qIENvbnZlcnQgdG8gS2JwcyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0xMDMtXFx0aWYgKHFfbnVtID09IFZJX1EpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM9MjYxPXZvaWQgcnNpX2NvcmVfcW9zX3Byb2Nlc3NvcihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTMwNy1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozMDg6I2lmZGVmIENPTkZJR19SU0lfQ09FWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zMDktXFx0XFx0XFx0aWYgKGNvbW1vbi1cXHUwMDNlY29leF9tb2RlIFxcdTAwM2UgMSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zMTAtXFx0XFx0XFx0XFx0c3RhdHVzID0gcnNpX2NvZXhfc2VuZF9wa3QoY29tbW9uLCBza2IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjMxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBSU0lfV0xBTl9RKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzEyLVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzE3LVxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IHJzaV9zZW5kX2RhdGFfcGt0KGNvbW1vbiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmM6MzE4OiNpZmRlZiBDT05GSUdfUlNJX0NPRVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzE5LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYz0zNTI9c3RydWN0IGllZWU4MDIxMV92aWYgKnJzaV9nZXRfdmlmKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4ICptYWMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb3JlLmMtMzU2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozNTc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM1OC1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jPTM3ND12b2lkIHJzaV9jb3JlX3htaXQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYy0zOTItXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvcmUuYzozOTM6XFx0aWYgKGNvbW1vbi1cXHUwMDNld293X2ZsYWdzIFxcdTAwMjYgUlNJX1dPV19FTkFCTEVEKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTM5NC1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTQyMC1cXHRcXHRcXHRyc2lfaGFsX3NlbmRfc3RhX25vdGlmeV9mcmFtZShjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jOjQyMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSU0lfSUZUWVBFX1NUQVRJT04sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29yZS5jLTQyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBTVEFfQ09OTkVDVEVELCBic3MtXFx1MDAzZWJzc2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9NTg9aW50IHJzaV9wcmVwYXJlX21nbXRfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA1LVxcdHJzaV9zZXRfbGVuX3FubyhcXHUwMDI2bWdtdF9kZXNjLVxcdTAwM2VsZW5fcW5vLCAoc2tiLVxcdTAwM2VsZW4gLSBGUkFNRV9ERVNDX1NaKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMDY6XFx0XFx0XFx0UlNJX1dJRklfTUdNVF9RKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDctXFx0bWdtdF9kZXNjLVxcdTAwM2VmcmFtZV90eXBlID0gVFhfRE9UMTFfTUdNVDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExMS1cXHRpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3JlcSh3aC1cXHUwMDNlZnJhbWVfY29udHJvbCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTEyOlxcdFxcdG1nbXRfZGVzYy1cXHUwMDNlZnJhbWVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9JTlNFUlRfU0VRX0lOX0ZXKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTMtXFx0bWdtdF9kZXNjLVxcdTAwM2VmcmFtZV9pbmZvIHw9IGNwdV90b19sZTE2KFJBVEVfSU5GT19FTkFCTEUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNC1cXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2gtXFx1MDAzZWFkZHIxKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTU6XFx0XFx0bWdtdF9kZXNjLVxcdTAwM2VmcmFtZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9CUk9BRENBU1RfUEtUKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTktXFx0aWYgKChjb21tb24tXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopIFxcdTAwMjZcXHUwMDI2ICFjb21tb24tXFx1MDAzZXAycF9lbmFibGVkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyMDpcXHRcXHRtZ210X2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEyMS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTIyOlxcdFxcdG1nbXRfZGVzYy1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTI3LVxcdGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcCh3aC1cXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMjg6XFx0XFx0bWdtdF9kZXNjLVxcdTAwM2VtaXNjX2ZsYWdzIHw9IChSU0lfQUREX0RFTFRBX1RTRl9WQVBfSUQgfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEyOTpcXHRcXHRcXHRcXHRcXHQgIFJTSV9GRVRDSF9SRVRSWV9DTlRfRlJNX0hTVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTMwLSNkZWZpbmUgUFJPQkVfUkVTUF9SRVRSWV9DTlRcXHQzXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xNDQtXFx0bWdtdF9kZXNjLVxcdTAwM2VyYXRlX2luZm8gfD1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxNDU6XFx0XFx0Y3B1X3RvX2xlMTYoKHR4X3BhcmFtcy1cXHUwMDNldmFwX2lkIFxcdTAwM2NcXHUwMDNjIFJTSV9ERVNDX1ZBUF9JRF9PRlNUKSBcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTQ2OlxcdFxcdFxcdCAgICBSU0lfREVTQ19WQVBfSURfTUFTSyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTUyPWludCByc2lfcHJlcGFyZV9kYXRhX2Rlc2Moc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwMC1cXHRcXHRpZWVlODAyMTFfc2l6ZSArPSAyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIwMTpcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZW1hY19mbGFncyB8PSBjcHVfdG9fbGUxNihSU0lfUU9TX0VOQUJMRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjAyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIwNi1cXHQgICAgKGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID09IFBTX0VOQUJMRUQpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIwNzpcXHRcXHR3aC1cXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihSU0lfU0VUX1BTX0VOQUJMRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjA4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjE0LVxcdFxcdFxcdGllZWU4MDIxMV9zaXplICs9IDg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjE1OlxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9FTkNSWVBUX1BLVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjE2LVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yMTctXFx0cnNpX3NldF9sZW5fcW5vKFxcdTAwMjZkYXRhX2Rlc2MtXFx1MDAzZWxlbl9xbm8sIChza2ItXFx1MDAzZWxlbiAtIEZSQU1FX0RFU0NfU1opLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjIxODpcXHRcXHRcXHRSU0lfV0lGSV9EQVRBX1EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTIxOS1cXHRkYXRhX2Rlc2MtXFx1MDAzZWhlYWRlcl9sZW4gPSBpZWVlODAyMTFfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI0Mi1cXHRcXHRpZiAoY29tbW9uLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF81R0haKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI0MzpcXHRcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI0NC1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjQ1OlxcdFxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjQ2OlxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlbWFjX2ZsYWdzIHw9IGNwdV90b19sZTE2KFJTSV9SRUtFWV9QVVJQT1NFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNDc6XFx0XFx0ZGF0YV9kZXNjLVxcdTAwM2VtaXNjX2ZsYWdzIHw9IFJTSV9GRVRDSF9SRVRSWV9DTlRfRlJNX0hTVDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yNDgtI2RlZmluZSBFQVBPTF9SRVRSWV9DTlQgMTVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI1NS1cXHRcXHRcXHRcXHRcXHQoc2tiLVxcdTAwM2VsZW4gLSBGUkFNRV9ERVNDX1NaKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyNTY6XFx0XFx0XFx0XFx0XFx0UlNJX1dJRklfTUdNVF9RKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yNTctXFx0XFx0aWYgKCgoc2tiLVxcdTAwM2VsZW4gLSBoZWFkZXJfc2l6ZSkgPT0gRUFQT0w0X1BBQ0tFVF9MRU4pIHx8XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yNTktXFx0XFx0XFx0ZGF0YV9kZXNjLVxcdTAwM2VtaXNjX2ZsYWdzIHw9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjYwOlxcdFxcdFxcdFxcdFJTSV9ERVNDX1JFUVVJUkVfQ0ZNX1RPX0hPU1Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjYxLVxcdFxcdFxcdHh0ZW5kX2Rlc2MtXFx1MDAzZWNvbmZpcm1fZnJhbWVfdHlwZSA9IEVBUE9MNF9DT05GSVJNO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjcyLVxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlZnJhbWVfaW5mbyA9IGNwdV90b19sZTE2KFJBVEVfSU5GT19FTkFCTEUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI3MzpcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0JST0FEQ0FTVF9QS1QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3NC1cXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZXN0YV9pZCA9IHZhcF9pZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI3OC1cXHRcXHRcXHRpZiAoY29tbW9uLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF81R0haKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI3OTpcXHRcXHRcXHRcXHRkYXRhX2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyA9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI4MC1cXHRcXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MjgxOlxcdFxcdFxcdFxcdGRhdGFfZGVzYy1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMjgyLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTI4OS1cXHRkYXRhX2Rlc2MtXFx1MDAzZXJhdGVfaW5mbyB8PVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjI5MDpcXHRcXHRjcHVfdG9fbGUxNigodHhfcGFyYW1zLVxcdTAwM2V2YXBfaWQgXFx1MDAzY1xcdTAwM2MgUlNJX0RFU0NfVkFQX0lEX09GU1QpIFxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoyOTE6XFx0XFx0XFx0ICAgIFJTSV9ERVNDX1ZBUF9JRF9NQVNLKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0yOTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zMzc9aW50IHJzaV9zZW5kX21nbXRfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0zNzMtXFx0XFx0XFx0XFxcIiVzOiBibG9ja2luZyBtZ210IHF1ZXVlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6Mzc0OlxcdFxcdG1nbXRfZGVzYy1cXHUwMDNlbWlzY19mbGFncyA9IFJTSV9ERVNDX1JFUVVJUkVfQ0ZNX1RPX0hPU1Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMzc1LVxcdFxcdHh0ZW5kX2Rlc2MtXFx1MDAzZWNvbmZpcm1fZnJhbWVfdHlwZSA9IFBST0JFUkVRX0NPTkZJUk07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYz0zODg9aW50IHJzaV9zZW5kX2J0X3BrdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMzk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjM5NTpcXHRpZiAocXVldWVubyA9PSBSU0lfQlRfTUdNVF9RKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMzk2LVxcdFxcdHN0YXR1cyA9IHJzaV9zZW5kX3BrdF90b19idXMoY29tbW9uLCBza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDEyLVxcdHJzaV9zZXRfbGVuX3FubyhcXHUwMDI2YnRfZGVzYy1cXHUwMDNlbGVuX3FubywgKHNrYi1cXHUwMDNlbGVuIC0gRlJBTUVfREVTQ19TWiksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDEzOlxcdFxcdFxcdFJTSV9CVF9EQVRBX1EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQxNC1cXHRidF9kZXNjLVxcdTAwM2VidF9wa3RfdHlwZSA9IGNwdV90b19sZTE2KGJ0X2NiKHNrYiktXFx1MDAzZXBrdF90eXBlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTQyNT1pbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDM3OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQzOC1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDU2LVxcdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDU3OlxcdHJzaV9zZXRfbGVuX3FubyhcXHUwMDI2YmNuX2ZybS1cXHUwMDNlbGVuX3FubywgbWFjX2Jjbi1cXHUwMDNlbGVuLCBSU0lfV0lGSV9EQVRBX1EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ1OC1cXHRiY25fZnJtLVxcdTAwM2VoZWFkZXJfbGVuID0gTUlOXzgwMl8xMV9IRFJfTEVOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ1OTpcXHRiY25fZnJtLVxcdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ2MDpcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfTk9fQUNLX0lORCB8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYxOlxcdFxcdFxcdFxcdFxcdCAgUlNJX0RBVEFfREVTQ19CRUFDT05fRlJBTUUgfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ2MjpcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDYzOlxcdFxcdFxcdFxcdFxcdCAgUlNJX0RBVEFfREVTQ19JTlNFUlRfU0VRX05PIHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00NjQtXFx0XFx0XFx0XFx0XFx0ICBSQVRFX0lORk9fRU5BQkxFKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ3Ni1cXHRpZiAoY29tbW9uLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF8yR0haKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjQ3NzpcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDc4LVxcdGVsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0Nzk6XFx0XFx0YmNuX2ZybS1cXHUwMDNlcmF0ZV9pbmZvIHw9IGNwdV90b19sZTE2KFJTSV9SQVRFXzYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQ4MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00ODEtXFx0aWYgKG1hY19iY24tXFx1MDAzZWRhdGFbdGltX29mZnNldCArIDJdID09IDApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDgyOlxcdFxcdGJjbl9mcm0tXFx1MDAzZWZyYW1lX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19EVElNX0JFQUNPTik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNDgzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9NjUwPXN0YXRpYyBpbnQgYmxfd3JpdGVfaGVhZGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4ICpmbGFzaF9jb250ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtNjcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjY3MTpcXHRpZiAoYWRhcHRlci1cXHUwMDNlcnNpX2hvc3RfaW50ZiA9PSBSU0lfSE9TVF9JTlRGX1VTQikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY3Mi1cXHRcXHR3cml0ZV9hZGRyID0gUElOR19CVUZGRVJfQUREUkVTUztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY4OS1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NjkwOlxcdFxcdHdyaXRlX2FkZHIgPSBSU0lfU0RfUkVRVUVTVF9NQVNURVIgfFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTY5MS1cXHRcXHRcXHQgICAgIChQSU5HX0JVRkZFUl9BRERSRVNTIFxcdTAwMjYgMHhGRkZGKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTg1MD1zdGF0aWMgaW50IHJzaV9oYWxfcHJlcGFyZV9md2xvYWQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2MC1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZyZWdvdXRfdmFsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjg2MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9DT01NT05fUkVHX1NJWkUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTg2Mi1cXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtODg1LVxcdFxcdFxcdFxcdFxcdCAgICBSRUdPVVRfSU5WQUxJRCBcXHUwMDNjXFx1MDAzYyA4KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo4ODY6XFx0XFx0XFx0XFx0XFx0ICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtODg3LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTAxMT1zdGF0aWMgaW50IHJzaV9sb2FkXzkxMTZfZmlybXdhcmUoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTAyNjpcXHRpZiAoYWRhcHRlci1cXHUwMDNlcnNpX2hvc3RfaW50ZiA9PSBSU0lfSE9TVF9JTlRGX1VTQikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMjctXFx0XFx0c3RhdHVzID0gYmxfY21kKGFkYXB0ZXIsIFBPTExJTkdfTU9ERSwgQ01EX1BBU1MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDM0LVxcdFxcdFxcdFxcdFxcdCAgIFJBTV8zODRLX0FDQ0VTU19GUk9NX1RBLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjEwMzU6XFx0XFx0XFx0XFx0XFx0ICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwMzYtXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA3MjpcXHRpZiAoKih1MTYgKilmd19wID09IFJTSV85MTE2X0ZXX01BR0lDX1dPUkQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDczLVxcdFxcdG1lbWNweShcXHUwMDI2Ym9vdGxvYWRfZHMsIGZ3X3AsIHNpemVvZihzdHJ1Y3QgYm9vdGxvYWRfZHMpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTEwODMtXFx0XFx0XFx0bGVuID0gbGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA4NDpcXHRcXHRcXHQgICAgICBSU0lfQkxfQ1RSTF9MRU5fTUFTSztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMDg1LVxcdFxcdFxcdHJzaV9kYmcoSU5GT19aT05FLCBcXFwibGVuZ3RoICVkIGRlc3RpbmF0aW9uICV4XFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTA5OC1cXHRcXHRcXHRpZiAobGUzMl90b19jcHUoYm9vdGxvYWRfZHMuYmxfZW50cnlbY250XS5jb250cm9sKSBcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6MTA5OTpcXHRcXHRcXHQgICAgUlNJX0JMX0NUUkxfTEFTVF9FTlRSWSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy0xMTAwLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTEyMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTIxOlxcdGlmIChhZGFwdGVyLVxcdTAwM2Vyc2lfaG9zdF9pbnRmID09IFJTSV9IT1NUX0lOVEZfU0RJTykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExMjItXFx0XFx0aWYgKGhpZl9vcHMtXFx1MDAzZXRhX3Jlc2V0KGFkYXB0ZXIpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9MTE0MD1pbnQgcnNpX2hhbF9kZXZpY2VfaW5pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE0NS1cXHRzd2l0Y2ggKGFkYXB0ZXItXFx1MDAzZWRldmljZV9tb2RlbCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jOjExNDY6XFx0Y2FzZSBSU0lfREVWXzkxMTM6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE0Ny1cXHRcXHRzdGF0dXMgPSByc2lfaGFsX3ByZXBhcmVfZndsb2FkKGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMtMTE1Ni1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzoxMTU3OlxcdGNhc2UgUlNJX0RFVl85MTE2OlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTExNTgtXFx0XFx0c3RhdHVzID0gcnNpX2hhbF9wcmVwYXJlX2Z3bG9hZChhZGFwdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTA2PXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByc2lfcmF0ZXNbMTJdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA3OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8wMSAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xIH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDg6XFx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzAyICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzIgfSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwOTpcXHR7IC5iaXRyYXRlID0gU1REX1JBVEVfNV81ICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfNV81IH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTA6XFx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzExICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzExIH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMTE6XFx0eyAuYml0cmF0ZSA9IFNURF9SQVRFXzA2ICAqIDUsIC5od192YWx1ZSA9IFJTSV9SQVRFXzYgfSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMjpcXHR7IC5iaXRyYXRlID0gU1REX1JBVEVfMDkgICogNSwgLmh3X3ZhbHVlID0gUlNJX1JBVEVfOSB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEzOlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8xMiAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xMiB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE0OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8xOCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8xOCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE1OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8yNCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8yNCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE2OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV8zNiAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV8zNiB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE3OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV80OCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV80OCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTE4OlxcdHsgLmJpdHJhdGUgPSBTVERfUkFURV81NCAgKiA1LCAuaHdfdmFsdWUgPSBSU0lfUkFURV81NCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTE5LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEyMT1jb25zdCB1MTYgcnNpX21jc3JhdGVzWzhdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTIyOlxcdFJTSV9SQVRFX01DUzAsIFJTSV9SQVRFX01DUzEsIFJTSV9SQVRFX01DUzIsIFJTSV9SQVRFX01DUzMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMjM6XFx0UlNJX1JBVEVfTUNTNCwgUlNJX1JBVEVfTUNTNSwgUlNJX1JBVEVfTUNTNiwgUlNJX1JBVEVfTUNTN1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTI0LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTIzMz1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9od19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0yNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoyNDc6XFx0aWYgKChjb21tb24tXFx1MDAzZXdvd19mbGFncyBcXHUwMDI2IFJTSV9XT1dfRU5BQkxFRCkgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI0OC1cXHQgICAgc2Nhbl9yZXEtXFx1MDAzZW5fY2hhbm5lbHMgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjYyLVxcdGNvbW1vbi1cXHUwMDNlaHdzY2FuID0gc2Nhbl9yZXE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoyNjM6XFx0aWYgKCFyc2lfc2VuZF9iZ3NjYW5fcGFyYW1zKGNvbW1vbiwgUlNJX1NUQVJUX0JHU0NBTikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI2NC1cXHRcXHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wcm9iZV9yZXEoY29tbW9uLCB2aWYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTI3ND1zdGF0aWMgdm9pZCByc2lfbWFjODAyMTFfY2FuY2VsX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTI4NC1cXHRpZiAoY29tbW9uLVxcdTAwM2ViZ3NjYW5fZW4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjI4NTpcXHRcXHRpZiAoIXJzaV9zZW5kX2Jnc2Nhbl9wYXJhbXMoY29tbW9uLCBSU0lfU1RPUF9CR1NDQU4pKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMjg2LVxcdFxcdFxcdGNvbW1vbi1cXHUwMDNlYmdzY2FuX2VuID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTMwMj12b2lkIHJzaV9tYWM4MDIxMV9kZXRhY2goc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMzIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MzIxOiNpZmRlZiBDT05GSUdfUlNJX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTMyMi1cXHRyc2lfcmVtb3ZlX2RiZ2ZzKGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz00MzM9c3RhdGljIGludCByc2lfbWFwX2ludGZfbW9kZShlbnVtIG5sODAyMTFfaWZ0eXBlIHZpZl90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy00MzYtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDM3OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX1NUQTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQzOC1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDM5OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX0FQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQwLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0MTpcXHRcXHRyZXR1cm4gUlNJX09QTU9ERV9QMlBfQ0xJRU5UO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQyLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ0MzpcXHRcXHRyZXR1cm4gUlNJX09QTU9ERV9QMlBfQ0xJRU5UO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQ0LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDQ1OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX1AyUF9HTztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ0Ni1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDQ3OlxcdFxcdHJldHVybiBSU0lfT1BNT0RFX1VOU1VQUE9SVEVEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDQ4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9NDU5PXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ3Mi1cXHRpbnRmX21vZGUgPSByc2lfbWFwX2ludGZfbW9kZSh2aWYtXFx1MDAzZXR5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6NDczOlxcdGlmIChpbnRmX21vZGUgPT0gUlNJX09QTU9ERV9VTlNVUFBPUlRFRCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtNDc0LVxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4NS1cXHQvKiBHZXQgZnJlZSB2YXAgaW5kZXggKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjQ4NjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTQ4Ny1cXHRcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXZpZnNbaV0gfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9NTMwPXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01NDctXFx0b3Btb2RlID0gcnNpX21hcF9pbnRmX21vZGUodmlmLVxcdTAwM2V0eXBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjU0ODpcXHRpZiAob3Btb2RlID09IFJTSV9PUE1PREVfVU5TVVBQT1JURUQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU0OS1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiT3Btb2RlIGVycm9yIDogJWRcXFxcblxcXCIsIG9wbW9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU1Mi1cXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo1NTM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy01NTQtXFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2V2aWZzW2ldKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz01NzQ9c3RhdGljIGludCByc2lfY2hhbm5lbF9jaGFuZ2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjU5MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTU5MS1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz02NjQ9c3RhdGljIGludCByc2lfbWFjODAyMTFfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo2OTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy02OTItXFx0XFx0XFx0dmlmID0gYWRhcHRlci1cXHUwMDNldmlmc1tpXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9Nzg2PXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy04MDgtXFx0XFx0cnNpX2luZm9ybV9ic3Nfc3RhdHVzKGNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjgwOTpcXHRcXHRcXHRcXHQgICAgICBSU0lfT1BNT0RFX1NUQSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTgxMC1cXHRcXHRcXHRcXHQgICAgICB2aWYtXFx1MDAzZWNmZy5hc3NvYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6ODQ3OlxcdFxcdFxcdFxcdHJzaV9zZXRfdmFwX2NhcGFiaWxpdGllcyhjb21tb24sIFJTSV9PUE1PREVfQVAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy04NDgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHZpZi1cXHUwMDNlYWRkciwgdmlmX2luZm8tXFx1MDAzZXZhcF9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9ODgwPXN0YXRpYyB2b2lkIHJzaV9tYWM4MDIxMV9jb25mX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtODg1LVxcdC8qIE5vdCBkb2luZyBtdWNoIGhlcmUgYXMgb2Ygbm93ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo4ODY6XFx0KnRvdGFsX2ZsYWdzIFxcdTAwMjY9IFJTSV9TVVBQX0ZJTFRFUlM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy04ODctfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05NjE9c3RhdGljIGludCByc2lfaGFsX2tleV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Mi1cXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjk3MzpcXHRcXHRrZXlfdHlwZSA9IFJTSV9QQUlSV0lTRV9LRVk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy05NzQtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTc1OlxcdFxcdGtleV90eXBlID0gUlNJX0dST1VQX0tFWTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LVxcdTAwM2VrZXlsZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzo5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfUEFJUldJU0VfS0VZLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LVxcdTAwM2VrZXlpZHgsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEwOTE9c3RhdGljIGludCByc2lfbWFjODAyMTFfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMTA3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTEwODpcXHRmb3IgKGlpID0gMDsgaWkgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGlpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMDktXFx0XFx0aWYgKHZpZiA9PSBhZGFwdGVyLVxcdTAwM2V2aWZzW2lpXSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTExMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjExMTM6XFx0aWYgKGlpIFxcdTAwM2U9IFJTSV9NQVhfVklGUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTExMTQtXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTMwOT1zdGF0aWMgdm9pZCByc2lfZmlsbF9yeF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEzNTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMzUzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTM1NC1cXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNDA3PXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0NzAtXFx0XFx0XFx0cnNpX2RiZyhJTkZPX1pPTkUsIFxcXCJJbmRpY2F0ZSBic3Mgc3RhdHVzIHRvIGRldmljZVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNDcxOlxcdFxcdFxcdHJzaV9pbmZvcm1fYnNzX3N0YXR1cyhjb21tb24sIFJTSV9PUE1PREVfQVAsIDEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDcyLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0YS1cXHUwMDNlYWRkciwgc3RhLVxcdTAwM2V3bWUsIHN0YS1cXHUwMDNlYWlkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBrZXktXFx1MDAzZWtleWxlbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE0ODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFJTSV9QQUlSV0lTRV9LRVksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNDg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBrZXktXFx1MDAzZWtleWlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTUyMz1zdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNTQ3LVxcdFxcdFxcdGlmICghbWVtY21wKHJzdGEtXFx1MDAzZXN0YS1cXHUwMDNlYWRkciwgc3RhLVxcdTAwM2VhZGRyLCBFVEhfQUxFTikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE1NDg6XFx0XFx0XFx0XFx0cnNpX2luZm9ybV9ic3Nfc3RhdHVzKGNvbW1vbiwgUlNJX09QTU9ERV9BUCwgMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE1NDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhLVxcdTAwM2VhZGRyLCBzdGEtXFx1MDAzZXdtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTY2NT1zdGF0aWMgaW50IHJzaV9tYXBfcmVnaW9uX2NvZGUoZW51bSBubDgwMjExX2Rmc19yZWdpb25zIHJlZ2lvbl9jb2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjY4LVxcdGNhc2UgTkw4MDIxMV9ERlNfRkNDOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTY2OTpcXHRcXHRyZXR1cm4gUlNJX1JFR0lPTl9GQ0M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjcwLVxcdGNhc2UgTkw4MDIxMV9ERlNfRVRTSTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2NzE6XFx0XFx0cmV0dXJuIFJTSV9SRUdJT05fRVRTSTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE2NzItXFx0Y2FzZSBOTDgwMjExX0RGU19KUDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE2NzM6XFx0XFx0cmV0dXJuIFJTSV9SRUdJT05fVEVMRUM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNjc0LVxcdGNhc2UgTkw4MDIxMV9ERlNfVU5TRVQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNjc1OlxcdFxcdHJldHVybiBSU0lfUkVHSU9OX1dPUkxEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3Ni1cXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNjc3OlxcdHJldHVybiBSU0lfUkVHSU9OX1dPUkxEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTY3OC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE3Mjk9c3RhdGljIHZvaWQgcnNpX3Jlc3VtZV9jb25uX2NoYW5uZWwoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTczNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE3MzU6XFx0Zm9yIChjbnQgPSAwOyBjbnQgXFx1MDAzYyBSU0lfTUFYX1ZJRlM7IGNudCsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xNzM2LVxcdFxcdHZpZiA9IGFkYXB0ZXItXFx1MDAzZXZpZnNbY250XTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MTg0OT1zdGF0aWMgdTE2IHJzaV93b3dfbWFwX3RyaWdnZXJzKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4NTYtXFx0aWYgKHdvd2xhbi1cXHUwMDNlYW55KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg1NzpcXHRcXHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19BTlk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODU4LVxcdGlmICh3b3dsYW4tXFx1MDAzZW1hZ2ljX3BrdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4NTk6XFx0XFx0d293X3RyaWdnZXJzIHw9IFJTSV9XT1dfTUFHSUNfUEtUO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg2MC1cXHRpZiAod293bGFuLVxcdTAwM2VkaXNjb25uZWN0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg2MTpcXHRcXHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19ESVNDT05ORUNUO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg2Mi1cXHRpZiAod293bGFuLVxcdTAwM2VndGtfcmVrZXlfZmFpbHVyZSB8fCB3b3dsYW4tXFx1MDAzZWVhcF9pZGVudGl0eV9yZXEgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4NjMtXFx0ICAgIHdvd2xhbi1cXHUwMDNlZm91cl93YXlfaGFuZHNoYWtlKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTg2NDpcXHRcXHR3b3dfdHJpZ2dlcnMgfD0gUlNJX1dPV19HVEtfUkVLRVk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xODY1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xODY5PWludCByc2lfY29uZmlnX3dvd2xhbihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4ODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxODg2OlxcdGNvbW1vbi1cXHUwMDNld293X2ZsYWdzIHw9IFJTSV9XT1dfRU5BQkxFRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4ODctXFx0dHJpZ2dlcnMgPSByc2lfd293X21hcF90cmlnZ2Vycyhjb21tb24sIHdvd2xhbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE4OTQtXFx0XFx0XFx0XFxcIkNhbm5vdCBjb25maWd1cmUgV29XTEFOIChTdGF0aW9uIG5vdCBjb25uZWN0ZWQpXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE4OTU6XFx0XFx0Y29tbW9uLVxcdTAwM2V3b3dfZmxhZ3MgfD0gUlNJX1dPV19OT19DT05ORUNUSU9OO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTg5Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9MjAwNz1pbnQgcnNpX21hYzgwMjExX2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0MzoyOS40NTA5ODI5MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4NjY3MzI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQmVhY29uIFByZXBhcmF0aW9uIENhbGwgU3RhY2sgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgYHJzaV9wcmVwYXJlX2JlYWNvbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgbW92ZSBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSDigJMgd2hvJ3MgaW52b2tpbmcgdGhpcyB0aGluZywgYW5kIHdoZXJlIGFyZSB0aG9zZSBjYWxscyBvcmlnaW5hdGluZyBmcm9tPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uJ3MgdXNhZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UsIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycywgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHJzaV9wcmVwYXJlX2JlYWNvbmAgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYmVhY29uIHByZXBhcmF0aW9uIG9yIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlcGVuZGVuY2llcy4gTGV0J3Mgc3RhcnQgdGhlIGh1bnQgYW5kIGdldCBhIGNsZWFyIG1hcCBvZiB0aGVzZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Mzo1MC4yMzc2NTg4OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTk3NjkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfcHJlcGFyZV9iZWFjb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM9Mzg4PWludCByc2lfc2VuZF9idF9wa3Qoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYzo0MjU6aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jLTQyNi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM9MTc2Mz1zdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzYtXFx0XFx0c2tiX3B1bGwoc2tiLCAoNjQgLSBkd29yZF9hbGlnbl9ieXRlcykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoxNzc3OlxcdGlmIChyc2lfcHJlcGFyZV9iZWFjb24oY29tbW9uLCBza2IpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTE3NzgtXFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIkZhaWxlZCB0byBwcmVwYXJlIGJlYWNvblxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oPTIyNT1pbnQgcnNpX3ByZXBhcmVfZGF0YV9kZXNjKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmg6MjI2OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaC0yMjctaW50IHJzaV9zZW5kX3BrdF90b19idXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQzOjUxLjc1NzY0NDM4MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMjM3MzI4NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcnNpX3NlbmRfYmVhY29uYCBGdW5jdGlvbiBDYWxsIGFuZCBEcml2ZXIgT3BlcmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGByc2lfc2VuZF9iZWFjb25gIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBzdGFydCBpbiBgcnNpXzkxeF9tZ210LmNgLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDE3NjMsIGFzc3VtaW5nIHRoYXQncyB3aGVyZSB0aGUgY29yZSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgbWlnaHQgcmVzaWRlLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBiZWFjb24gdHJhbnNtaXNzaW9uIGxvZ2ljLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwgYW5kIGhvdyB0aGUgZHJpdmVyIG9yY2hlc3RyYXRlcyB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGJlYWNvbidzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NDowMS45OTQ5NzU0NDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xcbjE3NjE6XFx0fVxcbjE3NjI6XFx0XFxuMTc2MzpcXHRzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbjE3NjQ6XFx0e1xcbjE3NjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuMTc2NjpcXHRcXHR1OCBkd29yZF9hbGlnbl9ieXRlcyA9IDA7XFxuMTc2NzpcXHRcXG4xNzY4OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IoTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3Njk6XFx0XFx0aWYgKCFza2IpXFxuMTc3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNzcxOlxcdFxcbjE3NzI6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHRkd29yZF9hbGlnbl9ieXRlcyA9ICgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEgXFx1MDAyNiAweDNmKTtcXG4xNzc1OlxcdFxcdGlmIChkd29yZF9hbGlnbl9ieXRlcylcXG4xNzc2OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcXG4xNzc3OlxcdFxcdGlmIChyc2lfcHJlcGFyZV9iZWFjb24oY29tbW9uLCBza2IpKSB7XFxuMTc3ODpcXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgYmVhY29uXFxcXG5cXFwiKTtcXG4xNzc5OlxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4xNzgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3ODE6XFx0XFx0fVxcbjE3ODI6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmNvbW1vbi1cXHUwMDNldHhfcXVldWVbTUdNVF9CRUFDT05fUV0sIHNrYik7XFxuMTc4MzpcXHRcXHRyc2lfc2V0X2V2ZW50KFxcdTAwMjZjb21tb24tXFx1MDAzZXR4X3RocmVhZC5ldmVudCk7XFxuMTc4NDpcXHRcXHRyc2lfZGJnKERBVEFfVFhfWk9ORSwgXFxcIiVzOiBBZGRlZCB0byBiZWFjb24gcXVldWVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFx0cmV0dXJuIDA7XFxuMTc4NzpcXHR9XFxuMTc4ODpcXHRcXG4xNzg5OlxcdCNpZmRlZiBDT05GSUdfUE1cXG4xNzkwOlxcdGludCByc2lfc2VuZF93b3dsYW5fcmVxdWVzdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1MTYgZmxhZ3MsXFxuMTc5MTpcXHRcXHRcXHRcXHQgICAgdTE2IHNsZWVwX3N0YXR1cylcXG4xNzkyOlxcdHtcXG4xNzkzOlxcdFxcdHN0cnVjdCByc2lfd293bGFuX3JlcSAqY21kX2ZyYW1lO1xcbjE3OTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNzk1OlxcdFxcdHU4IGxlbmd0aDtcXG4xNzk2OlxcdFxcbjE3OTc6XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBTZW5kaW5nIHdvd2xhbiByZXF1ZXN0IGZyYW1lXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdGxlbmd0aCA9IHNpemVvZigqY21kX2ZyYW1lKTtcXG4xODAwOlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoKTtcXG4xODAxOlxcdFxcdGlmICghc2tiKVxcbjE4MDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTgwMzpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VkYXRhLCAwLCBsZW5ndGgpO1xcbjE4MDQ6XFx0XFx0Y21kX2ZyYW1lID0gKHN0cnVjdCByc2lfd293bGFuX3JlcSAqKXNrYi1cXHUwMDNlZGF0YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDQ6MDEuOTk1MTE3NjY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg4MDIxMDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGByc2lfc2VuZF9iZWFjb25gIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgaGllcmFyY2h5IGZvciBgcnNpX3NlbmRfYmVhY29uYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IGNvbnRleHRzIGFuZCBkYXRhIGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSdtIGV4cGVjdGluZyB0byBzZWUgbXVsdGlwbGUgdXNlcywgYW5kIEknbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgaW4gdGhvc2UgY2FsbHMg4oCTIGFyZSB0aGV5IGNsdXN0ZXJlZCBhcm91bmQgc3BlY2lmaWMgbW9kdWxlcywgZGV2aWNlIGRyaXZlcnMsIG9yIGhpZ2hlci1sZXZlbCBmdW5jdGlvbmFsaXRpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciB3aGVyZSB0aGlzIGJlYWNvbiB0cmFuc21pc3Npb24gaXMgb2NjdXJyaW5nPyBXaGF0IHNvcnQgb2YgZGF0YSBpcyBsaWtlbHkgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBpbiBlYWNoIG9mIHRoZSBwbGFjZXMgdGhhdCBjYWxscyBpdD8gQW5kIGZpbmFsbHksIHdoYXQncyBpdHMgcm9sZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ0OjExLjg3NTMzMDYwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2ODY0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX3NlbmRfYmVhY29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM9MTczOD1pbnQgcnNpX3NldF9hbnRlbm5hKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4IGFudGVubmEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtMTc2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6MTc2MzpzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz0yMTg1PWludCByc2lfbWdtdF9wa3RfcmVjdihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTIyMjQtXFx0XFx0XFx0cmV0dXJuIC0xO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzoyMjI1OlxcdFxcdHJzaV9zZW5kX2JlYWNvbihjb21tb24pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0yMjI2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NDoxMS45MjIwMjQwMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMTcwNDU1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHJzaV9yc2lfOTF4X2hhbC5jYCBhbmQgYHJzaV9wcmVwYXJlX2JlYWNvbmAqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIHJhZGlvIGNvbmZpZ3VyYXRpb24gaGVyZSwgc28gbGV0J3Mgc3RhcnQgd2l0aCBgcnNpX3JzaV85MXhfaGFsLmNgLiBUaGUgcHJvYmxlbSBzdWdnZXN0cyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUgYW5kIEkgaGF2ZSB0byB0cmFjZSBiYWNrIHRoZSBiZWFjb24gcHJlcGVyYXRpb24gdG8gZmlndXJlIG91dCBob3cgcmFkaW8gY29uZmlndXJhdGlvbiBtYXkgYmUgZ29pbmcgYXdyeS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgcnNpX3ByZXBhcmVfYmVhY29uYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCB3aGVyZSB0aGUgYmVhY29uIGZyYW1lIGlzIGFzc2VtYmxlZCBiZWZvcmUgYmVpbmcgdHJhbnNtaXR0ZWQsIG1ha2luZyBpdCB0aGUgcGVyZmVjdCBzdGFydGluZyBwb2ludCB0byBkaWFnbm9zZSBhbnkgY29uZmlndXJhdGlvbiBlcnJvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGZpbmFsIGJlYWNvbiBjb250ZW50LiBGcm9tIHRoZXJlIEknbGwgaGF2ZSBhIGJldHRlciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDQ6MzkuOTM5MDcxNTgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MjY6XFx0e1xcbiA0Mjc6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cXHUwMDNlcHJpdjtcXG4gNDI4OlxcdFxcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xcbiA0Mjk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXFx1MDAzZXByaXYtXFx1MDAzZWh3O1xcbiA0MzA6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gXFx1MDAyNmh3LVxcdTAwM2Vjb25mO1xcbiA0MzE6XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjtcXG4gNDMyOlxcdFxcdHN0cnVjdCBza19idWZmICptYWNfYmNuO1xcbiA0MzM6XFx0XFx0dTggdmFwX2lkID0gMCwgaTtcXG4gNDM0OlxcdFxcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcXG4gNDM1OlxcdFxcdHUxNiB0aW1fb2Zmc2V0ID0gMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuIDQzODpcXHRcXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbiA0Mzk6XFx0XFx0XFx0aWYgKCF2aWYpXFxuIDQ0MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDQxOlxcdFxcdFxcdGlmICgodmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxcbiA0NDI6XFx0XFx0XFx0ICAgICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSlcXG4gNDQzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFx0aWYgKCF2aWYpXFxuIDQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdG1hY19iY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYWRhcHRlci1cXHUwMDNlaHcsXFxuIDQ0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICB2aWYsXFxuIDQ0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XFxuIDQ1MDpcXHRcXHRpZiAoIW1hY19iY24pIHtcXG4gNDUxOlxcdFxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsIFxcXCJGYWlsZWQgdG8gZ2V0IGJlYWNvbiBmcm9tIG1hYzgwMjExXFxcXG5cXFwiKTtcXG4gNDUyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTM6XFx0XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRjb21tb24tXFx1MDAzZWJlYWNvbl9jbnQrKztcXG4gNDU2OlxcdFxcdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXFx1MDAzZWRhdGE7XFxuIDQ1NzpcXHRcXHRyc2lfc2V0X2xlbl9xbm8oXFx1MDAyNmJjbl9mcm0tXFx1MDAzZWxlbl9xbm8sIG1hY19iY24tXFx1MDAzZWxlbiwgUlNJX1dJRklfREFUQV9RKTtcXG4gNDU4OlxcdFxcdGJjbl9mcm0tXFx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XFxuIDQ1OTpcXHRcXHRiY25fZnJtLVxcdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxcbiA0NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX05PX0FDS19JTkQgfFxcbiA0NjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1NFUV9OTyB8XFxuIDQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgIFJBVEVfSU5GT19FTkFCTEUpO1xcbiA0NjU6XFx0XFx0YmNuX2ZybS1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYodmFwX2lkIFxcdTAwM2NcXHUwMDNjIDE0KTtcXG4gNDY2OlxcdFxcdGJjbl9mcm0tXFx1MDAzZXFpZF90aWQgPSBCRUFDT05fSFdfUTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XFxuIDQ2OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSk7XFxuIDQ3MDpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyB8PSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUgXFx1MDAzZVxcdTAwM2UgMTIpO1xcbiA0NzE6XFx0XFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcXG4gNDcyOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvID0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFKTtcXG4gNDczOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSBcXHUwMDNlXFx1MDAzZSAxMik7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGlmIChjb21tb24tXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXFxuIDQ3NzpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuIDQ3ODpcXHRcXHRlbHNlXFxuIDQ3OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdGlmIChtYWNfYmNuLVxcdTAwM2VkYXRhW3RpbV9vZmZzZXQgKyAyXSA9PSAwKVxcbiA0ODI6XFx0XFx0XFx0YmNuX2ZybS1cXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcXG4gNDg1OlxcdFxcdGlmICh0YWlscm9vbSBcXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcXG4gNDg2OlxcdFxcdCAgICBtYWNfYmNuLVxcdTAwM2VsZW4gXFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcXG4gNDg3OlxcdFxcdFxcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRtZW1jcHkoXFx1MDAyNnNrYi1cXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cXHUwMDNlZGF0YSwgbWFjX2Jjbi1cXHUwMDNlbGVuKTtcXG4gNDkyOlxcdFxcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVxcdTAwM2VsZW4gKyBGUkFNRV9ERVNDX1NaKTtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0ZGV2X2tmcmVlX3NrYihtYWNfYmNuKTtcXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHR9XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdHN0YXRpYyB2b2lkIGJsX2NtZF90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiA1MDA6XFx0e1xcbiA1MDE6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHRhZGFwdGVyLVxcdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcXG4gNTA0OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlYmxfY21kX3RpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDQ6MzkuOTM5MTk0OTEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzOTc3NDc1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBSU0kgQnVzIFR5cGUgRW11bGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIHN1cHBvcnRlZCBidXMgdHlwZXMgZm9yIHRoZSBgcnNpYCBkcml2ZXIuIEFoLCBgUlNJX1NESU9gIGFuZCBgUlNJX1VTQmAsIGdvdCBpdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBlZmZlY3RpdmVseSBlbXVsYXRlIG9yIGZ1enogdGhlIGBSU0lfVVNCYCBpbnRlcmZhY2Ugd2l0aGluIG91ciBRRU1VL1N5emthbGxlciBlbnZpcm9ubWVudC4gQ2FuIHdlIGxldmVyYWdlIHRoZSBVU0IgcmF3IGdhZGdldCBmdW5jdGlvbmFsaXR5IG9yIHNvbWUgZm9ybSBvZiBVU0IgZW11bGF0aW9uPyBUaGF0J3MgdGhlIGtleSB0byBtYWtpbmcgcHJvZ3Jlc3MgaGVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jYCBzb3VyY2UgZmlsZS4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBVU0IgaW50ZXJmYWNlLiBUaGF0J3Mgd2hlcmUgdGhlIGFuc3dlcnMgYXJlIGxpa2VseSBoaWRkZW4uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBVU0IgY29tbXVuaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NDo0NS4zMzY5NDUyMjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKlxcbiAgIDI6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE0IFJlZHBpbmUgU2lnbmFscyBJbmMuXFxuICAgMzpcXHQgKlxcbiAgIDQ6XFx0ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XFxuICAgNTpcXHQgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXFxuICAgNjpcXHQgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcXFwiQVMgSVNcXFwiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFU1xcbiAgIDk6XFx0ICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxcbiAgMTA6XFx0ICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1JcXG4gIDExOlxcdCAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVNcXG4gIDEyOlxcdCAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTlxcbiAgMTM6XFx0ICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0ZcXG4gIDE0OlxcdCAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXFxuICAxNTpcXHQgKlxcbiAgMTY6XFx0ICovXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9yc2lfOTF4LmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwicnNpX3VzYi5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcInJzaV9oYWwuaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJyc2lfY29leC5oXFxcIlxcbiAgMjQ6XFx0XFxuICAyNTpcXHQvKiBEZWZhdWx0IG9wZXJhdGluZyBtb2RlIGlzIHdsYW4gU1RBICsgQlQgKi9cXG4gIDI2OlxcdHN0YXRpYyB1MTYgZGV2X29wZXJfbW9kZSA9IERFVl9PUE1PREVfU1RBX0JUX0RVQUw7XFxuICAyNzpcXHRtb2R1bGVfcGFyYW0oZGV2X29wZXJfbW9kZSwgdXNob3J0LCAwNDQ0KTtcXG4gIDI4OlxcdE1PRFVMRV9QQVJNX0RFU0MoZGV2X29wZXJfbW9kZSwgREVWX09QTU9ERV9QQVJBTV9ERVNDKTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RhdGljIGludCByc2lfcnhfdXJiX3N1Ym1pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBlcF9udW0sIGdmcF90IGZsYWdzKTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0LyoqXFxuICAzMzpcXHQgKiByc2lfdXNiX2NhcmRfd3JpdGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIHRoZSBVU0IgQ2FyZC5cXG4gIDM0OlxcdCAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cXG4gIDM1OlxcdCAqIEBidWY6IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBmcm9tIHdoZXJlIHRoZSBkYXRhIGhhcyB0byBiZSB0YWtlbi5cXG4gIDM2OlxcdCAqIEBsZW46IExlbmd0aCB0byBiZSB3cml0dGVuLlxcbiAgMzc6XFx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxcbiAgMzg6XFx0ICpcXG4gIDM5OlxcdCAqIFJldHVybjogc3RhdHVzOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgNDA6XFx0ICovXFxuICA0MTpcXHRzdGF0aWMgaW50IHJzaV91c2JfY2FyZF93cml0ZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxcbiAgNDI6XFx0XFx0XFx0XFx0ICAgICAgdTggKmJ1ZixcXG4gIDQzOlxcdFxcdFxcdFxcdCAgICAgIHUxNiBsZW4sXFxuICA0NDpcXHRcXHRcXHRcXHQgICAgICB1OCBlbmRwb2ludClcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHN0cnVjdCByc2lfOTF4X3VzYmRldiAqZGV2ID0gYWRhcHRlci1cXHUwMDNlcnNpX2RldjtcXG4gIDQ3OlxcdFxcdGludCBzdGF0dXM7XFxuICA0ODpcXHRcXHR1OCAqc2VnID0gZGV2LVxcdTAwM2V0eF9idWZmZXI7XFxuICA0OTpcXHRcXHRpbnQgdHJhbnNmZXI7XFxuICA1MDpcXHRcXHRpbnQgZXAgPSBkZXYtXFx1MDAzZWJ1bGtvdXRfZW5kcG9pbnRfYWRkcltlbmRwb2ludCAtIDFdO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRtZW1zZXQoc2VnLCAwLCBsZW4gKyBSU0lfVVNCX1RYX0hFQURfUk9PTSk7XFxuICA1MzpcXHRcXHRtZW1jcHkoc2VnICsgUlNJX1VTQl9UWF9IRUFEX1JPT00sIGJ1ZiwgbGVuKTtcXG4gIDU0OlxcdFxcdGxlbiArPSBSU0lfVVNCX1RYX0hFQURfUk9PTTtcXG4gIDU1OlxcdFxcdHRyYW5zZmVyID0gbGVuO1xcbiAgNTY6XFx0XFx0c3RhdHVzID0gdXNiX2J1bGtfbXNnKGRldi1cXHUwMDNldXNiZGV2LFxcbiAgNTc6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3NuZGJ1bGtwaXBlKGRldi1cXHUwMDNldXNiZGV2LCBlcCksXFxuICA1ODpcXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKXNlZyxcXG4gIDU5OlxcdFxcdFxcdFxcdCAgICAgIChpbnQpbGVuLFxcbiAgNjA6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRyYW5zZmVyLFxcbiAgNjE6XFx0XFx0XFx0XFx0ICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiAgNjQ6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSxcXG4gIDY1OlxcdFxcdFxcdFxcdFxcXCJDYXJkIHdyaXRlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgOiUxMGRcXFxcblxcXCIsIHN0YXR1cyk7XFxuICA2NjpcXHRcXHRcXHRkZXYtXFx1MDAzZXdyaXRlX2ZhaWwgPSAxO1xcbiAgNjc6XFx0XFx0fVxcbiAgNjg6XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0LyoqXFxuICA3MjpcXHQgKiByc2lfd3JpdGVfbXVsdGlwbGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG11bHRpcGxlIGJ5dGVzIG9mIGluZm9ybWF0aW9uXFxuICA3MzpcXHQgKlxcdFxcdFxcdCAgdG8gdGhlIFVTQiBjYXJkLlxcbiAgNzQ6XFx0ICogQGFkYXB0ZXI6IFBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLlxcbiAgNzU6XFx0ICogQGVuZHBvaW50OiBUeXBlIG9mIGVuZHBvaW50LlxcbiAgNzY6XFx0ICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGRhdGEgdGhhdCBoYXMgdG8gYmUgd3JpdHRlbi5cXG4gIDc3OlxcdCAqIEBjb3VudDogTnVtYmVyIG9mIG11bHRpcGxlIGJ5dGVzIHRvIGJlIHdyaXR0ZW4uXFxuICA3ODpcXHQgKlxcbiAgNzk6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgODA6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ0OjQ1LjMzNzAzODcxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc3Mjc4OTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhhdCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgcnNpX3Byb2JlYCBJbXBsZW1lbnRhdGlvbiBpbiBVU0IqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYHJzaV9wcm9iZWAgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFVTQiBwcm90b2NvbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBzcGVjaWZpYyB1c2UgY2FzZXMgZHJpdmluZyB0aGUgbmVlZCBmb3IgdGhpcyBwcm9iZT8gSXMgaXQgYWJvdXQgaW5pdGlhbCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIGNhcGFiaWxpdHkgbmVnb3RpYXRpb24sIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGlzIGNydWNpYWwgdG8gdW5wYWNraW5nIHRoZSAqaG93Ki5cblxuSSdtIG1lbnRhbGx5IHNpZnRpbmcgdGhyb3VnaCBteSBrbm93bGVkZ2Ugb2YgVVNCIGRldmljZSBlbnVtZXJhdGlvbi4gSSdtIGFzc3VtaW5nIGl0IGludm9sdmVzIHRoZSBzdGFuZGFyZCBVU0IgZGVzY3JpcHRvcnMg4oCTIGRldmljZSwgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlLCBlbmRwb2ludCDigJMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIGR1cmluZyBpbml0aWFsIHNldHVwLiBJIGJldCBgcnNpX3Byb2JlYCBpcyBpbnRyaWNhdGVseSBsaW5rZWQgdG8gaG93IHRoZSBob3N0IGludGVyYWN0cyB3aXRoIHRob3NlIGRlc2NyaXB0b3JzIHRvIGdhdGhlciByZWxldmFudCBpbmZvcm1hdGlvbi4gUGVyaGFwcyBpdCdzIGEgc3BlY2lmaWMgdmVuZG9yLWRlZmluZWQgY29tbWFuZCwgbGV2ZXJhZ2luZyBhIGNvbnRyb2wgdHJhbnNmZXIsIHRvIGVsaWNpdCBhIHBhcnRpY3VsYXIgc2V0IG9mIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgYmV5b25kIHRoZSBzdGFuZGFyZCBkZXNjcmlwdG9ycz8gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIHRoYXQuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBsYXllcnMgaW52b2x2ZWQuIElzIHRoaXMgYSBwcm90b2NvbC1sZXZlbCBtZWNoYW5pc20sIGhhbmRsZWQgYnkgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgYW5kIGRldmljZSBmaXJtd2FyZT8gT3IgZG9lcyBpdCByZXNpZGUgaGlnaGVyIHVwLCBwZXJoYXBzIGluIHRoZSBkZXZpY2UgZHJpdmVyPyBJIHN1c3BlY3QgaXQncyBhIG1vcmUgaW50ZWdyYXRlZCBhcHByb2FjaCwgbGlrZWx5IGludm9sdmluZyBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgY3JpdGljYWwgaGFuZG9mZnMgYW5kIG1lc3NhZ2UgZXhjaGFuZ2VzIG9jY3VyLlxuXG5VbHRpbWF0ZWx5LCBJIGV4cGVjdCBgcnNpX3Byb2JlYCBpcyBhIGNsZXZlciBkYW5jZSBvZiBzaWduYWxpbmcgYW5kIGRhdGEgZXhjaGFuZ2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgc2VxdWVuY2UsIHN0YXJ0aW5nIGZyb20gdGhlIGhvc3QncyByZXF1ZXN0LCB0aHJvdWdoIGFueSBkZXZpY2Utc2lkZSBwcm9jZXNzaW5nLCBhbmQgYmFjayB0byB0aGUgaG9zdCB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24uIE5vdywgbGV0J3Mgc2VlIHdoZXJlIHRvIGJlZ2luIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDQ5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTowNy4xMDk4MzAwMTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHRcXG4gNzAxOlxcdFxcdG1zbGVlcCgyMCk7XFxuIDcwMjpcXHRcXG4gNzAzOlxcdFxcdHJldHVybiAwO1xcbiA3MDQ6XFx0fVxcbiA3MDU6XFx0XFxuIDcwNjpcXHRzdGF0aWMgaW50IHJzaV9yZXNldF9jYXJkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuIDcwNzpcXHR7XFxuIDcwODpcXHRcXHRpbnQgcmV0O1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRyc2lfZGJnKElORk9fWk9ORSwgXFxcIlJlc2V0dGluZyBDYXJkLi4uXFxcXG5cXFwiKTtcXG4gNzExOlxcdFxcdHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBSU0lfVEFfSE9MRF9SRUcsIDB4RSwgNCk7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdC8qIFRoaXMgbXNsZWVwIHdpbGwgZW5zdXJlIFRocmVhZC1BcmNoIHByb2Nlc3NvciB0byBnbyB0byBob2xkXFxuIDcxNDpcXHRcXHQgKiBhbmQgYW55IHBlbmRpbmcgZG1hIHRyYW5zZmVycyB0byByZiBpbiBkZXZpY2UgdG8gZmluaXNoLlxcbiA3MTU6XFx0XFx0ICovXFxuIDcxNjpcXHRcXHRtc2xlZXAoMTAwKTtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFNXQkxfUkVHT1VULFxcbiA3MTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFJTSV9GV19XRFRfRElTQUJMRV9SRVEsXFxuIDcyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgUlNJX0NPTU1PTl9SRUdfU0laRSk7XFxuIDcyMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA3MjI6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIkRpc2FibGluZyBmaXJtd2FyZSB3YXRjaGRvZyB0aW1lciBmYWlsZWRcXFxcblxcXCIpO1xcbiA3MjM6XFx0XFx0XFx0Z290byBmYWlsO1xcbiA3MjQ6XFx0XFx0fVxcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlZGV2aWNlX21vZGVsICE9IFJTSV9ERVZfOTExNikge1xcbiA3Mjc6XFx0XFx0XFx0cmV0ID0gdXNiX3VscF9yZWFkX3dyaXRlKGFkYXB0ZXIsIFJTSV9XQVRDSF9ET0dfVElNRVJfMSxcXG4gNzI4OlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1dSSVRFXzIsIDMyKTtcXG4gNzI5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MzA6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiA3MzE6XFx0XFx0XFx0cmV0ID0gdXNiX3VscF9yZWFkX3dyaXRlKGFkYXB0ZXIsIFJTSV9XQVRDSF9ET0dfVElNRVJfMixcXG4gNzMyOlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1dSSVRFXzAsIDMyKTtcXG4gNzMzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MzQ6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiA3MzU6XFx0XFx0XFx0cmV0ID0gdXNiX3VscF9yZWFkX3dyaXRlKGFkYXB0ZXIsIFJTSV9XQVRDSF9ET0dfREVMQVlfVElNRVJfMSxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1dSSVRFXzUwLCAzMik7XFxuIDczNzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzM4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzM5OlxcdFxcdFxcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX0RFTEFZX1RJTUVSXzIsXFxuIDc0MDpcXHRcXHRcXHRcXHRcXHRcXHQgUlNJX1VMUF9XUklURV8wLCAzMik7XFxuIDc0MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzQyOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzQzOlxcdFxcdFxcdHJldCA9IHVzYl91bHBfcmVhZF93cml0ZShhZGFwdGVyLCBSU0lfV0FUQ0hfRE9HX1RJTUVSX0VOQUJMRSxcXG4gNzQ0OlxcdFxcdFxcdFxcdFxcdFxcdCBSU0lfVUxQX1RJTUVSX0VOQUJMRSwgMzIpO1xcbiA3NDU6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc0NjpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDc0NzpcXHRcXHR9IGVsc2Uge1xcbiA3NDg6XFx0XFx0XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXFxuIDc0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTldQX1dXRF9JTlRFUlJVUFRfVElNRVIsXFxuIDc1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTldQX1dXRF9JTlRfVElNRVJfQ0xLUyxcXG4gNzUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBSU0lfOTExNl9SRUdfU0laRSk7XFxuIDc1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzUzOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzU0OlxcdFxcdFxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxcbiA3NTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5XUF9XV0RfU1lTVEVNX1JFU0VUX1RJTUVSLFxcbiA3NTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5XUF9XV0RfU1lTX1JFU0VUX1RJTUVSX0NMS1MsXFxuIDc1NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xcbiA3NTg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc1OTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDc2MDpcXHRcXHRcXHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcXG4gNzYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOV1BfV1dEX01PREVfQU5EX1JTVEFSVCxcXG4gNzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOV1BfV1dEX1RJTUVSX0RJU0FCTEUsXFxuIDc2MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUlNJXzkxMTZfUkVHX1NJWkUpO1xcbiA3NjQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc2NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDc2NjpcXHRcXHR9XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdHJzaV9kYmcoSU5GT19aT05FLCBcXFwiUmVzZXQgY2FyZCBkb25lXFxcXG5cXFwiKTtcXG4gNzY5OlxcdFxcdHJldHVybiByZXQ7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdGZhaWw6XFxuIDc3MjpcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiUmVzZXQgY2FyZCBmYWlsZWRcXFxcblxcXCIpO1xcbiA3NzM6XFx0XFx0cmV0dXJuIHJldDtcXG4gNzc0OlxcdH1cXG4gNzc1OlxcdFxcbiA3NzY6XFx0LyoqXFxuIDc3NzpcXHQgKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcXG4gNzc4OlxcdCAqXFx0XFx0IFZlbmRvciBhbmQgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZC4gQWxsIHRoZSBpbml0aWFsaXphdGlvblxcbiA3Nzk6XFx0ICpcXHRcXHQgd29yayBpcyBkb25lIGhlcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjA3LjEwOTkzMTk3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIyNDk2MDY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGByc2lfcHJlcGFyZV9iZWFjb25gIGRvZXMgYW5kIHdoYXQncyBjaGFuZ2VkIHdpdGggdGhpcyBwYXRjaC4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuK1x0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcbitcdGlmICh0YWlscm9vbSBcdTAwM2MgRlJBTUVfREVTQ19TWiB8fFxuK1x0ICAgIG1hY19iY24tXHUwMDNlbGVuIFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcbitcdFx0ZGV2X2tmcmVlX3NrYihtYWNfYmNuKTtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdH1cbitcbiBcdG1lbWNweShcdTAwMjZza2ItXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cdTAwM2VkYXRhLCBtYWNfYmNuLVx1MDAzZWxlbik7XG4gXHRza2JfcHV0KHNrYiwgbWFjX2Jjbi1cdTAwM2VsZW4gKyBGUkFNRV9ERVNDX1NaKTtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGJ1ZmZlciBwcmVwYXJhdGlvbiBmb3IgYSBiZWFjb24gZnJhbWUuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgdGFpbHJvb20gY2hlY2suIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgaWYgdGhlIGFsbG9jYXRlZCBgc2tiYCBpbiBgcnNpX3NlbmRfYmVhY29uYCAob3IgZWxzZXdoZXJlKSBkaWRuJ3QgaGF2ZSBlbm91Z2ggdGFpbHJvb20gZm9yIHRoZSBmcmFtZSBkZXNjcmlwdG9yIHNpemUgKGBGUkFNRV9ERVNDX1NaYCkgcGx1cyB0aGUgYmVhY29uIGRhdGEgbGVuZ3RoIChgbWFjX2Jjbi1cdTAwM2VsZW5gKSwgdGhlIGBza2JfcHV0YCBjYWxsIHdvdWxkIHBvdGVudGlhbGx5IHRyaWdnZXIgYSBgQlVHX09OYCBvciB0aGUgYG1lbWNweWAgY291bGQgb3ZlcmZsb3cgdGhlIGBza2ItXHUwMDNlZGF0YWAgYnVmZmVyLiAgQWxzbywgaWYgdGhlIHRhaWxyb29tIGNoZWNrIGZhaWxzLCBgbWFjX2JjbmAgaXMgZnJlZWQgd2hpY2ggaXMgZ29vZCwgYW5kIGl0IHJldHVybnMgYW4gZXJyb3IuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgZXhwbG9pdGFiaWxpdHkuIElzIHRoaXMgZnVuY3Rpb24sIG9yIHRoZSByZWxhdGVkIGByc2lfOTF4YCBkcml2ZXIsIHJlYWNoYWJsZSBhbmQgZnV6emFibGU/ICBgcnNpXzkxeGAgaXMgYSBtYWM4MDIxMSBkcml2ZXIgZm9yIHRoZSBSZWRwaW5lIFNpZ25hbHMgOTExMy85MTE2IGNoaXBzLCBjb3ZlcmluZyBVU0IgYW5kIFNESU8gaW50ZXJmYWNlcy4gIEluIGEgZnV6emluZyBjb250ZXh0IGxpa2UgU3l6a2FsbGVyLCBhIFVTQiBkZXZpY2UgY2FuIGJlIGVtdWxhdGVkIHVzaW5nIHRoZSBVU0IgcmF3IGdhZGdldCAodmhjaS9yYXctZ2FkZ2V0KS5cblxuV2hlbiB0aGUgUlNJIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBhIG1hYzgwMjExIHdpcmVsZXNzIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHZpYSBgcnNpX21hYzgwMjExX2F0dGFjaGAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCB1c2Vyc3BhY2UsIGFuZCBieSBleHRlbnNpb24gU3l6a2FsbGVyLCBjYW4gaW50ZXJhY3QgdXNpbmcgYG5sODAyMTFgIG5ldGxpbmsgY29tbWFuZHMgdG8gY29uZmlndXJlIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UsIGVpdGhlciBhcyBhbiBBUCBvciBhIFAyUF9HTy5cblxuU28sIHdoZW4gYmVhY29uaW5nIGlzIHRyaWdnZXJlZCwgZWl0aGVyIHRocm91Z2ggdGhlIHN0YW5kYXJkIGJlYWNvbiBwcm9jZXNzLCBiZWFjb24gY29uZmlndXJhdGlvbiwgZmlybXdhcmUgYmVhY29uIHJlcXVlc3RzLCBvciBieSB0aGUgbWFjODAyMTEgc3RhY2ssIG9yIGlmIHRoZSBmaXJtd2FyZSBzZW5kcyBhIGJlYWNvbiByZXF1ZXN0IG1hbmFnZW1lbnQgcGFja2V0IChgUlNJX0JFQUNPTl9SRVFVRVNUYCksIGByc2lfbWdtdF9wa3RfcmVjdmAgd2lsbCBiZSBjYWxsZWQsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJzaV9zZW5kX2JlYWNvbmAsIHdoaWNoICpmaW5hbGx5KiBjYWxscyBgcnNpX3ByZXBhcmVfYmVhY29uYC4gVGhpcyBsb29rcyBsaWtlIHRoZSBhdHRhY2sgcGF0aC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGByc2lfbWdtdF9wa3RfcmVjdmAgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY2AgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGlucHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMzgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NToyOC4zMzQ4OTUxOTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTg1OlxcdGludCByc2lfbWdtdF9wa3RfcmVjdihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqbXNnKVxcbjIxODY6XFx0e1xcbjIxODc6XFx0XFx0czMyIG1zZ19sZW4gPSAobGUxNl90b19jcHUoKihfX2xlMTYgKilcXHUwMDI2bXNnWzBdKSBcXHUwMDI2IDB4MGZmZik7XFxuMjE4ODpcXHRcXHR1MTYgbXNnX3R5cGUgPSAobXNnWzJdKTtcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0cnNpX2RiZyhGU01fWk9ORSwgXFxcIiVzOiBNc2cgTGVuOiAlZCwgTXNnIFR5cGU6ICU0eFxcXFxuXFxcIixcXG4yMTkxOlxcdFxcdFxcdF9fZnVuY19fLCBtc2dfbGVuLCBtc2dfdHlwZSk7XFxuMjE5MjpcXHRcXG4yMTkzOlxcdFxcdHN3aXRjaCAobXNnX3R5cGUpIHtcXG4yMTk0OlxcdFxcdGNhc2UgVEFfQ09ORklSTV9UWVBFOlxcbjIxOTU6XFx0XFx0XFx0cmV0dXJuIHJzaV9oYW5kbGVfdGFfY29uZmlybV90eXBlKGNvbW1vbiwgbXNnKTtcXG4yMTk2OlxcdFxcdGNhc2UgQ0FSRF9SRUFEWV9JTkQ6XFxuMjE5NzpcXHRcXHRcXHRjb21tb24tXFx1MDAzZWhpYmVybmF0ZV9yZXN1bWUgPSBmYWxzZTtcXG4yMTk4OlxcdFxcdFxcdHJzaV9kYmcoRlNNX1pPTkUsIFxcXCIlczogQ2FyZCByZWFkeSBpbmRpY2F0aW9uIHJlY2VpdmVkXFxcXG5cXFwiLFxcbjIxOTk6XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbjIyMDA6XFx0XFx0XFx0cmV0dXJuIHJzaV9oYW5kbGVfY2FyZF9yZWFkeShjb21tb24sIG1zZyk7XFxuMjIwMTpcXHRcXHRjYXNlIFRYX1NUQVRVU19JTkQ6XFxuMjIwMjpcXHRcXHRcXHRzd2l0Y2ggKG1zZ1tSU0lfVFhfU1RBVFVTX1RZUEVdKSB7XFxuMjIwMzpcXHRcXHRcXHRjYXNlIFBST0JFUkVRX0NPTkZJUk06XFxuMjIwNDpcXHRcXHRcXHRcXHRjb21tb24tXFx1MDAzZW1nbXRfcV9ibG9jayA9IGZhbHNlO1xcbjIyMDU6XFx0XFx0XFx0XFx0cnNpX2RiZyhGU01fWk9ORSwgXFxcIiVzOiBQcm9iZSBjb25maXJtIHJlY2VpdmVkXFxcXG5cXFwiLFxcbjIyMDY6XFx0XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbjIyMDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjIwODpcXHRcXHRcXHRjYXNlIEVBUE9MNF9DT05GSVJNOlxcbjIyMDk6XFx0XFx0XFx0XFx0aWYgKG1zZ1tSU0lfVFhfU1RBVFVTXSkge1xcbjIyMTA6XFx0XFx0XFx0XFx0XFx0Y29tbW9uLVxcdTAwM2VlYXBvbDRfY29uZmlybSA9IHRydWU7XFxuMjIxMTpcXHRcXHRcXHRcXHRcXHRpZiAoIXJzaV9zZW5kX2Jsb2NrX3VuYmxvY2tfZnJhbWUoY29tbW9uLFxcbjIyMTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSkpXFxuMjIxMzpcXHRcXHRcXHRcXHRcXHRcXHRjb21tb24tXFx1MDAzZWh3X2RhdGFfcXNfYmxvY2tlZCA9IGZhbHNlO1xcbjIyMTQ6XFx0XFx0XFx0XFx0fVxcbjIyMTU6XFx0XFx0XFx0fVxcbjIyMTY6XFx0XFx0XFx0YnJlYWs7XFxuMjIxNzpcXHRcXHRjYXNlIEJFQUNPTl9FVkVOVF9JTkQ6XFxuMjIxODpcXHRcXHRcXHRyc2lfZGJnKElORk9fWk9ORSwgXFxcIkJlYWNvbiBldmVudFxcXFxuXFxcIik7XFxuMjIxOTpcXHRcXHRcXHRpZiAoY29tbW9uLVxcdTAwM2Vmc21fc3RhdGUgIT0gRlNNX01BQ19JTklUX0RPTkUpXFxuMjIyMDpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMjIyMTpcXHRcXHRcXHRpZiAoY29tbW9uLVxcdTAwM2VpZmFjZV9kb3duKVxcbjIyMjI6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjIyMjM6XFx0XFx0XFx0aWYgKCFjb21tb24tXFx1MDAzZWJlYWNvbl9lbmFibGVkKVxcbjIyMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjIyMjU6XFx0XFx0XFx0cnNpX3NlbmRfYmVhY29uKGNvbW1vbik7XFxuMjIyNjpcXHRcXHRcXHRicmVhaztcXG4yMjI3OlxcdFxcdGNhc2UgV09XTEFOX1dBS0VVUF9SRUFTT046XFxuMjIyODpcXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiXFxcXG5cXFxcbldha2V1cCBUeXBlOiAleFxcXFxuXFxcIiwgbXNnWzE1XSk7XFxuMjIyOTpcXHRcXHRcXHRzd2l0Y2ggKG1zZ1sxNV0pIHtcXG4yMjMwOlxcdFxcdFxcdGNhc2UgUlNJX1VOSUNBU1RfTUFHSUNfUEtUOlxcbjIyMzE6XFx0XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSxcXG4yMjMyOlxcdFxcdFxcdFxcdFxcdFxcXCIqKiogV2FrZXVwIGZvciBVbmljYXN0IG1hZ2ljIHBhY2tldCAqKipcXFxcblxcXCIpO1xcbjIyMzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjIzNDpcXHRcXHRcXHRjYXNlIFJTSV9CUk9BRENBU1RfTUFHSUNQS1Q6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjI4LjMzNTAxMTgwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgwMDAzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNoaXBzaGFwZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGRlcGVuZGVuY3kgc2l0dWF0aW9uIGZvciBgcnNpXzkxeF9oYWwuY2AgYW5kIHNwZWNpZmljYWxseSBgcnNpX3ByZXBhcmVfYmVhY29uYC4gR290dGEgbWFrZSBzdXJlIHRoZSBLY29uZmlnIHNldHVwIGlzIGNvcnJlY3Q7IGl0J3MgdGhlIGdhdGVrZWVwZXIgZm9yIHRoZXNlIHRoaW5ncy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBpbmNsdXNpb24gc2hvdWxkIHJlc2lkZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkIGluIEtjb25maWcsIGFuZCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTozMC44MTUwMTc5ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9SU0lcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFJTSV85MVhcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0c2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWFxcbiAgMTg6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFiZXMgc3VwcG9ydCBmb3IgUlNJIDF4MSBkZXZpY2VzLlxcbiAgMjE6XFx0XFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRjb25maWcgUlNJX0RFQlVHRlNcXG4gIDI0OlxcdFxcdGJvb2wgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFxcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUlNJXzkxWFxcbiAgMjY6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgU2F5IFksIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGVuYWJsZSBkZWJ1ZyBzdXBwb3J0LiBUaGlzIG9wdGlvblxcbiAgMjk6XFx0XFx0IGNyZWF0ZXMgZGVidWdmcyBlbnRyaWVzXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBSU0lfU0RJT1xcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBNTUMgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgMzQ6XFx0XFx0ZGVmYXVsdCBtXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXFxuICAzNzpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBSU0lfVVNCXFxuICA0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFxcXCJcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IFJTSV85MVhcXG4gIDQyOlxcdFxcdGRlZmF1bHQgbVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXFxuICA0NTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBSU0lfQ09FWFxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gQlQgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNTA6XFx0XFx0ZGVwZW5kcyBvbiAhKEJUPW0gXFx1MDAyNlxcdTAwMjYgUlNJXzkxWD15KVxcbiAgNTE6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFdMQU4gQlQgY29leCBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxcbiAgNTQ6XFx0XFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSB3YW50IHRvIHVzZSB0aGlzIGZlYXR1cmVcXG4gIDU1OlxcdFxcdCAgYW5kIHlvdSBoYXZlIFJTOTExMyBtb2R1bGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjMwLjgxNTA5NzY1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc5ODcwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgUlNJIFdpcmVsZXNzIERyaXZlciBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIFJTSSB3aXJlbGVzcyBkcml2ZXIgYnVpbGQgcHJvY2Vzcy4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlYC4gVGhpcyBpcyBnZW5lcmFsbHkgd2hlcmUgdGhlIGNvcmUgY29tcGlsYXRpb24gcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHkgdGhlIG9iamVjdCBmaWxlcyBmb3IgdGhpcyBkcml2ZXIgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhpbmdzIGxpa2Ugc291cmNlIGZpbGUgbGlzdHMsIGluY2x1ZGUgcGF0aHMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHByb2JhYmx5IHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgYWRhcHRhdGlvbnMuIEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3ZlIG9yZ2FuaXplZCB0aGUgZHJpdmVyJ3MgYnVpbGQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSBjdXN0b21pemF0aW9uIG9yIHBvdGVudGlhbCBwcm9ibGVtcyBtaWdodCBsaWUuIExldCdzIHNlZSBpZiB0aGlzIE1ha2VmaWxlIHByb3ZpZGVzIHNvbWUgY2xhcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyMTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjM0LjE5NDk3MDg5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRyc2lfOTF4LXlcXHRcXHRcXHQrPSByc2lfOTF4X21haW4ub1xcbiAgIDM6XFx0cnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9jb3JlLm9cXG4gICA0OlxcdHJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfbWFjODAyMTEub1xcbiAgIDU6XFx0cnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9tZ210Lm9cXG4gICA2OlxcdHJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfaGFsLm9cXG4gICA3OlxcdHJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfcHMub1xcbiAgIDg6XFx0cnNpXzkxeC0kKENPTkZJR19SU0lfQ09FWClcXHQrPSByc2lfOTF4X2NvZXgub1xcbiAgIDk6XFx0cnNpXzkxeC0kKENPTkZJR19SU0lfREVCVUdGUylcXHQrPSByc2lfOTF4X2RlYnVnZnMub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRyc2lfdXNiLXlcXHRcXHRcXHQrPSByc2lfOTF4X3VzYi5vIHJzaV85MXhfdXNiX29wcy5vXFxuICAxMjpcXHRyc2lfc2Rpby15XFx0XFx0XFx0Kz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfUlNJXzkxWCkgXFx0XFx0Kz0gcnNpXzkxeC5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfUlNJX1NESU8pXFx0XFx0Kz0gcnNpX3NkaW8ub1xcbiAgMTU6XFx0b2JqLSQoQ09ORklHX1JTSV9VU0IpXFx0XFx0Kz0gcnNpX3VzYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjM0LjE5NTAyNjUxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzYyNzQzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFdMQU5fVkVORE9SX1JTSSBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYFdMQU5fVkVORE9SX1JTSWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGluY2x1ZGVkLiBUaGlzIG1lYW5zIEkgbmVlZCB0byB0cmFjZSBpdHMgb3JpZ2luIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHkuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHBhcmVudCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyBzdGVwIHdoZW4gbmF2aWdhdGluZyB0aGUgY29tcGxleGl0aWVzIG9mIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgb2YgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiB0byBncmFzcCBpdHMgcm9sZSBhbmQgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEhvcGVmdWxseSwgdGhpcyBzaG91bGQgcXVpY2tseSBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBzZWN0aW9ucyBhbmQgdW5jb3ZlciB0aGUgc3BlY2lmaWNzIG9mIGl0cyBkZWZpbml0aW9uIG9yIGluY2x1c2lvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODQyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo0MC41NTc3NzI5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjY4OTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXTEFOX1ZFTkRPUl9SU0lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnPTUzPUNPTkZJR19BVEg1Sz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctNjItIyBDT05GSUdfV0xBTl9WRU5ET1JfUkVBTFRFSyBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnOjYzOiMgQ09ORklHX1dMQU5fVkVORE9SX1JTSSBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnLTY0LSMgQ09ORklHX1dMQU5fVkVORE9SX1NUIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnPTc4PUNPTkZJR19CUkNNRk1BQz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy04Ny0jIENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzo4ODojIENPTkZJR19XTEFOX1ZFTkRPUl9SU0kgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTg5LSMgQ09ORklHX1dMQU5fVkVORE9SX1NJTEFCUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZz0zOD1DT05GSUdfUlRMODE5MkNVPW1cXG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZy0zOS0jIENPTkZJR19SVExXSUZJX0RFQlVHIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9nY3cwX2RlZmNvbmZpZzo0MDojIENPTkZJR19XTEFOX1ZFTkRPUl9SU0kgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2djdzBfZGVmY29uZmlnLTQxLSMgQ09ORklHX1dMQU5fVkVORE9SX1NUIGlzIG5vdCBzZXRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLKSArPSByZWFsdGVrL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SU0kpICs9IHJzaS9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfU0lMQUJTKSArPSBzaWxhYnMvXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUlNJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz00Nz1jb25maWcgUlNJX0NPRVhcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTU2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjU3OmVuZGlmICMgV0xBTl9WRU5ET1JfUlNJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjQyLjE1MDQ3MDExNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTI5MzU2NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB3aXJlbGVzcyBuZXR3b3JraW5nLiBUaGUgZmlyc3QgcGxhY2UgSSdtIGdvaW5nIHRvIGxvb2sgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBkZWZpbmluZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFsbCB0aGUgd2lyZWxlc3MgZHJpdmVycy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBzdHJ1Y3R1cmUgaGVyZTogdG9wLWxldmVsIGNob2ljZXMsIGRlcGVuZGVuY2llcyBiYXNlZCBvbiBoYXJkd2FyZSBvciBmdW5jdGlvbmFsaXR5LCBhbmQgaGVscCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvcHRpb24gYWN0dWFsbHkgZG9lcy4gVGhpcyBmaWxlIGlzIGdvaW5nIHRvIHRlbGwgbWUgd2hhdCB2YXJpYWJsZXMgSSBjYW4gdHdlYWsgdG8gZ2V0IHRoZSB3aXJlbGVzcyBzdGFjayBiZWhhdmluZyBhcyBJIG5lZWQgaXQgdG8uIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGJ1cmllZCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2OTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo0Ni4yNzk4MjkzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODU1NjY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ1OjQ3LjcwODM5MDQ4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTQyMDYxMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVmVyZGljdDogUlNJIFdpcmVsZXNzIERyaXZlciBCZWFjb24gUHJlcGFyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBmaWxlIGNvbnRleHQgYW5kIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYE1BQzgwMjExYCwgYW5kIGBSU0lfVVNCYCBhcmUgdGhlIGtleSBjb25maWdzIGhlcmUuIEkgY29uZmlybWVkIHRoYXQgYHJzaV9wcmVwYXJlX2JlYWNvbmAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBkZWNsYXJlZCBpbiBgcnNpX2hhbC5oYCBhbmQgZGVmaW5lZCBpbiBgcnNpXzkxeF9oYWwuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBub24tc3RhdGljIG1ha2VzIGl0IGEgdmlhYmxlIGVudHJ5IHBvaW50LiBJIGFsc28gbG9va2VkIGF0IGByc2lfc2VuZF9iZWFjb25gLCB3aGljaCAqaXMqIHN0YXRpYywgc28gdGhhdCdzIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIGByc2lfbWdtdF9wa3RfcmVjdmAgaXMgYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cbkFmdGVyIHJldmlld2luZyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkLCBvbmx5IGByc2lfcHJlcGFyZV9iZWFjb25gIHdhcyBtb2RpZmllZC5cblxuQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGByc2lfcHJlcGFyZV9iZWFjb25gIGFuZCBgcnNpX21nbXRfcGt0X3JlY3ZgLiBJIGtub3cgYFJTSV85MVhgIGFuZCBgUlNJX1VTQmAgYXJlIHRyaXN0YXRlLCBhbmQgYFdMQU5fVkVORE9SX1JTSWAgaXMgYSBib29sZWFuIGFuZCBkZWZhdWx0cyB0byAneScuXG5cblNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBmaXggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIGByc2lfcHJlcGFyZV9iZWFjb25gLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBpbXBhY3QuIEFuZCBnaXZlbiBpdCdzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExYCBhbmQgdGhlIFJTSSB3aXJlbGVzcyBVU0IgZHJpdmVyIGVtdWxhdGlvbiwgaXQncyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdGFyZ2V0ZWQgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zIG1lYW5zIHRoZXkncmUgYWNjZXNzaWJsZSBlbnRyeXBvaW50cy4gSXQgYWxsIGNoZWNrcyBvdXQuIFRoaXMgaXMgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTgxLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo1Ni42NTA0NTQxMzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk3MjUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9wcmVwYXJlX2JlYWNvblwiLFxuICAgIFwicnNpX21nbXRfcGt0X3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgdGFpbHJvb20gYm91bmRzIGNoZWNrcyBpbiByc2lfcHJlcGFyZV9iZWFjb24oKSBiZWZvcmUgY29weWluZyBiZWFjb24gZGF0YSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgY3Jhc2guIFRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlciBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKFJTSV9VU0IpIGFuZCBtYWM4MDIxMSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9SU0lcIixcbiAgICBcIlJTSV85MVhcIixcbiAgICBcIlJTSV9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3ByZXBhcmVfYmVhY29uXCIsXG4gICAgXCJyc2lfbWdtdF9wa3RfcmVjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyB0YWlscm9vbSBib3VuZHMgY2hlY2tzIGluIHJzaV9wcmVwYXJlX2JlYWNvbigpIGJlZm9yZSBjb3B5aW5nIGJlYWNvbiBkYXRhLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvciBjcmFzaC4gVGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoUlNJX1VTQikgYW5kIG1hYzgwMjExIGluIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo1Ni43MTk0MzM4NDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTY2MDk5NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDU6NTYuNzE5ODQ3Mjg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjY5NjU2ODE4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBza2JfdGFpbHJvb20oc2tiKWApIGluIGByc2lfcHJlcGFyZV9iZWFjb24oKWAgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3cgKG91dC1vZi1ib3VuZHMgd3JpdGUpIHdoZW4gY29weWluZyBiZWFjb24gZGF0YSAoYG1hY19iY24tXFx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcHJldmVudGlvbiBmaXguIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGJ1ZmZlciBvdmVyZmxvd3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIChhbmQgc2tiIGFzc2VydGlvbnMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQ5ZDFiNzkyOTg3MDFjNGE2Yjc1Zjk3NjFhNmQ2M2U5YjdmNDI2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE5OjQzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuaW5kZXggN2QyNjMxNGEzZTc2YS4uNTBmNzdmM2VlZTkyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1xuQEAgLTQzMSw2ICs0MzEsNyBAQCBpbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1hY19iY247XG4gXHR1OCB2YXBfaWQgPSAwLCBpO1xuK1x0dW5zaWduZWQgaW50IHRhaWxyb29tO1xuIFx0dTE2IHRpbV9vZmZzZXQgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlNJX01BWF9WSUZTOyBpKyspIHtcbkBAIC00ODAsNiArNDgxLDEzIEBAIGludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChtYWNfYmNuLVx1MDAzZWRhdGFbdGltX29mZnNldCArIDJdID09IDApXG4gXHRcdGJjbl9mcm0tXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcbiBcbitcdHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7XG4rXHRpZiAodGFpbHJvb20gXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcbitcdCAgICBtYWNfYmNuLVx1MDAzZWxlbiBcdTAwM2UgdGFpbHJvb20gLSBGUkFNRV9ERVNDX1NaKSB7XG4rXHRcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4gXHRtZW1jcHkoXHUwMDI2c2tiLVx1MDAzZWRhdGFbRlJBTUVfREVTQ19TWl0sIG1hY19iY24tXHUwMDNlZGF0YSwgbWFjX2Jjbi1cdTAwM2VsZW4pO1xuIFx0c2tiX3B1dChza2IsIG1hY19iY24tXHUwMDNlbGVuICsgRlJBTUVfREVTQ19TWik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NTo1Ni43MTk4NDgyMjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxNDU0ODYyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkFuYWx5emluZyB0aGUgUlNJIFdpcmVsZXNzIEhBTCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0J3MgYmVlbiBhbHRlcmVkIGFuZCB3aHkuIE5vdywgSSBzdXNwZWN0IHRoZSBjb3JlIG9mIHRoaXMgYmVhY29uIGhhbmRsaW5nIG1pZ2h0IGJlIGluIGByc2lfcHJlcGFyZV9iZWFjb25gLCBzbyBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBvZiB0aGF0IGZ1bmN0aW9uLiBTZWVpbmcgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6MDYuODY1MzM3MDA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0aW50IHJzaV9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MjY6XFx0e1xcbiA0Mjc6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cXHUwMDNlcHJpdjtcXG4gNDI4OlxcdFxcdHN0cnVjdCByc2lfZGF0YV9kZXNjICpiY25fZnJtO1xcbiA0Mjk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBjb21tb24tXFx1MDAzZXByaXYtXFx1MDAzZWh3O1xcbiA0MzA6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gXFx1MDAyNmh3LVxcdTAwM2Vjb25mO1xcbiA0MzE6XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjtcXG4gNDMyOlxcdFxcdHN0cnVjdCBza19idWZmICptYWNfYmNuO1xcbiA0MzM6XFx0XFx0dTggdmFwX2lkID0gMCwgaTtcXG4gNDM0OlxcdFxcdHVuc2lnbmVkIGludCB0YWlscm9vbTtcXG4gNDM1OlxcdFxcdHUxNiB0aW1fb2Zmc2V0ID0gMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJTSV9NQVhfVklGUzsgaSsrKSB7XFxuIDQzODpcXHRcXHRcXHR2aWYgPSBhZGFwdGVyLVxcdTAwM2V2aWZzW2ldO1xcbiA0Mzk6XFx0XFx0XFx0aWYgKCF2aWYpXFxuIDQ0MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDQxOlxcdFxcdFxcdGlmICgodmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fFxcbiA0NDI6XFx0XFx0XFx0ICAgICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSlcXG4gNDQzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFx0aWYgKCF2aWYpXFxuIDQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdG1hY19iY24gPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0oYWRhcHRlci1cXHUwMDNlaHcsXFxuIDQ0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICB2aWYsXFxuIDQ0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dGltX29mZnNldCwgTlVMTCwgMCk7XFxuIDQ1MDpcXHRcXHRpZiAoIW1hY19iY24pIHtcXG4gNDUxOlxcdFxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsIFxcXCJGYWlsZWQgdG8gZ2V0IGJlYWNvbiBmcm9tIG1hYzgwMjExXFxcXG5cXFwiKTtcXG4gNDUyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTM6XFx0XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRjb21tb24tXFx1MDAzZWJlYWNvbl9jbnQrKztcXG4gNDU2OlxcdFxcdGJjbl9mcm0gPSAoc3RydWN0IHJzaV9kYXRhX2Rlc2MgKilza2ItXFx1MDAzZWRhdGE7XFxuIDQ1NzpcXHRcXHRyc2lfc2V0X2xlbl9xbm8oXFx1MDAyNmJjbl9mcm0tXFx1MDAzZWxlbl9xbm8sIG1hY19iY24tXFx1MDAzZWxlbiwgUlNJX1dJRklfREFUQV9RKTtcXG4gNDU4OlxcdFxcdGJjbl9mcm0tXFx1MDAzZWhlYWRlcl9sZW4gPSBNSU5fODAyXzExX0hEUl9MRU47XFxuIDQ1OTpcXHRcXHRiY25fZnJtLVxcdTAwM2VmcmFtZV9pbmZvID0gY3B1X3RvX2xlMTYoUlNJX0RBVEFfREVTQ19NQUNfQkJQX0lORk8gfFxcbiA0NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX05PX0FDS19JTkQgfFxcbiA0NjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBSU0lfREFUQV9ERVNDX0JFQUNPTl9GUkFNRSB8XFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1RTRiB8XFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHQgIFJTSV9EQVRBX0RFU0NfSU5TRVJUX1NFUV9OTyB8XFxuIDQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgIFJBVEVfSU5GT19FTkFCTEUpO1xcbiA0NjU6XFx0XFx0YmNuX2ZybS1cXHUwMDNlcmF0ZV9pbmZvID0gY3B1X3RvX2xlMTYodmFwX2lkIFxcdTAwM2NcXHUwMDNjIDE0KTtcXG4gNDY2OlxcdFxcdGJjbl9mcm0tXFx1MDAzZXFpZF90aWQgPSBCRUFDT05fSFdfUTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0aWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7XFxuIDQ2OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyA9IGNwdV90b19sZTE2KExPV0VSXzIwX0VOQUJMRSk7XFxuIDQ3MDpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2ViYnBfaW5mbyB8PSBjcHVfdG9fbGUxNihMT1dFUl8yMF9FTkFCTEUgXFx1MDAzZVxcdTAwM2UgMTIpO1xcbiA0NzE6XFx0XFx0fSBlbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHtcXG4gNDcyOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvID0gY3B1X3RvX2xlMTYoVVBQRVJfMjBfRU5BQkxFKTtcXG4gNDczOlxcdFxcdFxcdGJjbl9mcm0tXFx1MDAzZWJicF9pbmZvIHw9IGNwdV90b19sZTE2KFVQUEVSXzIwX0VOQUJMRSBcXHUwMDNlXFx1MDAzZSAxMik7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGlmIChjb21tb24tXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopXFxuIDQ3NzpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfMSk7XFxuIDQ3ODpcXHRcXHRlbHNlXFxuIDQ3OTpcXHRcXHRcXHRiY25fZnJtLVxcdTAwM2VyYXRlX2luZm8gfD0gY3B1X3RvX2xlMTYoUlNJX1JBVEVfNik7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdGlmIChtYWNfYmNuLVxcdTAwM2VkYXRhW3RpbV9vZmZzZXQgKyAyXSA9PSAwKVxcbiA0ODI6XFx0XFx0XFx0YmNuX2ZybS1cXHUwMDNlZnJhbWVfaW5mbyB8PSBjcHVfdG9fbGUxNihSU0lfREFUQV9ERVNDX0RUSU1fQkVBQ09OKTtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcXG4gNDg1OlxcdFxcdGlmICh0YWlscm9vbSBcXHUwMDNjIEZSQU1FX0RFU0NfU1ogfHxcXG4gNDg2OlxcdFxcdCAgICBtYWNfYmNuLVxcdTAwM2VsZW4gXFx1MDAzZSB0YWlscm9vbSAtIEZSQU1FX0RFU0NfU1opIHtcXG4gNDg3OlxcdFxcdFxcdGRldl9rZnJlZV9za2IobWFjX2Jjbik7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRtZW1jcHkoXFx1MDAyNnNrYi1cXHUwMDNlZGF0YVtGUkFNRV9ERVNDX1NaXSwgbWFjX2Jjbi1cXHUwMDNlZGF0YSwgbWFjX2Jjbi1cXHUwMDNlbGVuKTtcXG4gNDkyOlxcdFxcdHNrYl9wdXQoc2tiLCBtYWNfYmNuLVxcdTAwM2VsZW4gKyBGUkFNRV9ERVNDX1NaKTtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0ZGV2X2tmcmVlX3NrYihtYWNfYmNuKTtcXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHR9XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdHN0YXRpYyB2b2lkIGJsX2NtZF90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiA1MDA6XFx0e1xcbiA1MDE6XFx0XFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IHRpbWVyX2NvbnRhaW5lcl9vZihhZGFwdGVyLCB0LCBibF9jbWRfdGltZXIpO1xcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHRhZGFwdGVyLVxcdTAwM2VibGNtZF90aW1lcl9leHBpcmVkID0gdHJ1ZTtcXG4gNTA0OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlYmxfY21kX3RpbWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6MDYuODY1NDYyMzc0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDA4NzUzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEJlYWNvbidzIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGByc2lfcHJlcGFyZV9iZWFjb25gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBhbmQgKndoeSogdGhpcyBiZWFjb24gcHJlcGFyYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdHJpZ2dlcmVkLiBXaGVyZSdzIHRoZSBjYWxsaW5nIGNvZGU/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdy4gSXMgdGhpcyBwYXJ0IG9mIGFuIGludGVycnVwdCBoYW5kbGVyLCBhIHNjaGVkdWxlZCB0YXNrLCBvciBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGFuIGV4dGVybmFsIGV2ZW50PyBUaGUgY29udGV4dCB3aWxsIHNoYXBlIGhvdyBJIGludGVycHJldCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIHNwZWNpZmljIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBkYXRhIGl0J3Mgb3BlcmF0aW5nIG9uIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgYmVhY29uIGlzIGJlaW5nIHNldCB1cC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgcXVpY2tseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIElERSBvciBzb3VyY2UgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIGNhbiBvZmZlci4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGJlYWNvbmluZyBtZWNoYW5pc20gaW4gcGxheSBoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NjowOS44MDYzMzk4ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA0OTA5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX3ByZXBhcmVfYmVhY29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2hhbC5jPTM4OD1pbnQgcnNpX3NlbmRfYnRfcGt0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfaGFsLmM6NDI1OmludCByc2lfcHJlcGFyZV9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9oYWwuYy00MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTE3NjM9c3RhdGljIGludCByc2lfc2VuZF9iZWFjb24oc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzc2LVxcdFxcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6MTc3NzpcXHRpZiAocnNpX3ByZXBhcmVfYmVhY29uKGNvbW1vbiwgc2tiKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy0xNzc4LVxcdFxcdHJzaV9kYmcoRVJSX1pPTkUsIFxcXCJGYWlsZWQgdG8gcHJlcGFyZSBiZWFjb25cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9oYWwuaD0yMjU9aW50IHJzaV9wcmVwYXJlX2RhdGFfZGVzYyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2hhbC5oOjIyNjppbnQgcnNpX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfaGFsLmgtMjI3LWludCByc2lfc2VuZF9wa3RfdG9fYnVzKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHN0cnVjdCBza19idWZmICpza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NjoxMS4yNTY4MzU5ODVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE0MjM4MTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIHJzaV9zZW5kX2JlYWNvbiBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGByc2lfc2VuZF9iZWFjb25gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGZpbmQgaXQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgYmVhY29uIHRyYW5zbWlzc2lvbiBsb2dpYyBmb3IgdGhlIFJTSSA5MXggd2lyZWxlc3MgY2hpcHNldC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGJlYWNvbiBmcmFtZXMuIEknbGwgYmUgbG9va2luZyBmb3IgZGV0YWlscyBsaWtlIGhvdyB0aGUgZnJhbWUgaXMgY29uc3RydWN0ZWQsIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBiZWFjb24gc2VuZGluZyBwcm9jZXNzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIGRyaXZlciBhbmQsIHVsdGltYXRlbHksIHRoZSBoYXJkd2FyZSBpdHNlbGYuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBsZWFybi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ2OjE0LjM5OTIyMDI5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xcbjE3NjE6XFx0fVxcbjE3NjI6XFx0XFxuMTc2MzpcXHRzdGF0aWMgaW50IHJzaV9zZW5kX2JlYWNvbihzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbjE3NjQ6XFx0e1xcbjE3NjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuMTc2NjpcXHRcXHR1OCBkd29yZF9hbGlnbl9ieXRlcyA9IDA7XFxuMTc2NzpcXHRcXG4xNzY4OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IoTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3Njk6XFx0XFx0aWYgKCFza2IpXFxuMTc3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNzcxOlxcdFxcbjE3NzI6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgTUFYX01HTVRfUEtUX1NJWkUpO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHRkd29yZF9hbGlnbl9ieXRlcyA9ICgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEgXFx1MDAyNiAweDNmKTtcXG4xNzc1OlxcdFxcdGlmIChkd29yZF9hbGlnbl9ieXRlcylcXG4xNzc2OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgKDY0IC0gZHdvcmRfYWxpZ25fYnl0ZXMpKTtcXG4xNzc3OlxcdFxcdGlmIChyc2lfcHJlcGFyZV9iZWFjb24oY29tbW9uLCBza2IpKSB7XFxuMTc3ODpcXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgYmVhY29uXFxcXG5cXFwiKTtcXG4xNzc5OlxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4xNzgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3ODE6XFx0XFx0fVxcbjE3ODI6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmNvbW1vbi1cXHUwMDNldHhfcXVldWVbTUdNVF9CRUFDT05fUV0sIHNrYik7XFxuMTc4MzpcXHRcXHRyc2lfc2V0X2V2ZW50KFxcdTAwMjZjb21tb24tXFx1MDAzZXR4X3RocmVhZC5ldmVudCk7XFxuMTc4NDpcXHRcXHRyc2lfZGJnKERBVEFfVFhfWk9ORSwgXFxcIiVzOiBBZGRlZCB0byBiZWFjb24gcXVldWVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFx0cmV0dXJuIDA7XFxuMTc4NzpcXHR9XFxuMTc4ODpcXHRcXG4xNzg5OlxcdCNpZmRlZiBDT05GSUdfUE1cXG4xNzkwOlxcdGludCByc2lfc2VuZF93b3dsYW5fcmVxdWVzdChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1MTYgZmxhZ3MsXFxuMTc5MTpcXHRcXHRcXHRcXHQgICAgdTE2IHNsZWVwX3N0YXR1cylcXG4xNzkyOlxcdHtcXG4xNzkzOlxcdFxcdHN0cnVjdCByc2lfd293bGFuX3JlcSAqY21kX2ZyYW1lO1xcbjE3OTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNzk1OlxcdFxcdHU4IGxlbmd0aDtcXG4xNzk2OlxcdFxcbjE3OTc6XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBTZW5kaW5nIHdvd2xhbiByZXF1ZXN0IGZyYW1lXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdGxlbmd0aCA9IHNpemVvZigqY21kX2ZyYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6MTQuMzk5MzgwNzA1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyODYxMjQ1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEJlYWNvbiBQcmVwYXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG9yaWdpbmFsIGNvZGUgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbmAgd2FzIHZ1bG5lcmFibGU6IGl0IHVzZWQgYG1lbWNweWAgYW5kIGBza2JfcHV0YCB3aXRob3V0IHZlcmlmeWluZyB0aGUgYHNrYmAgaGFkIGVub3VnaCBzcGFjZSBmb3IgdGhlIGJlYWNvbiBkYXRhIChgbWFjX2Jjbi1cdTAwM2VsZW5gKS4gVGhpcywgb2YgY291cnNlLCBwcmVzZW50ZWQgYSBjbGVhciBidWZmZXIgb3ZlcmZsb3cgcmlza+KAlGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuXG5cblRoZSBwYXRjaCBzbWFydGx5IGFkZHMgYSBib3VuZHMgY2hlY2s6IGl0IHZlcmlmaWVzIGBza2JfdGFpbHJvb20oc2tiKWAgaXMgc3VmZmljaWVudCBiZWZvcmUgcHJvY2VlZGluZy4gSWYgdGhlcmUncyBub3QgZW5vdWdoIHJvb20sIHRoZSBiZWFjb24gYnVmZmVyIGlzIGZyZWVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZC4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBJbiBgcnNpX3NlbmRfYmVhY29uYCwgdGhlIGBza2JgIGl0c2VsZiBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgemVyb2VkLCBzbyB0aGF0J3MgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgY2hhbmdlIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnl0aGluZyBLTVNBTiB3b3VsZCBiZSBzcGVjaWZpY2FsbHkgdXNlZnVsIGZvcj8gSSBkb24ndCBzZWUgaXQuIFRoZSBwcmltYXJ5IGNoYW5nZSBpcyBhICpyZXN0cmljdGlvbiogb24gYWNjZXNzLCBub3QgYW4gaW50cm9kdWN0aW9uIG9mIG5ldyByaXNrcy5cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNoZW5hbmlnYW5zLCBpb2N0bHMsIG9yIHNvY2tldCBvcHRpb25zIGFyZSB0b3VjaGVkLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vcGUuIFRoZSBjaGVjayBkZXBlbmRzIG9uIGBza2JfdGFpbHJvb21gLCBhIGtub3duIHZhbGlkIHZhbHVlLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOb3BlLiBUaGUgYnVmZmVyIGlzIG1lbXNldCB0byB6ZXJvICpiZWZvcmUqIGFueSBvZiB0aGlzIGhhcHBlbnMuXG40LiAgKipCb3VuZHMgY2hlY2tzIHRoYXQgKmFsbG93KiB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIE5vcGUuIFRoaXMgY2hlY2sgKnByZXZlbnRzKiBpdC4gV2UncmUgZXhwbGljaXRseSBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBpbml0aWFsIHplcm9pbmcgbWFrZXMgdGhpcyBidWxsZXQtcHJvb2YuXG5cblNvLCB0aGUgY2hhbmdlICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMuIEtBU0FOIGlzIHRoZSByZWxldmFudCBzYW5pdGl6ZXIuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoaXMgaXMgYSBLQVNBTiBjYXNlLlxuXG5BbGwgY2hlY2tzIGFyZSBkb25lLiBJJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHM6IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OSwiT3V0cHV0VG9rZW5zIjoxNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NjoyMy42ODU1MDc4MDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBza2JfdGFpbHJvb20oc2tiKWApIGluIGByc2lfcHJlcGFyZV9iZWFjb24oKWAgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3cgKG91dC1vZi1ib3VuZHMgd3JpdGUpIHdoZW4gY29weWluZyBiZWFjb24gZGF0YSAoYG1hY19iY24tXFx1MDAzZWRhdGFgKSBpbnRvIHRoZSB0YXJnZXQgYHNrYmAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcHJldmVudGlvbiBmaXguIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGJ1ZmZlciBvdmVyZmxvd3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIChhbmQgc2tiIGFzc2VydGlvbnMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYHNrYl90YWlscm9vbShza2IpYCkgaW4gYHJzaV9wcmVwYXJlX2JlYWNvbigpYCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyAob3V0LW9mLWJvdW5kcyB3cml0ZSkgd2hlbiBjb3B5aW5nIGJlYWNvbiBkYXRhIChgbWFjX2Jjbi1cXHUwMDNlZGF0YWApIGludG8gdGhlIHRhcmdldCBgc2tiYC4gXFxuXFxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBwcmV2ZW50aW9uIGZpeC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgYnVmZmVyIG92ZXJmbG93cyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4gKGFuZCBza2IgYXNzZXJ0aW9ucykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowd6wwj[1] Phase: Succeeded StartedAt: 2026-08-31 19:46:47 +0000 UTC FinishedAt: 2026-08-31 19:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 19:46:47 +0000 UTC FinishedAt: 2026-08-31 19:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2] Phase: Succeeded StartedAt: 2026-08-31 19:46:47 +0000 UTC FinishedAt: 2026-08-31 21:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 19:46:47 +0000 UTC FinishedAt: 2026-08-31 21:28:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 19:46:47 +0000 UTC FinishedAt: 2026-08-31 19:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 19:46:47 +0000 UTC FinishedAt: 2026-08-31 19:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd6wwj/series-workflowd6wwj-convert-artifact-3532420322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 19:46:57 +0000 UTC FinishedAt: 2026-08-31 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 19:46:57 +0000 UTC FinishedAt: 2026-08-31 20:02:59 +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:*cbb65d9e-1d65-4b49-a56c-0d5c59dc4a78,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-workflowd6wwj/series-workflowd6wwj-convert-artifact-3532420322/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": "34ed31f6-ed36-4330-94d1-7cc26295a70c", "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-workflowd6wwj/series-workflowd6wwj-build-action-3791113376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 19:46:57 +0000 UTC FinishedAt: 2026-08-31 20:02:49 +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:*cbb65d9e-1d65-4b49-a56c-0d5c59dc4a78,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-workflowd6wwj/series-workflowd6wwj-convert-artifact-3532420322/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": "34ed31f6-ed36-4330-94d1-7cc26295a70c", "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-workflowd6wwj/series-workflowd6wwj-build-action-3791113376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:02:59 +0000 UTC FinishedAt: 2026-08-31 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:02:59 +0000 UTC FinishedAt: 2026-08-31 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:02:59 +0000 UTC FinishedAt: 2026-08-31 20:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:02:59 +0000 UTC FinishedAt: 2026-08-31 20:03:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-workflowd6wwj/series-workflowd6wwj-convert-artifact-1089946173/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:03:09 +0000 UTC FinishedAt: 2026-08-31 20:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:03:09 +0000 UTC FinishedAt: 2026-08-31 20:05:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34ed31f6-ed36-4330-94d1-7cc26295a70c,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-workflowd6wwj/series-workflowd6wwj-build-action-3791113376/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-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:05:10 +0000 UTC FinishedAt: 2026-08-31 20:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:05:10 +0000 UTC FinishedAt: 2026-08-31 20:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:05:10 +0000 UTC FinishedAt: 2026-08-31 20:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:05:10 +0000 UTC FinishedAt: 2026-08-31 20:21:51 +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:*cbb65d9e-1d65-4b49-a56c-0d5c59dc4a78,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-workflowd6wwj/series-workflowd6wwj-convert-artifact-1089946173/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": "7711d17d-bba5-4c1b-8921-c2faa24438f8", "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-workflowd6wwj/series-workflowd6wwj-build-action-2512773529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:05:10 +0000 UTC FinishedAt: 2026-08-31 20:21:41 +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:*cbb65d9e-1d65-4b49-a56c-0d5c59dc4a78,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-workflowd6wwj/series-workflowd6wwj-convert-artifact-1089946173/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": "7711d17d-bba5-4c1b-8921-c2faa24438f8", "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-workflowd6wwj/series-workflowd6wwj-build-action-2512773529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:21:51 +0000 UTC FinishedAt: 2026-08-31 20:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:21:51 +0000 UTC FinishedAt: 2026-08-31 20:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:21:51 +0000 UTC FinishedAt: 2026-08-31 20:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:21:51 +0000 UTC FinishedAt: 2026-08-31 20:23:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7711d17d-bba5-4c1b-8921-c2faa24438f8,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-workflowd6wwj/series-workflowd6wwj-build-action-2512773529/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-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 21:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 21:28:31 +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":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"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:*34ed31f6-ed36-4330-94d1-7cc26295a70c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7711d17d-bba5-4c1b-8921-c2faa24438f8,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-workflowd6wwj/series-workflowd6wwj-build-action-3791113376/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-workflowd6wwj/series-workflowd6wwj-build-action-2512773529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 20:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 20:24:03 +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":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"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-workflowd6wwj/series-workflowd6wwj-convert-artifact-725477314/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 20:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 20:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:23:58 +0000 UTC FinishedAt: 2026-08-31 20:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:24:08 +0000 UTC FinishedAt: 2026-08-31 21:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6wwj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_prepare_beacon","rsi_mgmt_pkt_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"462bdd08fbdf41db223c6117d907c8fd68d666ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211"],"series_id":"603fb900-1dfb-44db-b792-de3f895b779a","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-31 20:24:08 +0000 UTC FinishedAt: 2026-08-31 21:28:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34ed31f6-ed36-4330-94d1-7cc26295a70c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7711d17d-bba5-4c1b-8921-c2faa24438f8,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-workflowd6wwj/series-workflowd6wwj-build-action-3791113376/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-workflowd6wwj/series-workflowd6wwj-build-action-2512773529/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-workflowd6wwj/series-workflowd6wwj-convert-artifact-725477314/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,}