Name: series-workflowzxw4v Phase: Succeeded StartedAt: 2026-08-07 22:47:43 +0000 UTC FinishedAt: 2026-08-08 01:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[0] Phase: Succeeded StartedAt: 2026-08-07 22:47:43 +0000 UTC FinishedAt: 2026-08-07 23:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 22:47:43 +0000 UTC FinishedAt: 2026-08-07 23:29:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "d879a52c-ece2-4ed5-ab17-8a415e4fa3e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gve_ptp_adjfine" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfR09PR0xFJiMzNDssCiAgICAmIzM0O0dWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9wdHBfYWRqZmluZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSW4gYGd2ZV9wdHAuY2AsIGl0IGFkZHMgYSBzdHViIGZvciBgYWRqZmluZWAgKGBndmVfcHRwX2FkamZpbmVgKSB3aGljaCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFBUUCBjb3JlIChgcHRwX2Nsb2NrX2FkanRpbWVgKSB3aGVuIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGRyaXZlciB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBlbnZpcm9ubWVudHMuIEl0IGFkZHMgYSBtaXNzaW5nIFBUUCBjbG9jayBvcGVyYXRpb24gYGd2ZV9wdHBfYWRqZmluZWAgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBSWCBmYXN0IHBhdGggKGBndmVfcnhfZHFvYCkgd2hlbiBoYW5kbGluZyB6ZXJvLWxlbmd0aCBwYXlsb2FkIGJ1ZmZlcnMgd2l0aCBoZWFkZXIgc3BsaXQgZW5hYmxlZC4gU2luY2UgR1ZFIGlzIHJlYWNoYWJsZSBhbmQgYWN0aXZlbHkgdXNlZCBpbiBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MTZjNDAyODZlNWUxMWNjYWU4NTJkZTdjZDExZWJiMjQwZTNlYTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXG5pbmRleCAwNmIxY2Y0YTVlZmNjLi4xZDZjNTlmNGVhZDNkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXG5AQCAtMjYsNiAmIzQzOzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGd2ZV9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZ3ZlX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4gXHRcdFx0ICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG5AQCAtNjAsNiAmIzQzOzY1LDcgQEAgc3RhdGljIGxvbmcgZ3ZlX3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7XG4gXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7Z3ZlIGNsb2NrXCYjMzQ7LFxuJiM0MztcdC5hZGpmaW5lXHQ9IGd2ZV9wdHBfYWRqZmluZSxcbiBcdC5nZXR0aW1leDY0XHQ9IGd2ZV9wdHBfZ2V0dGltZXg2NCxcbiBcdC5zZXR0aW1lNjRcdD0gZ3ZlX3B0cF9zZXR0aW1lNjQsXG4gXHQuZG9fYXV4X3dvcmtcdD0gZ3ZlX3B0cF9kb19hdXhfd29yayxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5pbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5AQCAtODg2LDYgJiM0Mzs4ODYsMTEgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiBcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0O1xuIFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXMgJiM0Mzs9IGhkcl9sZW47XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFidWZfbGVuKSB7XG4mIzQzO1x0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2UgaWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQgXHUwMDI2XHUwMDI2IHJ4LVx1MDAzZWRxby5wYWdlX3Bvb2wgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ubmV0bWVtKSkge1xuIFx0XHQvKiB3aGVuIGhlYWRlciBzcGxpdCBpcyBkaXNhYmxlZCwgdGhlIGhlYWRlciB3ZW50IHRvIHRoZSBwYWNrZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX3B0cF9hZGpmaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgZHJpdmVyIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIG1pc3NpbmcgUFRQIGNsb2NrIG9wZXJhdGlvbiBgZ3ZlX3B0cF9hZGpmaW5lYCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIFJYIGZhc3QgcGF0aCAoYGd2ZV9yeF9kcW9gKSB3aGVuIGhhbmRsaW5nIHplcm8tbGVuZ3RoIHBheWxvYWQgYnVmZmVycyB3aXRoIGhlYWRlciBzcGxpdCBlbmFibGVkLiBTaW5jZSBHVkUgaXMgcmVhY2hhYmxlIGFuZCBhY3RpdmVseSB1c2VkIGluIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxNmM0MDI4NmU1ZTExY2NhZTg1MmRlN2NkMTFlYmIyNDBlM2VhNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDIzOjI2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYwppbmRleCAwNmIxY2Y0YTVlZmNjLi4xZDZjNTlmNGVhZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYwpAQCAtMjYsNiAmIzQzOzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBndmVfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiAJCQkgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiAJCQkgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKQEAgLTYwLDYgJiM0Mzs2NSw3IEBAIHN0YXRpYyBsb25nIGd2ZV9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKQogc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gJiMzNDtndmUgY2xvY2smIzM0OywKJiM0MzsJLmFkamZpbmUJPSBndmVfcHRwX2FkamZpbmUsCiAJLmdldHRpbWV4NjQJPSBndmVfcHRwX2dldHRpbWV4NjQsCiAJLnNldHRpbWU2NAk9IGd2ZV9wdHBfc2V0dGltZTY0LAogCS5kb19hdXhfd29yawk9IGd2ZV9wdHBfZG9fYXV4X3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jCmluZGV4IDgyNzFmNzMxYTkxZmMuLjBlY2UyZjZmZGZmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jCkBAIC04ODYsNiAmIzQzOzg4NiwxMSBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LAogCQlyeC0mZ3Q7cnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0OwogCQlyeC0mZ3Q7cnhfaHNwbGl0X2J5dGVzICYjNDM7PSBoZHJfbGVuOwogCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4LSZndDtzdGF0c3MpOwomIzQzOwomIzQzOwkJaWYgKCFidWZfbGVuKSB7CiYjNDM7CQkJZ3ZlX2ZyZWVfYnVmZmVyKHJ4LCBidWZfc3RhdGUpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQogCX0gZWxzZSBpZiAoIXJ4LSZndDtjdHguc2tiX2hlYWQgJmFtcDsmYW1wOyByeC0mZ3Q7ZHFvLnBhZ2VfcG9vbCAmYW1wOyZhbXA7CiAJCSAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS0mZ3Q7cGFnZV9pbmZvLm5ldG1lbSkpIHsKIAkJLyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enphYmlsaXR5IG9mIGEgR1ZFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBndmVfcHRwLmNgIGFuZCBgZ3ZlX3J4X2Rxby5jYC4gVGhlIGBndmVfcHRwYCBwYXJ0IGlzIGp1c3QgcmV0dXJuaW5nIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzbiYjMzk7dCB2ZXJ5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIHRoYXQgYGd2ZV9yeF9kcW9gIG5vdyBoYXMgYSBjaGVjazogYGlmICghYnVmX2xlbikgeyAuLi4gfWAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0IGJlY2F1c2UgaXQmIzM5O3MgaW4gdGhlIFJYIGZhc3QgcGF0aC4KCk5vdywgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciBpcyB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSwgd2hpY2ggaXMgd2hlcmUgU3l6a2FsbGVyICpydW5zKiBieSBkZWZhdWx0LiBTbywgR1ZFIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB1c2VkLiBHb29kLiBDaGVja2luZyB0aGUgS2NvbmZpZyBjb25maXJtcyB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgKGBDT05GSUdfR1ZFYCkuIFRoZSBwYXRjaCBpcyBpbiB0aGUgYGd2ZV9yeF9kcW9gIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB2aWEgYGd2ZV9yeF9wb2xsX2Rxb2AuCgpUaGUgcXVlc3Rpb24gYmVjb21lczogSXMgdGhpcyBmdXp6YWJsZT8gSXQmIzM5O3MgbmV0d29yayBkcml2ZXIgUlgsIGFuZCBTeXprYWxsZXIgaXMgZGVzaWduZWQgdG8gZnV6eiBuZXR3b3JrIHBhY2tldHMsIHNvIHRoZSBpbml0aWFsIGltcHVsc2UgaXMgeWVzLiBIb3dldmVyLCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIENhbiBTeXprYWxsZXIgZGlyZWN0bHkgZnV6eiBHVkU/IFRoZSBHVkUgZHJpdmVyIHJlY2VpdmVzIHBhY2tldHMgZnJvbSB0aGUgaHlwZXJ2aXNvci4gU3l6a2FsbGVyIGNhbiBzZW5kIHBhY2tldHMsIGJ1dCBpdCBkb2VzbiYjMzk7dCAqY29udHJvbCogdGhlIEdWRSBkZXZpY2UgZGlyZWN0bHkuIFN5emthbGxlciBpcyBydW5uaW5nICp3aXRoaW4qIHRoZSBHQ0UgaW5zdGFuY2UsIHNvIGl0IGNhbiYjMzk7dCBtYW5pcHVsYXRlIHRoZSBoeXBlcnZpc29yJiMzOTtzIHZpZXcgb2YgdGhlIEdWRSBoYXJkd2FyZSwgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LgoKU3l6a2FsbGVyIGNhbiBmdXp6IHNvZnR3YXJlIGRldmljZXMgbGlrZSB0dW4vdGFwIG9yIHZldGguIEZvciBhIGhhcmR3YXJlIGRldmljZSwgaXQgdXN1YWxseSByZWxpZXMgb24gdGhlIG5ldHdvcmsgc2VuZGluZyBwYWNrZXRzIGJhY2sgdG8gaXRzZWxmIG9yIG9uIGJyb2FkY2FzdCBwYWNrZXRzIHRvIGNhdXNlIGFjdGl2aXR5LCBidXQgaXQgZG9lc24mIzM5O3QgaW5qZWN0IGFyYml0cmFyeSBoYXJkd2FyZSBkZXNjcmlwdG9ycy4gR1ZFICppcyogYSBQQ0kgZGV2aWNlLCBidXQgU3l6a2FsbGVyICpkb2VzbiYjMzk7dCogZW11bGF0ZSBHVkUuIEl0JiMzOTtzIGp1c3QgKnVzaW5nKiBpdCB3aXRoaW4gR0NFLiBTeXprYWxsZXImIzM5O3Mgbm90IGNvbnRyb2xsaW5nIHRoZSBoYXJkd2FyZS4gSXQmIzM5O3MgaGFuZGxpbmcgKnJlYWwqIG5ldHdvcmsgdHJhZmZpYyAoU1NILCBldGMuKS4KClNvLCBjb250cm9sbGluZyBzb21ldGhpbmcgbGlrZSBgYnVmX2xlbmAgaXMgZGlmZmljdWx0IGJlY2F1c2UgdGhhdCYjMzk7cyBjb250cm9sbGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBub3QgdGhlIGd1ZXN0IE9TIHdoZXJlIFN5emthbGxlciBpcyBydW5uaW5nLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gY29udHJvbCB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBsZXRpb24gZGVzY3JpcHRvciBgY29tcGxfZGVzY2AuIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGFuIGVhc3kgd2F5IHRvIG1hbmlwdWxhdGUgdGhlIGRlc2NyaXB0b3IgY29udGVudHMgYmVjYXVzZSBpdCYjMzk7cyBjb21pbmcgZnJvbSB0aGUgaHlwZXJ2aXNvciwgd2hpY2ggdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0gaGFzIG5vIGNvbnRyb2wgb3Zlci4gVGhlIGd1ZXN0IGlzIHRydXN0aW5nIHRoZSBoeXBlcnZpc29yIGhlcmUuCgpTbywgaW4gc2hvcnQsIHdoaWxlIHRoZSBwYXRjaCAqbG9va3MqIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYW4gUlggcGF0aCBhbmQgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBwYWNrZXQgZnV6emluZywgcmVhbGlzdGljYWxseSwgU3l6a2FsbGVyJiMzOTtzIGRpcmVjdCBjb250cm9sIG92ZXIgdGhlIEdWRSBkZXZpY2UmIzM5O3MgUlggZGVzY3JpcHRvcnMgaXMgbGltaXRlZC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgZGVlcGVyIGRpZ2dpbmcgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB2aWFibGUgYW5nbGUgb2YgYXR0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9yeF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0dWRSkgJiM0Mzs9IGd2ZS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL01ha2VmaWxlOjQ6Z3ZlLXkgOj0gZ3ZlX21haW4ubyBndmVfdHgubyBndmVfdHhfZHFvLm8gZ3ZlX3J4Lm8gZ3ZlX3J4X2Rxby5vIGd2ZV9ldGh0b29sLm8gZ3ZlX2FkbWlucS5vIGd2ZV91dGlscy5vIGd2ZV9mbG93X3J1bGUubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9NYWtlZmlsZS01LVx0ICAgIGd2ZV9idWZmZXJfbWdtdF9kcW8ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTc5Mz1zdGF0aWMgdm9pZCBndmVfZG1hX3N5bmMoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTgxNC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgxNTpzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODE2LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZ3ZlX3J4X2NvbXBsX2Rlc2NfZHFvICpjb21wbF9kZXNjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwODA9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExMTk6XHRcdGVyciA9IGd2ZV9yeF9kcW8obmFwaSwgcngsIGNvbXBsX2Rlc2MsIGNvbXBscS1cdTAwM2VoZWFkLCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTIwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbWl0YXRpb25zIG9mIEZ1enppbmcgdGhlIEdWRSBSZWNlaXZlIERlc2NyaXB0b3IgUXVldWUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGd2ZV9yeF9kcW9gIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgaGFuZGxpbmcgY29tcGxldGlvbiBkZXNjcmlwdG9ycyBjb21pbmcgZnJvbSBlaXRoZXIgdGhlIGhhcmR3YXJlIG9yIHRoZSBoeXBlcnZpc29yLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2Ugc3l6a2FsbGVyIGlzIHJ1bm5pbmcgaW5zaWRlIHRoZSBndWVzdCwgaXQgY2FuJiMzOTt0IGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhlIGh5cGVydmlzb3IgdG8gaW5qZWN0IHNvbWV0aGluZyBvYnZpb3VzbHkgYmFkIGxpa2UgYSB6ZXJvLWxlbmd0aCBidWZmZXIgKGBidWZfbGVuID09IDBgKS4gU28sIHdoaWxlIHRoaXMgY29kZSBwYXRoICpleGlzdHMqLCBpdCBzZWVtcyBwcmV0dHkgcmVzaXN0YW50IHRvIG1lYW5pbmdmdWwgZnV6emluZyB0aHJvdWdoIGlucHV0IG11dGF0aW9uLCBiZWNhdXNlIHRoZSAqcmVhbCogaW5wdXRzIGNvbWUgZnJvbSBhIHRydXN0ZWQgaHlwZXJ2aXNvci4KCkJ1dCB0aGVuIEkgaGFkIGEgdGhvdWdodC4uLiBpcyB0aGVyZSAqYW55KiB3YXkgc3l6a2FsbGVyIGNvdWxkIGFjdHVhbGx5IGhpdCB0aGlzIGBidWZfbGVuID09IDBgIGNhc2U/IENvdWxkIGl0IGJlIGEgbGVnaXRpbWF0ZSBzdGF0ZSB1bmRlciAqbm9ybWFsKiBuZXR3b3JrIGNvbmRpdGlvbnM/IE1heWJlLCBpZiB0aGVyZSYjMzk7cyBhbiBlbXB0eSBwYWNrZXQgb3IgYSBoZWFkZXIgc3BsaXQgc2NlbmFyaW8gd2hlcmUgdGhlIHBheWxvYWQgaXRzZWxmIGlzIGVtcHR5IChsaWtlIGEgVENQIEFDSyB3aXRoIG5vIGRhdGEpLiBJZiBzbywgd2UgbWlnaHQgYWN0dWFsbHkgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgYnkgY3JhZnRpbmcgc3BlY2lmaWMgcGFja2V0cyEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IG9wZW5zIHVwIGEgbmV3IGF2ZW51ZS4KCkkgc2hvdWxkIHByb2JhYmx5IGdvIHRha2UgYSBsb29rIGF0IGBndmVfcnhfZHFvLmNgIGFyb3VuZCBsaW5lIDg4Ni4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFx0XHRwcmVmZXRjaChidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZ2UpO1xuIDg2MTpcdFx0fVxuIDg2MjpcdFxuIDg2MzpcdFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cbiA4NjQ6XHRcdGlmIChoc3BsaXQpIHtcbiA4NjU6XHRcdFx0aW50IHVuc3BsaXQgPSAwO1xuIDg2NjpcdFxuIDg2NzpcdFx0XHRpZiAoaGRyX2xlbiBcdTAwMjZcdTAwMjYgIWhibykge1xuIDg2ODpcdFx0XHRcdHNpemVfdCBvZmZzZXQgPVxuIDg2OTpcdFx0XHRcdFx0KHNpemVfdClidWZmZXJfaWQgKiBwcml2LVx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcbiA4NzA6XHRcbiA4NzE6XHRcdFx0XHRyeC1cdTAwM2VjdHguc2tiX2hlYWQgPVxuIDg3MjpcdFx0XHRcdFx0Z3ZlX3J4X2NvcHlfZGF0YShwcml2LVx1MDAzZWRldiwgbmFwaSxcbiA4NzM6XHRcdFx0XHRcdFx0XHQgcngtXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgJiM0Mzsgb2Zmc2V0LFxuIDg3NDpcdFx0XHRcdFx0XHRcdCBoZHJfbGVuKTtcbiA4NzU6XHRcdFx0XHRpZiAodW5saWtlbHkoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZCkpXG4gODc2Olx0XHRcdFx0XHRnb3RvIGVycm9yO1xuIDg3NzpcdFx0XHRcdHJ4LVx1MDAzZWN0eC5za2JfdGFpbCA9IHJ4LVx1MDAzZWN0eC5za2JfaGVhZDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdFx0XHRpZiAocngtXHUwMDNlZHFvLnBhZ2VfcG9vbClcbiA4ODA6XHRcdFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHJ4LVx1MDAzZWN0eC5za2JfaGVhZCk7XG4gODgxOlx0XHRcdH0gZWxzZSB7XG4gODgyOlx0XHRcdFx0dW5zcGxpdCA9IDE7XG4gODgzOlx0XHRcdH1cbiA4ODQ6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDg4NTpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfcGt0JiM0MzsmIzQzOztcbiA4ODY6XHRcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0O1xuIDg4NzpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXMgJiM0Mzs9IGhkcl9sZW47XG4gODg4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4gODg5Olx0XG4gODkwOlx0XHRcdGlmICghYnVmX2xlbikge1xuIDg5MTpcdFx0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiA4OTI6XHRcdFx0XHRyZXR1cm4gMDtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0fSBlbHNlIGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkIFx1MDAyNlx1MDAyNiByeC1cdTAwM2VkcW8ucGFnZV9wb29sIFx1MDAyNlx1MDAyNlxuIDg5NTpcdFx0XHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcbiA4OTY6XHRcdFx0Lyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0XG4gODk3Olx0XHRcdCAqIGJ1ZmZlci4gSWYgdGhlIHBhY2tldCBidWZmZXIgaXMgYSBuZXRfaW92LCB0aG9zZSBjYW4mIzM5O3QgYmVcbiA4OTg6XHRcdFx0ICogZWFzaWx5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgc3BhY2UgdG8gYWNjZXNzIHRoZSBoZWFkZXJcbiA4OTk6XHRcdFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxuIDkwMDpcdFx0XHQgKi9cbiA5MDE6XHRcdFx0Z290byBlcnJvcjtcbiA5MDI6XHRcdH1cbiA5MDM6XHRcbiA5MDQ6XHRcdC8qIFN5bmMgdGhlIHBvcnRpb24gb2YgZG1hIGJ1ZmZlciBmb3IgQ1BVIHRvIHJlYWQuICovXG4gOTA1Olx0XHRndmVfZG1hX3N5bmMocHJpdiwgcngsIGJ1Zl9zdGF0ZSwgYnVmX2xlbik7XG4gOTA2Olx0XG4gOTA3Olx0XHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cbiA5MDg6XHRcdGlmIChyeC1cdTAwM2VjdHguc2tiX2hlYWQpIHtcbiA5MDk6XHRcdFx0aWYgKHVubGlrZWx5KGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYXlsb2FkIEJ1ZmZlciBIYW5kbGluZyBpbiBOZXR3b3JrIENvZGUqKgoKT2theSwgc28gYGJ1Zl9sZW5gIHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGRhdGEgcGF5bG9hZCBidWZmZXIuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IHRoZSBjb2RlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBgaHNwbGl0YCBpcyB0cnVlLCBtZWFuaW5nIHRoZSBoZWFkZXIgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LiBJZiBgaHNwbGl0YCBpcyBlbmFibGVkLCB0aGUgaGVhZGVyIGdldHMgY29waWVkIGludG8gdGhlIHNvY2tldCBidWZmZXIuIElmIHRoZXJlJiMzOTtzIG5vIGFjdHVhbCBwYXlsb2FkIChgIWJ1Zl9sZW5gKSwgaXQgZnJlZXMgdGhlIGJ1ZmZlciBhbmQgcmV0dXJucyAwLiBUaGF0IG1ha2VzIHNlbnNlLCBoYW5kbGluZyBhIGhlYWRlci1vbmx5IHBhY2tldCBsaWtlIGEgcHVyZSBUQ1AgQUNLLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IGFuIGF1dG9tYXRlZCBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/JiMzNDsgSXQgc2VlbXMgbGlrZWx5LiBTeXprYWxsZXIgaXMgZGVmaW5pdGVseSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhvc2UgZW1wdHktcGF5bG9hZCBwYWNrZXRzLCBhbmQgaWYgaGVhZGVyIHNwbGl0IGlzIGVuYWJsZWQsIHRoYXQgY29kZSBwYXRoIHdvdWxkIGJlIGhpdC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgZm9yIHBvdGVudGlhbCBidWdzIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3IuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBoc3BsaXRgIGlzIHNvbWV0aGluZyBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IGNvbnRyb2wgb3IgdHJpZ2dlciBpbmRpcmVjdGx5LgoKT2gsIGFuZCB0aGVyZSB3YXMgYWxzbyB0aGF0IGBndmVfcHRwX2FkamZpbmVgIGNoYW5nZSBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGFuZCBjaGVjayBvdXQgYGd2ZV9wdHAuY2AgdG8gc2VlIGlmIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcyBvciBpcyBhIHNlcGFyYXRlIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpXG4gICAyOlx0LyogR29vZ2xlIHZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyXG4gICAzOlx0ICpcbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQ1xuICAgNTpcdCAqL1xuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFwmIzM0O2d2ZS5oXCYjMzQ7XG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7Z3ZlX2FkbWlucS5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0LyogSW50ZXJ2YWwgdG8gc2NoZWR1bGUgYSBuaWMgdGltZXN0YW1wIGNhbGlicmF0aW9uLCAyNTBtcy4gKi9cbiAgMTE6XHQjZGVmaW5lIEdWRV9OSUNfVFNfU1lOQ19JTlRFUlZBTF9NUyAyNTBcbiAgMTI6XHRcbiAgMTM6XHQvKiBSZWFkIHRoZSBuaWMgdGltZXN0YW1wIGZyb20gaGFyZHdhcmUgdmlhIHRoZSBhZG1pbiBxdWV1ZS4gKi9cbiAgMTQ6XHRpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbiAgMTU6XHR7XG4gIDE2Olx0XHR1NjQgbmljX3JhdztcbiAgMTc6XHRcdGludCBlcnI7XG4gIDE4Olx0XG4gIDE5Olx0XHRlcnIgPSBndmVfYWRtaW5xX3JlcG9ydF9uaWNfdHMocHJpdiwgcHJpdi1cdTAwM2VuaWNfdHNfcmVwb3J0X2J1cyk7XG4gIDIwOlx0XHRpZiAoZXJyKVxuICAyMTpcdFx0XHRyZXR1cm4gZXJyO1xuICAyMjpcdFxuICAyMzpcdFx0bmljX3JhdyA9IGJlNjRfdG9fY3B1KHByaXYtXHUwMDNlbmljX3RzX3JlcG9ydC1cdTAwM2VuaWNfdGltZXN0YW1wKTtcbiAgMjQ6XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VsYXN0X3N5bmNfbmljX2NvdW50ZXIsIG5pY19yYXcpO1xuICAyNTpcdFxuICAyNjpcdFx0cmV0dXJuIDA7XG4gIDI3Olx0fVxuICAyODpcdFxuICAyOTpcdHN0YXRpYyBpbnQgZ3ZlX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4gIDMwOlx0e1xuICAzMTpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuICAzMjpcdH1cbiAgMzM6XHRcbiAgMzQ6XHRzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4gIDM1Olx0XHRcdFx0ICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuICAzNjpcdFx0XHRcdCAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuICAzNzpcdHtcbiAgMzg6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAgMzk6XHR9XG4gIDQwOlx0XG4gIDQxOlx0c3RhdGljIGludCBndmVfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4gIDQyOlx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gIDQzOlx0e1xuICA0NDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHRzdGF0aWMgbG9uZyBndmVfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbylcbiAgNDg6XHR7XG4gIDQ5Olx0XHRjb25zdCBzdHJ1Y3QgZ3ZlX3B0cCAqcHRwID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBndmVfcHRwLCBpbmZvKTtcbiAgNTA6XHRcdHN0cnVjdCBndmVfcHJpdiAqcHJpdiA9IHB0cC1cdTAwM2Vwcml2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBEZWNpc2lvbjogR1ZFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIEdWRSBkcml2ZXIsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIGZvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLCB3aGVyZSBzeXprYWxsZXIgaXMgcnVubmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSBQVFAgZnVuY3Rpb25zIGp1c3QgcmV0dXJuIGAtRU9QTk9UU1VQUGAsIHNvIHRoYXQgaXMgbm90IGdvaW5nIHRvIGJlIHdvcnRoIGZ1enppbmcsIHRoYXQgZG9lcyBub3RoaW5nLiBUaGUgcmVhbCBjaGFuZ2UgaXMgdGhpcyBzaW1wbGUgYWRkaXRpb24gdG8gYGd2ZV9yeF9kcW9gOgoKYGBgYwoJCWlmICghYnVmX2xlbikgewoJCQlndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7CgkJCXJldHVybiAwOwoJCX0KYGBgCgpUaGlzIGxvb2tzIGxpa2UgYSBzaW1wbGUgZml4LCBsaWtlbHkgZm9yIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHNpbWlsYXIgaXNzdWUgd2hlbiB0aGUgYnVmZmVyIGxlbmd0aCBpcyB6ZXJvLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkLiBHVkUgKmlzKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBhbmQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRyaWdnZXIgdGhpcyBjb2RlLCBmb3IgZXhhbXBsZSwgYnkgc2VuZGluZyBhbiBlbXB0eSBwYWNrZXQuIFNvLCBpdCAqaXMqIHJlYWNoYWJsZS4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIHNob3VsZCBJIGxpc3QgYFdvcnRoRnV6emluZz10cnVlYD8gSSBjYW4uIFRoZSBpbnN0cnVjdGlvbnMgc2F5IEkgc2hvdWxkIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIGBGb2N1c1N5bWJvbHNgLiBPa2F5LCBgZ3ZlX3J4X2Rxb2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIE5BUEkgcG9sbCBSWCBmdW5jdGlvbiBmb3IgRFFPIHF1ZXVlcywgc28gSSBjYW4gbm90IGxpc3QgdGhpcywgYXMgdGhhdCBpcyBub3QgdXNlZnVsLiBTbywgbXkgc2Vjb25kIHRob3VnaHQgaXMgdG8gbGlzdCBgZ3ZlX3B0cF9hZGpmaW5lYCB3aGljaCBpcyBhIFBUUCBjbG9jayBvcGVyYXRpb24uIFN5emthbGxlciBjYW4gY2FsbCBgY2xvY2tfYWRqdGltZWAgb24gdGhlIFBUUCBjbG9jayBkZXZpY2UsIHdoaWNoIHdvdWxkIGNhbGwgYGd2ZV9wdHBfYWRqZmluZWAuCgpTbyBpcyBpdCByZWFsbHkgd29ydGggZnV6emluZz8gSXQmIzM5O3MganVzdCBhIGNoZWNrIHRvIGZyZWUgYSBidWZmZXIgd2hlbiB0aGUgYnVmZmVyIGxlbmd0aCBpcyAwLiBCdXQgaXQgKmRvZXMqIGZpeCBhIGJ1ZyAtIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIGNyYXNoLCBhbmQgc3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgdGhpcyBieSBzZW5kaW5nIHplcm8tbGVuZ3RoIHBhY2tldHMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHdoZW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgKm11c3QqIGxpc3QgYEZvY3VzU3ltYm9sc2AuIFNvLCBpZiB0aGVyZSBhcmUgbm8gbm9uLWhvdC1wYXRoIGZ1bmN0aW9ucywgSSBjYW4ganVzdCBsZWF2ZSBGb2N1c1N5bWJvbHMgZW1wdHkgb3IgbGlzdCBgZ3ZlX3B0cF9hZGpmaW5lYC4gQnV0IGlzIHRoYXQgZXZlbiBoZWxwZnVsPyBUaGlzIGlzIHN1Y2ggYSBzaW1wbGUgcGF0Y2guLi4KCldhaXQsIGlzIGhlYWRlciBzcGxpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gR1ZFPyBUaGF0IHdvdWxkIGFmZmVjdCBob3cgbGlrZWx5IHRoaXMgaXMgdG8gYmUgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTI0Mj1zdHJ1Y3QgZ3ZlX3J4X3Jpbmcge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzEyLVx0dTY0IHJieXRlczsgLyogZnJlZS1ydW5uaW5nIGJ5dGVzIHJlY2VpdmVkICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjMxMzpcdHU2NCByeF9oc3BsaXRfYnl0ZXM7IC8qIGZyZWUtcnVubmluZyBoZWFkZXIgYnl0ZXMgcmVjZWl2ZWQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE0LVx0dTY0IHJwYWNrZXRzOyAvKiBmcmVlLXJ1bm5pbmcgcGFja2V0cyByZWNlaXZlZCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE3LVx0dTMyIG1hc2s7IC8qIG1hc2tzIHRoZSBjbnQgYW5kIGZpbGxfY250IHRvIHRoZSBzaXplIG9mIHRoZSByaW5nICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjMxODpcdHU2NCByeF9oc3BsaXRfcGt0OyAvKiBmcmVlLXJ1bm5pbmcgcGFja2V0cyB3aXRoIGhlYWRlcnMgc3BsaXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE5LVx0dTY0IHJ4X2NvcHlicmVha19wa3Q7IC8qIGZyZWUtcnVubmluZyBjb3VudCBvZiBjb3B5YnJlYWsgcGFja2V0cyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzI0LVx0LyogZnJlZS1ydW5uaW5nIGNvdW50IG9mIHVuc3BsaXQgcGFja2V0cyBkdWUgdG8gaGVhZGVyIGJ1ZmZlciBvdmVyZmxvdyBvciBoZHJfbGVuIGlzIDAgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MzI1Olx0dTY0IHJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzI2LVx0dTY0IHJ4X2NvbnRfcGFja2V0X2NudDsgLyogZnJlZS1ydW5uaW5nIG11bHRpLWZyYWdtZW50IHBhY2tldHMgcmVjZWl2ZWQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyNjU9aW50IGd2ZV9zZXRfcnhfYnVmX2xlbl9jb25maWcoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgcnhfYnVmX2xlbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyNjctXHRcdFx0ICAgICAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyNjg6aW50IGd2ZV9zZXRfaHNwbGl0X2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHU4IHRjcF9kYXRhX3NwbGl0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjY5LVx0XHRcdCAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTQyPXN0YXRpYyBjb25zdCBjaGFyIGd2ZV9nc3RyaW5nc19tYWluX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo0MzpcdFwmIzM0O3J4X3BhY2tldHNcJiMzNDssIFwmIzM0O3J4X2hzcGxpdF9wa3RcJiMzNDssIFwmIzM0O3R4X3BhY2tldHNcJiMzNDssIFwmIzM0O3J4X2J5dGVzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTQ0LVx0XCYjMzQ7dHhfYnl0ZXNcJiMzNDssIFwmIzM0O3J4X2Ryb3BwZWRcJiMzNDssIFwmIzM0O3R4X2Ryb3BwZWRcJiMzNDssIFwmIzM0O3R4X3RpbWVvdXRzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTQ1LVx0XCYjMzQ7cnhfc2tiX2FsbG9jX2ZhaWxcJiMzNDssIFwmIzM0O3J4X2J1Zl9hbGxvY19mYWlsXCYjMzQ7LCBcJiMzNDtyeF9kZXNjX2Vycl9kcm9wcGVkX3BrdFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo0NjpcdFwmIzM0O3J4X2hzcGxpdF91bnNwbGl0X3BrdFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy00Ny1cdFwmIzM0O2ludGVyZmFjZV91cF9jbnRcJiMzNDssIFwmIzM0O2ludGVyZmFjZV9kb3duX2NudFwmIzM0OywgXCYjMzQ7cmVzZXRfY250XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz01MT1zdGF0aWMgY29uc3QgY2hhciBndmVfZ3N0cmluZ3Nfcnhfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTUyLVx0XCYjMzQ7cnhfcG9zdGVkX2Rlc2NbJXVdXCYjMzQ7LCBcJiMzNDtyeF9jb21wbGV0ZWRfZGVzY1sldV1cJiMzNDssIFwmIzM0O3J4X2NvbnN1bWVkX2Rlc2NbJXVdXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjUzOlx0XCYjMzQ7cnhfYnl0ZXNbJXVdXCYjMzQ7LCBcJiMzNDtyeF9oc3BsaXRfYnl0ZXNbJXVdXCYjMzQ7LCBcJiMzNDtyeF9jb250X3BhY2tldF9jbnRbJXVdXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTU0LVx0XCYjMzQ7cnhfZnJhZ19mbGlwX2NudFsldV1cJiMzNDssIFwmIzM0O3J4X2ZyYWdfY29weV9jbnRbJXVdXCYjMzQ7LCBcJiMzNDtyeF9mcmFnX2FsbG9jX2NudFsldV1cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTE0OT1ndmVfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxNTI6XHR1NjQgdG1wX3J4X3BrdHMsIHRtcF9yeF9oc3BsaXRfcGt0LCB0bXBfcnhfYnl0ZXMsIHRtcF9yeF9oc3BsaXRfYnl0ZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUzLVx0XHR0bXBfcnhfc2tiX2FsbG9jX2ZhaWwsIHRtcF9yeF9idWZfYWxsb2NfZmFpbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxNTQ6XHRcdHRtcF9yeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCwgdG1wX3J4X2hzcGxpdF91bnNwbGl0X3BrdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0xNTUtXHRcdHRtcF90eF9wa3RzLCB0bXBfdHhfYnl0ZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTU2LVx0XHR0bXBfeGRwX3R4X2Vycm9ycywgdG1wX3hkcF9yZWRpcmVjdF9lcnJvcnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTU3Olx0dTY0IHJ4X2J1Zl9hbGxvY19mYWlsLCByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCwgcnhfaHNwbGl0X3Vuc3BsaXRfcGt0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjE1ODpcdFx0cnhfcGt0cywgcnhfaHNwbGl0X3BrdCwgcnhfc2tiX2FsbG9jX2ZhaWwsIHJ4X2J5dGVzLCB0eF9wa3RzLCB0eF9ieXRlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0xNTktXHRcdHR4X2Ryb3BwZWQsIHhkcF90eF9lcnJvcnMsIHhkcF9yZWRpcmVjdF9lcnJvcnM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxOTg6XHRmb3IgKHJ4X3BrdHMgPSAwLCByeF9ieXRlcyA9IDAsIHJ4X2hzcGxpdF9wa3QgPSAwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5OS1cdCAgICAgcnhfc2tiX2FsbG9jX2ZhaWwgPSAwLCByeF9idWZfYWxsb2NfZmFpbCA9IDAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjAwOlx0ICAgICByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCA9IDAsIHJ4X2hzcGxpdF91bnNwbGl0X3BrdCA9IDAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjAxLVx0ICAgICB4ZHBfdHhfZXJyb3JzID0gMCwgeGRwX3JlZGlyZWN0X2Vycm9ycyA9IDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIxMC1cdFx0XHRcdHRtcF9yeF9wa3RzID0gcngtXHUwMDNlcnBhY2tldHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjExOlx0XHRcdFx0dG1wX3J4X2hzcGxpdF9wa3QgPSByeC1cdTAwM2VyeF9oc3BsaXRfcGt0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIxMi1cdFx0XHRcdHRtcF9yeF9ieXRlcyA9IHJ4LVx1MDAzZXJieXRlcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjE2LVx0XHRcdFx0XHRyeC1cdTAwM2VyeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMTc6XHRcdFx0XHR0bXBfcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMTg6XHRcdFx0XHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTktXHRcdFx0XHR0bXBfeGRwX3R4X2Vycm9ycyA9IHJ4LVx1MDAzZXhkcF90eF9lcnJvcnM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIyNC1cdFx0XHRyeF9wa3RzICYjNDM7PSB0bXBfcnhfcGt0cztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMjU6XHRcdFx0cnhfaHNwbGl0X3BrdCAmIzQzOz0gdG1wX3J4X2hzcGxpdF9wa3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjI2LVx0XHRcdHJ4X2J5dGVzICYjNDM7PSB0bXBfcnhfYnl0ZXM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIyOS1cdFx0XHRyeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCAmIzQzOz0gdG1wX3J4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjIzMDpcdFx0XHRyeF9oc3BsaXRfdW5zcGxpdF9wa3QgJiM0Mzs9IHRtcF9yeF9oc3BsaXRfdW5zcGxpdF9wa3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjMxLVx0XHRcdHhkcF90eF9lcnJvcnMgJiM0Mzs9IHRtcF94ZHBfdHhfZXJyb3JzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yNTItXHRkYXRhW2kmIzQzOyYjNDM7XSA9IHJ4X3BrdHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjUzOlx0ZGF0YVtpJiM0MzsmIzQzO10gPSByeF9oc3BsaXRfcGt0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTI1NC1cdGRhdGFbaSYjNDM7JiM0MztdID0gdHhfcGt0cztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjY0LVx0ZGF0YVtpJiM0MzsmIzQzO10gPSByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyNjU6XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yNjYtXHRkYXRhW2kmIzQzOyYjNDM7XSA9IHByaXYtXHUwMDNlaW50ZXJmYWNlX3VwX2NudDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzMyLVx0XHRcdFx0dG1wX3J4X2J5dGVzID0gcngtXHUwMDNlcmJ5dGVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjMzMzpcdFx0XHRcdHRtcF9yeF9oc3BsaXRfYnl0ZXMgPSByeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzM0LVx0XHRcdFx0dG1wX3J4X3NrYl9hbGxvY19mYWlsID0gcngtXHUwMDNlcnhfc2tiX2FsbG9jX2ZhaWw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTM0My1cdFx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHRtcF9yeF9ieXRlcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzozNDQ6XHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSB0bXBfcnhfaHNwbGl0X2J5dGVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTM0NS1cdFx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHJ4LVx1MDAzZXJ4X2NvbnRfcGFja2V0X2NudDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9NjA2PXN0YXRpYyBpbnQgZ3ZlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtNjIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjYyMzpcdGVyciA9IGd2ZV9zZXRfaHNwbGl0X2NvbmZpZyhwcml2LCBrZXJuZWxfY21kLVx1MDAzZXRjcF9kYXRhX3NwbGl0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTYyNC1cdFx0XHRcdCAgICBcdTAwMjZyeF9hbGxvY19jZmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMTExPWludCBndmVfc2V0X3J4X2J1Zl9sZW5fY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIHJ4X2J1Zl9sZW4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjE0MzppbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE0NC1cdFx0XHQgIHN0cnVjdCBndmVfcnhfYWxsb2NfcmluZ3NfY2ZnICpyeF9hbGxvY19jZmcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9ODE1PXN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODIxLVx0Y29uc3QgYm9vbCBlb3AgPSBjb21wbF9kZXNjLVx1MDAzZWVuZF9vZl9wYWNrZXQgIT0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgyMjpcdGNvbnN0IGJvb2wgaHNwbGl0ID0gY29tcGxfZGVzYy1cdTAwM2VzcGxpdF9oZWFkZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MjMtXHRzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04NjMtXHQvKiBDb3B5IHRoZSBoZWFkZXIgaW50byB0aGUgc2tiIGluIHRoZSBjYXNlIG9mIGhlYWRlciBzcGxpdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODY0Olx0aWYgKGhzcGxpdCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODY1LVx0XHRpbnQgdW5zcGxpdCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODg0LVx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4ODU6XHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF9wa3QmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODg2Olx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgJiM0Mzs9IHVuc3BsaXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4ODc6XHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF9ieXRlcyAmIzQzOz0gaGRyX2xlbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTg4OC1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cngtXHUwMDNlc3RhdHNzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBHVkUgRHJpdmVyIEhlYWRlciBTcGxpdCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgYnVnIHJlbGF0ZWQgdG8gaGVhZGVyIHNwbGl0IGluIHRoZSBHVkUgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGRlY2lkZSBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHdpdGggU3l6a2FsbGVyLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYGJ1Zl9sZW5gIGlzIHplcm8sIGFuZCBoZWFkZXIgc3BsaXQgaXMgZW5hYmxlZCwgYGd2ZV9yeF9kcW9gIGhhcyBhIHByb2JsZW0gd2hpY2ggaXMgZml4ZWQgYnkgYSByZWNlbnQgcGF0Y2guCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgR1ZFICppcyogcmVhY2hhYmxlIHNpbmNlIFN5emthbGxlciBydW5zIG9uIEdDRSwgd2hpY2ggdXNlcyB0aGUgR1ZFIGRyaXZlciBhcyBpdHMgbmV0d29yayBpbnRlcmZhY2UuIEFsc28sIFN5emthbGxlciAqY2FuKiBlbmFibGUgaGVhZGVyIHNwbGl0IHVzaW5nIGBldGh0b29sYCB0aHJvdWdoIGBndmVfc2V0X3JpbmdwYXJhbWAgLSZndDsgYGd2ZV9zZXRfaHNwbGl0X2NvbmZpZ2AuIFRoZW4sIFN5emthbGxlciBjYW4gZ2VuZXJhdGUgZW1wdHkgcGF5bG9hZCBwYWNrZXRzIChhIGxpa2VseSBzY2VuYXJpbywgZm9yIGluc3RhbmNlLCBhIFRDUCBBQ0spLiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBmYXVsdHkgYCFidWZfbGVuYCBjaGVjay4KClNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBkcml2ZXIhIFllcywgaXQmIzM5O3Mgd29ydGggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBUaGVyZSYjMzk7cyBgZ3ZlX3B0cF9hZGpmaW5lYCwgd2hpY2ggaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBndmVfcnhfZHFvYC4gSSAqdGhpbmsqIGBndmVfcHRwX2FkamZpbmVgIGp1c3QgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBOb3QgZXhhY3RseSBhIGhvdCBwYXRoLCBhbmQgcHJvYmFibHkgbm90IHRoYXQgZnJ1aXRmdWwgZm9yIGZ1enppbmcsIGJ1dCBpdCAqaXMqIGEgdmFsaWQgc3ltYm9sLiBJdCBsb29rcyBsaWtlIGl0IGlzIHRoZSBvbmx5IG90aGVyIGZ1bmN0aW9uIG1vZGlmaWVkLgoKRm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTtsbCBpbmNsdWRlIGBndmVfcHRwX2FkamZpbmVgLgoKQXMgZm9yIGBFbmFibGVDb25maWdzYCwgYENPTkZJR19HVkVgIGlzIHRoZSBHVkUgZHJpdmVyIGNvbmZpZy4gRXZlbiB0aG91Z2ggc3l6a2FsbGVyJiMzOTtzIEdDRSBjb25maWcgKnNob3VsZCogYWxyZWFkeSBoYXZlIGBDT05GSUdfR1ZFYCBlbmFibGVkLCBJIHNob3VsZCBsaXN0IGl0IGFueXdheSB0byBiZSBzYWZlIGFuZCBleHBsaWNpdC4KTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGVuYWJsZWQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0I1xuICAgMjpcdCMgR29vZ2xlIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDM6XHQjXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIE5FVF9WRU5ET1JfR09PR0xFXG4gICA2Olx0XHRib29sIFwmIzM0O0dvb2dsZSBEZXZpY2VzXCYjMzQ7XG4gICA3Olx0XHRkZWZhdWx0IHlcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDEyOlx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTM6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBHb29nbGUgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxuICAxNDpcdFx0ICBmb3IgeW91ciBzcGVjaWZpYyBkZXZpY2UgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1ZFTkRPUl9HT09HTEVcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgR1ZFXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtHb29nbGUgVmlydHVhbCBOSUMgKGdWTklDKSBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIChQQ0lfTVNJIFx1MDAyNlx1MDAyNiAoWDg2IHx8IENQVV9MSVRUTEVfRU5ESUFOKSlcbiAgMjE6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMjI6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQylcJiMzNDtcbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMjc6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBndmUuXG4gIDI4Olx0XG4gIDI5Olx0ZW5kaWYgI05FVF9WRU5ET1JfR09PR0xFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjkzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE2NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEdWRSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCB3aGlsZSBzZWVtaW5nbHkgbWlub3IsIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IGV4cGxvaXRhYmxlIGNoYW5nZXMgd2l0aGluIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4KCkZpcnN0LCBJIGlkZW50aWZpZWQgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIEdDRSBhbmQgUUVNVSBhcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFNpbmNlIHN5emthbGxlciAqcHJpbWFyaWx5KiB0YXJnZXRzIEdDRSwgYW5kIEdWRSBpcyB0aGUgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgR0NFLCB0aGUgY29kZSBpcyBpbmRlZWQgcmVhY2hhYmxlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoYXQsIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZSBjbGVhciBleGNlcHRpb25zLgoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNlZToKCiogICBUaGUgYWRkaXRpb24gb2YgYGd2ZV9wdHBfYWRqZmluZWAgaW4gYGd2ZV9wdHAuY2AsIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBzZWVtcyBzaW1wbGUsIGJ1dCBpdCYjMzk7cyBub3cgYW4gZXhwb3NlZCBmdW5jdGlvbiBhbmQgY291bGQgYmUgYSBwb2ludCBvZiBhdHRhY2suCiogICBBIGNoZWNrIGZvciBgIWJ1Zl9sZW5gIGluIGBndmVfcnhfZHFvYCB3aXRoaW4gYGd2ZV9yeF9kcW8uY2AuIFRoaXMgaXMgYSBidWcgZml4IHRoYXQgcHJldmVudHMgcHJvY2Vzc2luZyBvZiBhIHplcm8tbGVuZ3RoIHBhY2tldCBidWZmZXIuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhlIGNoYW5nZXMgd2VyZSB0cml2aWFsIGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgd2FzIHNtYWxsLiBCdXQgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEkmIzM5O20gbm90IGxvb2tpbmcgYXQgKmltcGFjdCosIEkmIzM5O20gbG9va2luZyBmb3IgYSBtb2RpZmNhdGlvbiB0byBrZXJuZWwgbG9naWMgaW4gYSByZWFjaGFibGUgYXJlYS4KCkkgcmV2aWV3ZWQgdGhlIGV4Y2x1c2lvbnMgbGlzdC4gTm9uZSBvZiB0aGUgZXhjbHVzaW9ucyBhcHBseTogbm90IGRvY3VtZW50YXRpb24sIG5vIGNvbmZpZyBjaGFuZ2VzLCBubyBkZWNvcmF0aXZlIGNoYW5nZXMsIG5vdCBhIFBDSSBkcml2ZXIgcmVtb3ZlLCBpdCBpcyBjb3JlIGtlcm5lbCBsb2dpYy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmxhZyBpdCBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9sIHNob3VsZCBiZSBgZ3ZlX3B0cF9hZGpmaW5lYC4gV2hpbGUgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYC5hZGpmaW5lYCkgd2l0aGluIGBndmVfcHRwX2NhcHNgLCBtZWFuaW5nIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gSXQgYWN0cyBhcyBhbiBBUEkgZW50cnlwb2ludCBmb3IgdGhlIFBUUCBzdWJzeXN0ZW0uIGBndmVfcnhfZHFvYCBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uIHNvIEkmIzM5O20gc2tpcHBpbmcgaXQuCgpUaGUgY29uZmlndXJhdGlvbnMgSSYjMzk7dmUgY29uZmlybWVkIGFyZSBgTkVUX1ZFTkRPUl9HT09HTEVgIGFuZCBgR1ZFYC4gYEdWRWAgZGVwZW5kcyBvbiBgUENJX01TSWAgYW5kIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgYSBoZWxwZXIsIGFuZCBgUENJX01TSWAgaXMgc3RhbmRhcmQsIHNvIHRoZXNlIGFyZSBub3QgbmVlZGVkLgoKVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIFBUUCBjbG9jayBvcGVyYXRpb24sIGBndmVfcHRwX2FkamZpbmVgLCBhbmQgYSBjaGFuZ2UgaW4gUlggZmFzdCBwYXRoLCBgZ3ZlX3J4X2Rxb2AsIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIEdWRSBpcyBleHBsaWNpdGx5IHVzZWQgaW4gR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfcHRwX2FkamZpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfcHRwX2FkamZpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSW4gYGd2ZV9wdHAuY2AsIGl0IGFkZHMgYSBzdHViIGZvciBgYWRqZmluZWAgKGBndmVfcHRwX2FkamZpbmVgKSB3aGljaCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFBUUCBjb3JlIChgcHRwX2Nsb2NrX2FkanRpbWVgKSB3aGVuIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MTZjNDAyODZlNWUxMWNjYWU4NTJkZTdjZDExZWJiMjQwZTNlYTc3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMKaW5kZXggMDZiMWNmNGE1ZWZjYy4uMWQ2YzU5ZjRlYWQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMKQEAgLTI2LDYgJiM0MzsyNiwxMSBAQCBpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3ZlX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBndmVfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAogCQkJICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCkBAIC02MCw2ICYjNDM7NjUsNyBAQCBzdGF0aWMgbG9uZyBndmVfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbykKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZ3ZlX3B0cF9jYXBzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICYjMzQ7Z3ZlIGNsb2NrJiMzNDssCiYjNDM7CS5hZGpmaW5lCT0gZ3ZlX3B0cF9hZGpmaW5lLAogCS5nZXR0aW1leDY0CT0gZ3ZlX3B0cF9nZXR0aW1leDY0LAogCS5zZXR0aW1lNjQJPSBndmVfcHRwX3NldHRpbWU2NCwKIAkuZG9fYXV4X3dvcmsJPSBndmVfcHRwX2RvX2F1eF93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYwppbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYwpAQCAtODg2LDYgJiM0Mzs4ODYsMTEgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwKIAkJcngtJmd0O3J4X2hzcGxpdF91bnNwbGl0X3BrdCAmIzQzOz0gdW5zcGxpdDsKIAkJcngtJmd0O3J4X2hzcGxpdF9ieXRlcyAmIzQzOz0gaGRyX2xlbjsKIAkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeC0mZ3Q7c3RhdHNzKTsKJiM0MzsKJiM0MzsJCWlmICghYnVmX2xlbikgewomIzQzOwkJCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKCFyeC0mZ3Q7Y3R4LnNrYl9oZWFkICZhbXA7JmFtcDsgcngtJmd0O2Rxby5wYWdlX3Bvb2wgJmFtcDsmYW1wOwogCQkgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtJmd0O3BhZ2VfaW5mby5uZXRtZW0pKSB7CiAJCS8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlci4gSXQmIzM5O3MgdG91Y2hpbmcgYGd2ZV9wdHAuY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBUaGUgYGd2ZV9wdHAuY2AgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgYGd2ZV9wdHBfYWRqZmluZWAgZnVuY3Rpb24gdGhhdCBqdXN0IHJldHVybnMgYC1FT1BOT1RTVVBQYCBhbmQgcmVnaXN0ZXJpbmcgaXQuIE5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGp1c3QgYSBwbGFjZWhvbGRlciBvciBzdHViLCBpdCBzZWVtcy4KClRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gYGd2ZV9yeF9kcW8uY2AuIEkgc2VlIHRoZSBgZ3ZlX3J4X2Rxb2AgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIFRoZXJlJiMzOTtzIHRoaXMgbmV3IGNoZWNrIGFkZGVkOiBgaWYgKCFidWZfbGVuKWAuIEl0JiMzOTtzIGEgY29uZGl0aW9uYWwgYWZ0ZXIgc29tZSBzdGF0aXN0aWNzIHVwZGF0ZXMsIGFuZCwgaWYgYGJ1Zl9sZW5gIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IGZyZWVzIHRoZSBidWZmZXIgdXNpbmcgYGd2ZV9mcmVlX2J1ZmZlcmAgYW5kIHJldHVybnMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBoYXMgdG8gYmUgZml4aW5nIGEgYnVnLiBBIHplcm8gYGJ1Zl9sZW5gIGxpa2VseSBpbmRpY2F0ZXMgc29tZXRoaW5nIHdlbnQgd3JvbmcgZWFybGllciBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcsIHBlcmhhcHMuIEl0JiMzOTtzIGEgY2xhc3NpYyBzY2VuYXJpbzogdGhlIGNvZGUgbWlnaHQgaGF2ZSBiZWVuIHByb2NlZWRpbmcgYXMgaWYgdGhlcmUgd2FzIGEgdmFsaWQgZGF0YSBidWZmZXIgd2hlbiB0aGVyZSB3YXMgbm9uZS4gVGhpcyBjb3VsZCBtYW5pZmVzdCBpbiB2YXJpb3VzIHdheXMgZG93biB0aGUgbGluZTogY3JlYXRpbmcgYW4gZW1wdHkgU0tCIGZyYWdtZW50LCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBkYW5nZXJvdXMgb3V0LW9mLWJvdW5kcyByZWFkLCBvciB3cml0ZS4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqb3IgZXhwb3NlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IElmIGBidWZfbGVuYCBpcyAwLCBpdCBtZWFucyB0aGUgYnVmZmVyIGNvbnRlbnQgaXMgbm90IHZhbGlkLCBhbmQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucyBvbiBpdCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV2ZW4gdHJpZ2dlciBhIGNyYXNoIG9yIGNvcnJ1cHRpb24uIEJlZm9yZSwgaXQgd2FzIHBvdGVudGlhbGx5IHBhc3NpbmcgYSBidWZmZXIgb2YgbGVuZ3RoIHplcm8gdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGlzIHBhdGNoIHdvdWxkIGhhdmUgcHJldmVudGVkIGl0IG5vdy4KCkkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGlzIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGd2ZV9yeF9kcW8uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4ODYsIHRvIHVuZGVyc3RhbmQgKndoeSogYGJ1Zl9sZW5gIG1pZ2h0IGJlIHplcm8gaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCBjb3VsZCBoYXZlIGJlZW4gaGFwcGVuaW5nIHdpdGggdGhhdCB6ZXJvLWxlbmd0aCBidWZmZXIgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHJvb3QgY2F1c2UgaXMgY3J1Y2lhbCB0byBlbnN1cmluZyB0aGlzIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLiBJdCBmZWVscyBsaWtlIGEgZ29vZCBjYXRjaCwgcG90ZW50aWFsbHkgcHJldmVudGluZyBhIGNsYXNzIG9mIGJ1ZmZlci1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX3J4X2RxbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTc5Mz1zdGF0aWMgdm9pZCBndmVfZG1hX3N5bmMoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTgxNC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgxNTpzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODE2LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZ3ZlX3J4X2NvbXBsX2Rlc2NfZHFvICpjb21wbF9kZXNjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwODA9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExMTk6XHRcdGVyciA9IGd2ZV9yeF9kcW8obmFwaSwgcngsIGNvbXBsX2Rlc2MsIGNvbXBscS1cdTAwM2VoZWFkLCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTIwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBndmVfcnhfZHFvLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBndmVfcnhfZHFvLmNgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgODg2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBsaWtlbHkgaG91c2VzIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgZ2l2ZW4gbXkgY3VycmVudCBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGFueSByZWxhdGVkIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGxhc3QgdGltZSBJIGxvb2tlZCBpbnRvIHRoaXMgbW9kdWxlIC0gd2hlcmUgZGlkIEkgbGVhdmUgb2ZmPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYmVmb3JlIGRpdmluZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0aWYgKGJ1Zl9zdGF0ZS1cdTAwM2V4c2tfYnVmZilcbiA4NTE6XHRcdFx0cmV0dXJuIGd2ZV9yeF94c2tfZHFvKG5hcGksIHJ4LCBjb21wbF9kZXNjLCBidWZfc3RhdGUsIHhwcm9nKTtcbiA4NTI6XHRcbiA4NTM6XHRcdC8qIFBhZ2UgbWlnaHQgaGF2ZSBub3QgYmVlbiB1c2VkIGZvciBhd2hpbGUgYW5kIHdhcyBsaWtlbHkgbGFzdCB3cml0dGVuXG4gODU0Olx0XHQgKiBieSBhIGRpZmZlcmVudCB0aHJlYWQuXG4gODU1Olx0XHQgKi9cbiA4NTY6XHRcdGlmIChyeC1cdTAwM2VkcW8ucGFnZV9wb29sKSB7XG4gODU3Olx0XHRcdGlmICghbmV0bWVtX2lzX25ldF9pb3YoYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKVxuIDg1ODpcdFx0XHRcdHByZWZldGNoKG5ldG1lbV90b19wYWdlKGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ubmV0bWVtKSk7XG4gODU5Olx0XHR9IGVsc2Uge1xuIDg2MDpcdFx0XHRwcmVmZXRjaChidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZ2UpO1xuIDg2MTpcdFx0fVxuIDg2MjpcdFxuIDg2MzpcdFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cbiA4NjQ6XHRcdGlmIChoc3BsaXQpIHtcbiA4NjU6XHRcdFx0aW50IHVuc3BsaXQgPSAwO1xuIDg2NjpcdFxuIDg2NzpcdFx0XHRpZiAoaGRyX2xlbiBcdTAwMjZcdTAwMjYgIWhibykge1xuIDg2ODpcdFx0XHRcdHNpemVfdCBvZmZzZXQgPVxuIDg2OTpcdFx0XHRcdFx0KHNpemVfdClidWZmZXJfaWQgKiBwcml2LVx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcbiA4NzA6XHRcbiA4NzE6XHRcdFx0XHRyeC1cdTAwM2VjdHguc2tiX2hlYWQgPVxuIDg3MjpcdFx0XHRcdFx0Z3ZlX3J4X2NvcHlfZGF0YShwcml2LVx1MDAzZWRldiwgbmFwaSxcbiA4NzM6XHRcdFx0XHRcdFx0XHQgcngtXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgJiM0Mzsgb2Zmc2V0LFxuIDg3NDpcdFx0XHRcdFx0XHRcdCBoZHJfbGVuKTtcbiA4NzU6XHRcdFx0XHRpZiAodW5saWtlbHkoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZCkpXG4gODc2Olx0XHRcdFx0XHRnb3RvIGVycm9yO1xuIDg3NzpcdFx0XHRcdHJ4LVx1MDAzZWN0eC5za2JfdGFpbCA9IHJ4LVx1MDAzZWN0eC5za2JfaGVhZDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdFx0XHRpZiAocngtXHUwMDNlZHFvLnBhZ2VfcG9vbClcbiA4ODA6XHRcdFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHJ4LVx1MDAzZWN0eC5za2JfaGVhZCk7XG4gODgxOlx0XHRcdH0gZWxzZSB7XG4gODgyOlx0XHRcdFx0dW5zcGxpdCA9IDE7XG4gODgzOlx0XHRcdH1cbiA4ODQ6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDg4NTpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfcGt0JiM0MzsmIzQzOztcbiA4ODY6XHRcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0O1xuIDg4NzpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXMgJiM0Mzs9IGhkcl9sZW47XG4gODg4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4gODg5Olx0XG4gODkwOlx0XHRcdGlmICghYnVmX2xlbikge1xuIDg5MTpcdFx0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiA4OTI6XHRcdFx0XHRyZXR1cm4gMDtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0fSBlbHNlIGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkIFx1MDAyNlx1MDAyNiByeC1cdTAwM2VkcW8ucGFnZV9wb29sIFx1MDAyNlx1MDAyNlxuIDg5NTpcdFx0XHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcbiA4OTY6XHRcdFx0Lyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0XG4gODk3Olx0XHRcdCAqIGJ1ZmZlci4gSWYgdGhlIHBhY2tldCBidWZmZXIgaXMgYSBuZXRfaW92LCB0aG9zZSBjYW4mIzM5O3QgYmVcbiA4OTg6XHRcdFx0ICogZWFzaWx5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgc3BhY2UgdG8gYWNjZXNzIHRoZSBoZWFkZXJcbiA4OTk6XHRcdFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxuIDkwMDpcdFx0XHQgKi9cbiA5MDE6XHRcdFx0Z290byBlcnJvcjtcbiA5MDI6XHRcdH1cbiA5MDM6XHRcbiA5MDQ6XHRcdC8qIFN5bmMgdGhlIHBvcnRpb24gb2YgZG1hIGJ1ZmZlciBmb3IgQ1BVIHRvIHJlYWQuICovXG4gOTA1Olx0XHRndmVfZG1hX3N5bmMocHJpdiwgcngsIGJ1Zl9zdGF0ZSwgYnVmX2xlbik7XG4gOTA2Olx0XG4gOTA3Olx0XHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cbiA5MDg6XHRcdGlmIChyeC1cdTAwM2VjdHguc2tiX2hlYWQpIHtcbiA5MDk6XHRcdFx0aWYgKHVubGlrZWx5KGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCxcbiA5MTA6XHRcdFx0XHRcdFx0XHQgcHJpdikpICE9IDApIHtcbiA5MTE6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDkxMjpcdFx0XHR9XG4gOTEzOlx0XHRcdHJldHVybiAwO1xuIDkxNDpcdFx0fVxuIDkxNTpcdFxuIDkxNjpcdFx0aWYgKHhwcm9nKSB7XG4gOTE3Olx0XHRcdHN0cnVjdCBndmVfeGRwX2J1ZmYgZ3ZlX3hkcDtcbiA5MTg6XHRcdFx0dm9pZCAqb2xkX2RhdGE7XG4gOTE5Olx0XHRcdGludCB4ZHBfYWN0O1xuIDkyMDpcdFxuIDkyMTpcdFx0XHR4ZHBfaW5pdF9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLCBidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplLFxuIDkyMjpcdFx0XHRcdCAgICAgIFx1MDAyNnJ4LVx1MDAzZXhkcF9yeHEpO1xuIDkyMzpcdFx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLFxuIDkyNDpcdFx0XHRcdFx0IGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFnZV9hZGRyZXNzICYjNDM7XG4gOTI1Olx0XHRcdFx0XHQgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCxcbiA5MjY6XHRcdFx0XHRcdCBidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZCxcbiA5Mjc6XHRcdFx0XHRcdCBidWZfbGVuLCBmYWxzZSk7XG4gOTI4Olx0XHRcdGd2ZV94ZHAuZ3ZlID0gcHJpdjtcbiA5Mjk6XHRcdFx0Z3ZlX3hkcC5jb21wbF9kZXNjID0gY29tcGxfZGVzYztcbiA5MzA6XHRcbiA5MzE6XHRcdFx0b2xkX2RhdGEgPSBndmVfeGRwLnhkcC5kYXRhO1xuIDkzMjpcdFx0XHR4ZHBfYWN0ID0gYnBmX3Byb2dfcnVuX3hkcCh4cHJvZywgXHUwMDI2Z3ZlX3hkcC54ZHApO1xuIDkzMzpcdFx0XHRidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZCAmIzQzOz0gZ3ZlX3hkcC54ZHAuZGF0YSAtIG9sZF9kYXRhO1xuIDkzNDpcdFx0XHRidWZfbGVuID0gZ3ZlX3hkcC54ZHAuZGF0YV9lbmQgLSBndmVfeGRwLnhkcC5kYXRhO1xuIDkzNTpcdFx0XHRpZiAoeGRwX2FjdCAhPSBYRFBfUEFTUykge1xuIDkzNjpcdFx0XHRcdGd2ZV94ZHBfZG9uZV9kcW8ocHJpdiwgcngsIFx1MDAyNmd2ZV94ZHAueGRwLCB4cHJvZywgeGRwX2FjdCxcbiA5Mzc6XHRcdFx0XHRcdFx0IGJ1Zl9zdGF0ZSk7XG4gOTM4Olx0XHRcdFx0cmV0dXJuIDA7XG4gOTM5Olx0XHRcdH1cbiA5NDA6XHRcbiA5NDE6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDk0MjpcdFx0XHRyeC1cdTAwM2V4ZHBfYWN0aW9uc1tYRFBfUEFTU10mIzQzOyYjNDM7O1xuIDk0MzpcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDk0NDpcdFx0fVxuIDk0NTpcdFxuIDk0NjpcdFx0aWYgKGVvcCBcdTAwMjZcdTAwMjYgYnVmX2xlbiBcdTAwM2M9IHByaXYtXHUwMDNlcnhfY29weWJyZWFrIFx1MDAyNlx1MDAyNlxuIDk0NzpcdFx0ICAgICEocngtXHUwMDNlZHFvLnBhZ2VfcG9vbCBcdTAwMjZcdTAwMjZcbiA5NDg6XHRcdCAgICAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ubmV0bWVtKSkpIHtcbiA5NDk6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl9oZWFkID0gZ3ZlX3J4X2NvcHkocHJpdi1cdTAwM2VkZXYsIG5hcGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDIKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGBndmVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUlggcGF0aC4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGhhbmRsaW5nIGEgYGJ1Zl9sZW5gIG9mIHplcm8sIHdoaWNoIHNlZW1zIHRvIGluZGljYXRlIGFuIGVtcHR5IGJ1ZmZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd2FzbiYjMzk7dCBncmFjZWZ1bGx5IGhhbmRsaW5nIHRoaXMgZWRnZSBjYXNlLgoKTG9va2luZyBhdCB0aGUgYWRkZWQgY29kZSwgdGhlIGNydWNpYWwgbGluZSBpcyBgaWYgKCFidWZfbGVuKSB7IGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsgcmV0dXJuIDA7IH1gLiAgVGhpcyBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBzaG9ydC1jaXJjdWl0LiBJZiBgYnVmX2xlbmAgaXMgemVybywgbWVhbmluZyB0aGUgYnVmZmVyIGlzIGVtcHR5LCB3ZSBmcmVlIGl0IGltbWVkaWF0ZWx5IGFuZCByZXR1cm4uIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlcmUmIzM5O3Mgbm8gZGF0YSB0byBwcm9jZXNzLCBzbyB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBhdGguCgpCZWZvcmUgdGhpcyBmaXgsIGhvd2V2ZXIsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQgZXZlbiB3aGVuIGBidWZfbGVuYCB3YXMgemVyby4gSXQgd291bGQgY2FsbCBgZ3ZlX2RtYV9zeW5jKHByaXYsIHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pYC4gIFRlY2huaWNhbGx5LCBzeW5jaW5nIHplcm8gYnl0ZXMgc2hvdWxkbiYjMzk7dCBiZSAqaGFybWZ1bCogcGVyIHNlLCBidXQgaXQmIzM5O3MgY2xlYXJseSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gSXQmIzM5O3MgYSB3YXN0ZSBvZiBjeWNsZXMsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoaWdoLXRocm91Z2hwdXQgbmV0d29yayB0cmFmZmljLiBUaGVuIHRoZSBjb2RlIHdvdWxkIG1vdmUgdG8gYGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCwgcHJpdilgLiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBTaW5jZSB0aGUgcHJldmlvdXMgY2FsbCBoYXBwZW5lZCB3aGVuIGBidWZfbGVuYCB3YXMgemVybywgSSYjMzk7bSBub3cgY3VyaW91czogd2hhdCBkb2VzIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCBhY3R1YWxseSAqZG8qIHdpdGggYSB6ZXJvLWxlbmd0aCBidWZmZXI/IEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGlmIHRoaXMgZnVuY3Rpb24gaGFzIHNvbWUgZ3JhY2VmdWwgaGFuZGxpbmcgZm9yIGFuIGVtcHR5IGJ1ZmZlciBvciBpZiBpdCB3b3VsZCBjYXVzZSBpc3N1ZXMgZG93bnN0cmVhbS4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgcGF0Y2gmIzM5O3MgaW1wcm92ZW1lbnQ6IGlzIHRoZSBwYXRjaCBqdXN0IGEgbWljcm8tb3B0aW1pemF0aW9uIG9yIGlzIGl0IGZpeGluZyBhIHN1YnRsZSBidWc/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9yeF9hcHBlbmRfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz01ODM9c3RhdGljIHZvaWQgZ3ZlX3NrYl9hZGRfcnhfZnJhZyhzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTYwNC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjYwNTpzdGF0aWMgaW50IGd2ZV9yeF9hcHBlbmRfZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjA2LVx0XHRcdCAgICAgICBzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz04MTU9c3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy05MDgtXHRpZiAocngtXHUwMDNlY3R4LnNrYl9oZWFkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5MDk6XHRcdGlmICh1bmxpa2VseShndmVfcnhfYXBwZW5kX2ZyYWdzKG5hcGksIGJ1Zl9zdGF0ZSwgYnVmX2xlbiwgcngsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy05MTAtXHRcdFx0XHRcdFx0IHByaXYpKSAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgOgoKKipEaXNzZWN0aW5nIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBndmVfcnhfYXBwZW5kX2ZyYWdzYC4gQmFzZWQgb24gdGhlIG5hbWUgYWxvbmUsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHJlY2VpdmluZyBkYXRhIGZyYWdtZW50cyBpbiB0aGUgY29udGV4dCBvZiB0aGUgR1ZFIGRyaXZlci4gUHJvYmFibHkgaGFuZGxpbmcgcmVhc3NlbWJseSBvciBidWZmZXIgbWFuYWdlbWVudCBvZiBzb21lIGtpbmQuIEdpdmVuIGl0JiMzOTtzIGFwcGVuZGluZyBmcmFnbWVudHMsIG15IGluaXRpYWwgZ3Vlc3MgaXMgaXQmIzM5O3Mgb3BlcmF0aW5nIGF0IHRoZSBib3R0b20gb2YgdGhlIHJlY2VpdmUgcGF0aCwgYWZ0ZXIgc29tZSBpbml0aWFsIHBhY2tldCBwcm9jZXNzaW5nLCBwZXJoYXBzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byBiZSBjZXJ0YWluLCB0aG91Z2guIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0byBncmFzcCB0aGUgbWVtb3J5IG1vZGVsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyB3YW50IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIHRvIGFzc2VzcyBwb3RlbnRpYWwgaXNzdWVzIGFuZCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgcGFydGljdWxhcmx5IGlmIGl0IGludGVyZmFjZXMgd2l0aCBETUEgb3IgaXMgdXNpbmcgc2hhcmVkIG1lbW9yeSBidWZmZXJzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNTpcdHN0YXRpYyBpbnQgZ3ZlX3J4X2FwcGVuZF9mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gNjA2Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBndmVfcnhfYnVmX3N0YXRlX2RxbyAqYnVmX3N0YXRlLFxuIDYwNzpcdFx0XHRcdCAgICAgICB1MTYgYnVmX2xlbiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiA2MDg6XHRcdFx0XHQgICAgICAgc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuIDYwOTpcdHtcbiA2MTA6XHRcdGludCBudW1fZnJhZ3MgPSBza2Jfc2hpbmZvKHJ4LVx1MDAzZWN0eC5za2JfdGFpbCktXHUwMDNlbnJfZnJhZ3M7XG4gNjExOlx0XG4gNjEyOlx0XHRpZiAodW5saWtlbHkobnVtX2ZyYWdzID09IE1BWF9TS0JfRlJBR1MpKSB7XG4gNjEzOlx0XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNjE0Olx0XG4gNjE1Olx0XHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIDApO1xuIDYxNjpcdFx0XHRpZiAoIXNrYilcbiA2MTc6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNjE4Olx0XG4gNjE5Olx0XHRcdGlmIChyeC1cdTAwM2VkcW8ucGFnZV9wb29sKVxuIDYyMDpcdFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG4gNjIxOlx0XG4gNjIyOlx0XHRcdGlmIChyeC1cdTAwM2VjdHguc2tiX3RhaWwgPT0gcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuIDYyMzpcdFx0XHRcdHNrYl9zaGluZm8ocngtXHUwMDNlY3R4LnNrYl9oZWFkKS1cdTAwM2VmcmFnX2xpc3QgPSBza2I7XG4gNjI0Olx0XHRcdGVsc2VcbiA2MjU6XHRcdFx0XHRyeC1cdTAwM2VjdHguc2tiX3RhaWwtXHUwMDNlbmV4dCA9IHNrYjtcbiA2MjY6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl90YWlsID0gc2tiO1xuIDYyNzpcdFx0XHRudW1fZnJhZ3MgPSAwO1xuIDYyODpcdFx0fVxuIDYyOTpcdFx0aWYgKHJ4LVx1MDAzZWN0eC5za2JfdGFpbCAhPSByeC1cdTAwM2VjdHguc2tiX2hlYWQpIHtcbiA2MzA6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl9oZWFkLVx1MDAzZWxlbiAmIzQzOz0gYnVmX2xlbjtcbiA2MzE6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl9oZWFkLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBidWZfbGVuO1xuIDYzMjpcdFx0XHRyeC1cdTAwM2VjdHguc2tiX2hlYWQtXHUwMDNldHJ1ZXNpemUgJiM0Mzs9IGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8uYnVmX3NpemU7XG4gNjMzOlx0XHR9XG4gNjM0Olx0XG4gNjM1Olx0XHQvKiBUcmlnZ2VyIG9uZGVtYW5kIHBhZ2UgYWxsb2NhdGlvbiBpZiB3ZSBhcmUgcnVubmluZyBsb3cgb24gYnVmZmVycyAqL1xuIDYzNjpcdFx0aWYgKGd2ZV9yeF9zaG91bGRfdHJpZ2dlcl9jb3B5X29uZGVtYW5kKHJ4KSlcbiA2Mzc6XHRcdFx0cmV0dXJuIGd2ZV9yeF9jb3B5X29uZGVtYW5kKHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xuIDYzODpcdFxuIDYzOTpcdFx0Z3ZlX3NrYl9hZGRfcnhfZnJhZyhyeCwgYnVmX3N0YXRlLCBudW1fZnJhZ3MsIGJ1Zl9sZW4pO1xuIDY0MDpcdFx0Z3ZlX3JldXNlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiA2NDE6XHRcdHJldHVybiAwO1xuIDY0MjpcdH1cbiA2NDM6XHRcbiA2NDQ6XHRzdGF0aWMgaW50IGd2ZV94ZHBfdHhfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiA2NDU6XHRcdFx0XHQgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIDY0NjpcdHtcbiA2NDc6XHRcdHN0cnVjdCBndmVfdHhfcmluZyAqdHg7XG4gNjQ4Olx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xuIDY0OTpcdFx0dTMyIHR4X3FpZDtcbiA2NTA6XHRcdGludCBlcnI7XG4gNjUxOlx0XG4gNjUyOlx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuIDY1MzpcdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xuIDY1NDpcdFx0XHRpZiAocngtXHUwMDNleHNrX3Bvb2wpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBaZXJvLUxlbmd0aCBGcmFnbWVudCBTY2VuYXJpbyBpbiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2FzZSB3aGVyZSBgYnVmX2xlbmAgaXMgemVybyB3aXRoaW4gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW1wbGljYXRpb24gb2YgYWRkaW5nIGEgemVyby1sZW5ndGggZnJhZ21lbnQuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYWRkIGEgemVyby1sZW5ndGggZnJhZ21lbnQgd2hlbiBgYnVmX2xlbmAgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvci4KCk9rYXksIGxldCBtZSBjbGFyaWZ5OiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AgKmRvZXMqIGNhbGwgYGd2ZV9za2JfYWRkX3J4X2ZyYWcocngsIGJ1Zl9zdGF0ZSwgbnVtX2ZyYWdzLCAwKWAgaWYgYGJ1Zl9sZW5gIGlzIHplcm8uIFRoZSBrZXkgaXMgaW4gdW5kZXJzdGFuZGluZyBob3cgYGd2ZV9za2JfYWRkX3J4X2ZyYWdgIGhhbmRsZXMgdGhhdCB6ZXJvIGxlbmd0aC4gSSYjMzk7dmUgZ290IHRvIHRyYWNlIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGl0IGdldHMgYSB6ZXJvIGxlbmd0aCB2YWx1ZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODM6XHRzdGF0aWMgdm9pZCBndmVfc2tiX2FkZF9yeF9mcmFnKHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4gNTg0Olx0XHRcdFx0XHRzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZSxcbiA1ODU6XHRcdFx0XHRcdGludCBudW1fZnJhZ3MsIHUxNiBidWZfbGVuKVxuIDU4NjpcdHtcbiA1ODc6XHRcdGlmIChyeC1cdTAwM2VkcW8ucGFnZV9wb29sKSB7XG4gNTg4Olx0XHRcdHNrYl9hZGRfcnhfZnJhZ19uZXRtZW0ocngtXHUwMDNlY3R4LnNrYl90YWlsLCBudW1fZnJhZ3MsXG4gNTg5Olx0XHRcdFx0XHQgICAgICAgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5uZXRtZW0sXG4gNTkwOlx0XHRcdFx0XHQgICAgICAgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCAmIzQzO1xuIDU5MTpcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFkLCBidWZfbGVuLFxuIDU5MjpcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8uYnVmX3NpemUpO1xuIDU5MzpcdFx0fSBlbHNlIHtcbiA1OTQ6XHRcdFx0c2tiX2FkZF9yeF9mcmFnKHJ4LVx1MDAzZWN0eC5za2JfdGFpbCwgbnVtX2ZyYWdzLFxuIDU5NTpcdFx0XHRcdFx0YnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlLFxuIDU5NjpcdFx0XHRcdFx0YnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCAmIzQzO1xuIDU5NzpcdFx0XHRcdFx0YnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWQsIGJ1Zl9sZW4sXG4gNTk4Olx0XHRcdFx0XHRidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplKTtcbiA1OTk6XHRcdH1cbiA2MDA6XHR9XG4gNjAxOlx0XG4gNjAyOlx0LyogQ2hhaW5zIG11bHRpIHNrYnMgZm9yIHNpbmdsZSByeCBwYWNrZXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIHdpdGggWmVyby1MZW5ndGggQnVmZmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgaXQgaGFuZGxlcyBgYnVmX2xlbiA9IDBgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgemVyby1sZW5ndGggZnJhZ21lbnQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgc2luY2Ugbm8gZGF0YSBpcyBjb3BpZWQsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gSG93ZXZlciwgaWYgYGJ1Zl9sZW5gIGlzIHplcm8gYnV0IHNvbWVob3cgY29udHJpYnV0ZXMgdG8gdGhlIGNhbGN1bGF0aW9uIG9mIGB0cnVlc2l6ZWAgbGF0ZXIsIHRoYXQgd291bGQgYmUgYW4gaW50ZXJlc3RpbmcgdGhpbmcgdG8gaW52ZXN0aWdhdGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uLgoKVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBhIHplcm8tbGVuZ3RoIGZyYWdtZW50ICpjb3VsZCogd3JlYWsgaGF2b2Mgb24gdGhlIG5ldHdvcmsgc3RhY2sgaW4gYSBtb3JlIGdlbmVyYWwgc2Vuc2UsIGxlYWRpbmcgdG8gZGl2aXNpb24gYnkgemVybyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgcmVhZHMsIG9yIG90aGVyIGlzc3VlcyBpZiB0aGUgY29kZSBhc3N1bWVzIGFsbCBmcmFnbWVudHMgaGF2ZSBhIGxlbmd0aCBncmVhdGVyIHRoYW4gemVyby4gTm90IG5lY2Vzc2FyaWx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBidXQgYSBidWcgbm9uZXRoZWxlc3MuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBjbG9zZWx5IGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgaWYgYGhzcGxpdGAgaXMgdHJ1ZSwgYW5kIGBidWZfbGVuYCBpcyB6ZXJvLCBgZ3ZlX2ZyZWVfYnVmZmVyYCBpcyBjYWxsZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucy4gIElmIGBoc3BsaXRgIGlzIHNldCwgaXQgbWVhbnMgYSBoZWFkZXIgc3BsaXQgaGFzIG9jY3VycmVkLCBhbmQgdGhlIGhlYWRlciBoYXMgYmVlbiBjb3BpZWQgaW50byBgcngtJmd0O2N0eC5za2JfaGVhZGAuIFRoZSBmYWN0IHRoYXQgd2UgcmV0dXJuIDAgZWFybHkgaWYgYGJ1Zl9sZW5gIGlzIHplcm8gbWVhbnMgdGhlcmUgaXMgbm8gZGF0YSBwYXlsb2FkIGluIHRoaXMgYnVmZmVyLiBJZiB3ZSAqZGlkbiYjMzk7dCogcmV0dXJuLCB0aGUgY29kZSB3b3VsZCBzeW5jIHRoZSBETUEgYnVmZmVyLCBhbmQgdGhlbiwgaWYgYHJ4LSZndDtjdHguc2tiX2hlYWRgIGV4aXN0cywgYXBwZW5kIGEgemVyby1sZW5ndGggZnJhZ21lbnQuIEhtbSwgd2hhdCBpZiBgaGRyX2xlbiAmYW1wOyZhbXA7ICFoYm9gIGlzIGZhbHNlPyAgVGhlbiBgcngtJmd0O2N0eC5za2JfaGVhZGAgKm1pZ2h0KiBiZSBOVUxMIGFuZCB0aGUgYGlmIChyeC0mZ3Q7Y3R4LnNrYl9oZWFkKWAgd291bGQgYmUgc2tpcHBlZC4KCklmIHdlICpza2lwKiB0aGUgYXBwZW5kaW5nLCBpdCB3b3VsZCB0aGVuIGp1bXAgdG8gdGhlIHhkcCBjb2RlLiBUaGUgY29uY2VybiBpczogaWYgYGJ1Zl9sZW5gIGlzIDAsIHRoZW4gdGhlIGB4ZHBfcHJlcGFyZV9idWZmYCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBgYnVmX2xlbiA9IDBgLiAgVGhpcyBtZWFucyB0aGUgQlBGIHByb2dyYW0gbWlnaHQgdGhlbiBydW4gb24gYSB6ZXJvLWxlbmd0aCBidWZmZXIhIFRoYXQgc291bmRzIHJpc2t5LCBhcyB0aGUgQlBGIGNvZGUgbWlnaHQgYXNzdW1lIGEgbWluaW11bSBwYWNrZXQgbGVuZ3RoLCBsaWtlIGZvciB0aGUgRXRoZXJuZXQgaGVhZGVyLCB3aGljaCB3b3VsZCB0cmlnZ2VyIG91dC1vZi1ib3VuZHMgcmVhZHMuIEtBU0FOICpzaG91bGQqIGNhdGNoIHRoaXMsIGJ1dCB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byB2ZXJpZnkuCgpUaGVyZSYjMzk7cyBhbHNvIHRoZSBgZW9wYCBjYXNlLCBhbmQgaWYgYGJ1Zl9sZW5gIGlzIDAsIHRoZSBgZ3ZlX3J4X2NvcHlgIGlzIGNhbGxlZCB3aXRoIGBidWZfbGVuID0gMGAuIFRoaXMgYWxsb2NhdGVzIGFuIHNrYiBhbmQgY29waWVzIDAgYnl0ZXMsIHRoZW4gcmV0dXJucy4gQWdhaW4sIG5vIG1lbW9yeSBpc3N1ZS4KCk5vdywgd2FpdC4uLiBldmVuIGlmIGBidWZfbGVuYCBpcyAwLCBpcyB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQ/ICBBZ2Fpbiwgbm8gYnl0ZXMgYXJlIGNvcGllZCwgc28gbm8gcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuCgpGaW5hbGx5LCBJIG5vdGljZSB0aGUgaW5jbHVzaW9uIG9mIGBndmVfcHRwX2FkamZpbmVgLiBUaGlzIHNlZW1zIHRvIGJlIGEgbWlzc2luZyBmdW5jdGlvbiBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIHVuY29uZGl0aW9uYWwgY2FsbCB0byBpdCBhbmQgaXQmIzM5O3MgbnVsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqZmluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfY2xvY2suYz0xMjI9c3RhdGljIGludCBwdHBfY2xvY2tfYWRqdGltZShzdHJ1Y3QgcG9zaXhfY2xvY2sgKnBjLCBzdHJ1Y3QgX19rZXJuZWxfdGltZXggKnR4KVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2NC1cdFx0XHRyZXR1cm4gLUVSQU5HRTtcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjE2NTpcdFx0ZXJyID0gb3BzLVx1MDAzZWFkamZpbmUob3BzLCB0eC1cdTAwM2VmcmVxKTtcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2Ni1cdFx0aWYgKCFlcnIpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MzY9bW9kdWxlX3BhcmFtKGZpcm13YXJlLCBjaGFycCwgMCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtNDAtXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzo0MTpzdGF0aWMgaW50IF9pZHRjbV9hZGpmaW5lKHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLCBsb25nIHNjYWxlZF9wcG0pO1xuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtNDItXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTUwNz1zdGF0aWMgaW50IGlkdGNtX3N0b3BfcGhhc2VfcHVsbF9pbihzdHJ1Y3QgaWR0Y21fY2hhbm5lbCAqY2hhbm5lbClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xNTEwLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MTUxMTpcdGVyciA9IF9pZHRjbV9hZGpmaW5lKGNoYW5uZWwsIGNoYW5uZWwtXHUwMDNlY3VycmVudF9mcmVxX3NjYWxlZF9wcG0pO1xuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTUxMi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTU1Mz1zdGF0aWMgaW50IGRvX3BoYXNlX3B1bGxfaW5fc3coc3RydWN0IGlkdGNtX2NoYW5uZWwgKmNoYW5uZWwsXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4MS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE1ODI6XHRlcnIgPSBfaWR0Y21fYWRqZmluZShjaGFubmVsLCBkZWx0YV9wcG0pO1xuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4My1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYz0xNzAxPXN0YXRpYyBpbnQgX2lkdGNtX2FkanBoYXNlKHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLCBzMzIgZGVsdGFfbnMpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTcyNy1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE3Mjg6c3RhdGljIGludCBfaWR0Y21fYWRqZmluZShzdHJ1Y3QgaWR0Y21fY2hhbm5lbCAqY2hhbm5lbCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTcyOS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTc0OS1cdCAqXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxNzUwOlx0ICogYWRqZmluZTpcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE3NTEtXHQgKiAgICAgICBwcG1fMTYgKiA1XjEyXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTg3Nz1zdGF0aWMgaW50IGlkdGNtX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzMzIgZGVsdGEpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTg5My1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE4OTQ6c3RhdGljIGludCBpZHRjbV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCAgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTg5NS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTkwNi1cdG11dGV4X2xvY2soaWR0Y20tXHUwMDNlbG9jayk7XG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxOTA3Olx0ZXJyID0gX2lkdGNtX2FkamZpbmUoY2hhbm5lbCwgc2NhbGVkX3BwbSk7XG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xOTA4LVx0bXV0ZXhfdW5sb2NrKGlkdGNtLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTIwMzYtXHQuZ2V0bWF4cGhhc2VcdD0gXHUwMDI2aWR0Y21fZ2V0bWF4cGhhc2UsXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoyMDM3Olx0LmFkamZpbmVcdD0gXHUwMDI2aWR0Y21fYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTIwMzgtXHQuYWRqdGltZVx0PSBcdTAwMjZpZHRjbV9hZGp0aW1lLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzX2RlcHJlY2F0ZWQgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMjA1NC1cdC5nZXRtYXhwaGFzZSAgICA9IFx1MDAyNmlkdGNtX2dldG1heHBoYXNlLFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MjA1NTpcdC5hZGpmaW5lXHQ9IFx1MDAyNmlkdGNtX2FkamZpbmUsXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDU2LVx0LmFkanRpbWVcdD0gXHUwMDI2aWR0Y21fYWRqdGltZV9kZXByZWNhdGVkLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9kZmxfdG9kLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZGZsX3RvZF9jbG9ja19vcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYy0yNzMtXHQubWF4X2FkaiA9IFRPRF9NQVhfQURKLFxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYzoyNzQ6XHQuYWRqZmluZSA9IGRmbF90b2RfYWRqdXN0X2ZpbmUsXG5kcml2ZXJzL3B0cC9wdHBfZGZsX3RvZC5jLTI3NS1cdC5hZGp0aW1lID0gZGZsX3RvZF9hZGp1c3RfdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmM9MTE0PXN0YXRpYyBzNjQgZHRlX3JlYWRfbmNvX3dpdGhfb3ZmKHN0cnVjdCBwdHBfZHRlICpwdHBfZHRlKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9kdGUuYy0xMzUtXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmM6MTM2OnN0YXRpYyBpbnQgcHRwX2R0ZV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMTM3LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmM9MjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2R0ZV9jYXBzID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9kdGUuYy0yMjEtXHQucHBzXHRcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYzoyMjI6XHQuYWRqZmluZVx0PSBwdHBfZHRlX2FkamZpbmUsXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMjIzLVx0LmFkanRpbWVcdD0gcHRwX2R0ZV9hZGp0aW1lLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYz00Nzk9c3RhdGljIGludCBpZHRmYzNfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHMzMiBkZWx0YSlcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNDkwLVxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjQ5MTpzdGF0aWMgaW50IF9pZHRmYzNfYWRqZmluZShzdHJ1Y3QgaWR0ZmMzICppZHRmYzMsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy00OTIte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MDgtXHQgKlxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjUwOTpcdCAqIGFkamZpbmU6XG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTEwLVx0ICogICAgICAgcHBtXzE2ICogMl4yOFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjEtXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmM6NTIyOnN0YXRpYyBpbnQgaWR0ZmMzX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjMte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjctXHRtdXRleF9sb2NrKGlkdGZjMy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYzo1Mjg6XHRlcnIgPSBfaWR0ZmMzX2FkamZpbmUoaWR0ZmMzLCBzY2FsZWRfcHBtKTtcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjktXHRtdXRleF91bmxvY2soaWR0ZmMzLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYz01OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRmYzNfY2FwcyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTk2LVx0LmFkanBoYXNlXHQ9IFx1MDAyNmlkdGZjM19hZGpwaGFzZSxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYzo1OTc6XHQuYWRqZmluZVx0PSBcdTAwMjZpZHRmYzNfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01OTgtXHQuYWRqdGltZVx0PSBcdTAwMjZpZHRmYzNfYWRqdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYz01MTA9c3RhdGljIHZvaWQgaWR0ODJwMzNfYWRqdGltZV93b3JrYXJvdW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01MjItXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo1MjM6c3RhdGljIGludCBfaWR0ODJwMzNfYWRqZmluZShzdHJ1Y3QgaWR0ODJwMzNfY2hhbm5lbCAqY2hhbm5lbCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNTI0LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01MzctXHQgKlxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmM6NTM4Olx0ICogYWRqZmluZTpcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTUzOS1cdCAqICAgICAgIHNjYWxlZF9wcG0gKiA1XjEyICogMTBeNVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU3OT1zdGF0aWMgaW50IGlkdDgycDMzX3N0b3BfZGRjbyhzdHJ1Y3QgaWR0ODJwMzNfY2hhbm5lbCAqY2hhbm5lbClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01ODItXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo1ODM6XHRlcnIgPSBfaWR0ODJwMzNfYWRqZmluZShjaGFubmVsLCBjaGFubmVsLVx1MDAzZWN1cnJlbnRfZnJlcSk7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01ODQtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU5Mj1zdGF0aWMgaW50IGlkdDgycDMzX3N0YXJ0X2RkY28oc3RydWN0IGlkdDgycDMzX2NoYW5uZWwgKmNoYW5uZWwsIHMzMiBkZWx0YV9ucylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy02MTItXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo2MTM6XHRlcnIgPSBfaWR0ODJwMzNfYWRqZmluZShjaGFubmVsLFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNjE0LVx0XHRcdFx0aWR0ODJwMzNfZGRjb19zY2FsZWRfcHBtKGN1cnJlbnRfcHBtLCBwcGIpKTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYz05NzQ9c3RhdGljIGludCBpZHQ4MnAzM19hZGp3cml0ZXBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzMzIgb2Zmc2V0X25zKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTEwMDktXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzoxMDEwOnN0YXRpYyBpbnQgaWR0ODJwMzNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAxMS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAyMy1cdG11dGV4X2xvY2soaWR0ODJwMzMtXHUwMDNlbG9jayk7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzoxMDI0Olx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCwgc2NhbGVkX3BwbSk7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy0xMDI1LVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTExNTM9c3RhdGljIHZvaWQgaWR0ODJwMzNfY2Fwc19pbml0KHUzMiBpbmRleCwgc3RydWN0IHB0cF9jbG9ja19pbmZvICpjYXBzLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTExNjUtXHRjYXBzLVx1MDAzZWdldG1heHBoYXNlID0gaWR0ODJwMzNfZ2V0bWF4cGhhc2U7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzoxMTY2Olx0Y2Fwcy1cdTAwM2VhZGpmaW5lID0gaWR0ODJwMzNfYWRqZmluZTtcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTExNjctXHRjYXBzLVx1MDAzZWFkanRpbWUgPSBpZHQ4MnAzM19hZGp0aW1lO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM9NTg9c3RhdGljIGludCBwdHBfa3ZtX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmMtNjgtXG5kcml2ZXJzL3B0cC9wdHBfa3ZtX2NvbW1vbi5jOjY5OnN0YXRpYyBpbnQgcHRwX2t2bV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIGRlbHRhKVxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy03MC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfa3ZtX2NhcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy0xMTctXHQucHBzXHRcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM6MTE4Olx0LmFkamZpbmVcdD0gcHRwX2t2bV9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy0xMTktXHQuYWRqdGltZVx0PSBwdHBfa3ZtX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX21vY2suYz00ND1zdGF0aWMgdTY0IG1vY2tfcGhjX2NjX3JlYWQoc3RydWN0IGN5Y2xlY291bnRlciAqY2MpXG4tLVxuZHJpdmVycy9wdHAvcHRwX21vY2suYy00OC1cbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM6NDk6c3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX21vY2suYy01MC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX21vY2suYz0xMTg9c3RydWN0IG1vY2tfcGhjICptb2NrX3BoY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmMtMTMyLVx0XHQubWF4X2Fkalx0PSBNT0NLX1BIQ19NQVhfQURKX1BQQixcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM6MTMzOlx0XHQuYWRqZmluZVx0PSBtb2NrX3BoY19hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX21vY2suYy0xMzQtXHRcdC5hZGp0aW1lXHQ9IG1vY2tfcGhjX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX25ldGMuYz02MzY9c3RhdGljIHZvaWQgbmV0Y190aW1lcl9hZGp1c3RfcGVyaW9kKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LCB1NjQgcGVyaW9kKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmMtNjU4LVxuZHJpdmVycy9wdHAvcHRwX25ldGMuYzo2NTk6c3RhdGljIGludCBuZXRjX3RpbWVyX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmMtNjYwLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jPTczNT1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIG5ldGNfdGltZXJfcHRwX2NhcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy03NDYtXHRcdFx0XHQgUFRQX1NUUklDVF9GTEFHUyxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmM6NzQ3Olx0LmFkamZpbmVcdD0gbmV0Y190aW1lcl9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy03NDgtXHQuYWRqdGltZVx0PSBuZXRjX3RpbWVyX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTE2MTM9c3RhdGljIGludFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE2MTQ6cHRwX29jcF9udWxsX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTE2MTUte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xNzM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX29jcF9jbG9ja19pbmZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQwLVx0LmFkanRpbWVcdD0gcHRwX29jcF9hZGp0aW1lLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE3NDE6XHQuYWRqZmluZVx0PSBwdHBfb2NwX251bGxfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQyLVx0LmFkanBoYXNlXHQ9IHB0cF9vY3BfbnVsbF9hZGpwaGFzZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmM9Mjk1PXN0YXRpYyBpcnFyZXR1cm5fdCBpc3IoaW50IGlycSwgdm9pZCAqcHJpdilcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtMzM5LVxuZHJpdmVycy9wdHAvcHRwX3BjaC5jOjM0MDpzdGF0aWMgaW50IHB0cF9wY2hfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX3BjaC5jLTM0MS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3BjaC5jPTQyNj1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9wY2hfY2FwcyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtNDMyLVx0LnBwc1x0XHQ9IDAsXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmM6NDMzOlx0LmFkamZpbmVcdD0gcHRwX3BjaF9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3BjaC5jLTQzNC1cdC5hZGp0aW1lXHQ9IHB0cF9wY2hfYWRqdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYz0xOTY9RVhQT1JUX1NZTUJPTF9HUEwocHRwX3FvcmlxX2lzcik7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMjAxLVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmM6MjAyOmludCBwdHBfcW9yaXFfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMjAzLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYy0yMzAtfVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmM6MjMxOkVYUE9SVF9TWU1CT0xfR1BMKHB0cF9xb3JpcV9hZGpmaW5lKTtcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTIzMi1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYz0zNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfcW9yaXFfY2FwcyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYy0zNTctXHQucHBzXHRcdD0gMSxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jOjM1ODpcdC5hZGpmaW5lXHQ9IHB0cF9xb3JpcV9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMzU5LVx0LmFkanRpbWVcdD0gcHRwX3FvcmlxX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYz0xMT1zdGF0aWMgc3RydWN0IHB0cF9jbG9jayAqcHRwX3N0Y2tlX2Nsb2NrLCAqcHRwX3FwdF9jbG9jaztcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtMTItXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jOjEzOnN0YXRpYyBpbnQgcHRwX3MzOTBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy0xNC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYz04Mz1zdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9zMzkwX3N0Y2tlX2luZm8gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy04Ni1cdC5tYXhfYWRqXHQ9IDAsXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jOjg3Olx0LmFkamZpbmVcdD0gcHRwX3MzOTBfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtODgtXHQuYWRqdGltZVx0PSBwdHBfczM5MF9hZGp0aW1lLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM9OTQ9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfczM5MF9xcHRfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jLTk3LVx0Lm1heF9hZGpcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM6OTg6XHQuYWRqZmluZVx0PSBwdHBfczM5MF9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy05OS1cdC5hZGp0aW1lXHQ9IHB0cF9zMzkwX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTM0PXN0YXRpYyB2b2lkIHB0cF92Y2xvY2tfaGFzaF9kZWwoc3RydWN0IHB0cF92Y2xvY2sgKnZjbG9jaylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmMtNDQtXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmM6NDU6c3RhdGljIGludCBwdHBfdmNsb2NrX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy00Ni17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTE2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92Y2xvY2tfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmMtMTY3LVx0Lm1heF9hZGpcdD0gNTAwMDAwMDAwLFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jOjE2ODpcdC5hZGpmaW5lXHQ9IHB0cF92Y2xvY2tfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy0xNjktXHQuYWRqdGltZVx0PSBwdHBfdmNsb2NrX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0yNTQ9c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI4Ni1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjg3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBkZWx0YSlcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjg4LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTMxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92bWNsb2NrX2luZm8gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMjMtXHQucHBzXHRcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzI0Olx0LmFkamZpbmVcdD0gcHRwX3ZtY2xvY2tfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzI1LVx0LmFkanRpbWVcdD0gcHRwX3ZtY2xvY2tfYWRqdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm13LmM9Mzk9c3RhdGljIGludCBwdHBfdm13X2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jLTQzLVxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jOjQ0OnN0YXRpYyBpbnQgcHRwX3Ztd19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBkZWx0YSlcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy00NS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jPTcxPXN0YXRpYyBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX3Ztd19jbG9ja19pbmZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03NS1cdC5hZGp0aW1lXHQ9IHB0cF92bXdfYWRqdGltZSxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYzo3NjpcdC5hZGpmaW5lXHQ9IHB0cF92bXdfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03Ny1cdC5nZXR0aW1lNjRcdD0gcHRwX3Ztd19nZXR0aW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA3OQoJCQkJCQkJb3V0cHV0OiAyOTIKCQkJCQkJCXRob3VnaHRzOiAxNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKioKCkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIHRoaXMgY29kZSBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvdXBsZSBvZiBmaXhlcyBoZXJlLCBvbmUgaW4gdGhlIFBUUCBkcml2ZXIgYW5kIGFub3RoZXIgaW4gdGhlIEdWRSBSWCBwYXRoLiBNeSBjb25jZXJuLCBhcyBhbHdheXMgd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIHdoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guCgpGaXJzdCwgdGhlIFBUUCBjaGFuZ2UuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHB0cF9jbG9ja19hZGp0aW1lYC4gSXQgYXBwZWFycyB0aGF0IGlmIGBvcHMtJmd0O2FkamZpbmVgIGlzIE5VTEwsIHdoaWNoIGlzIHBvc3NpYmxlIGlmIHRoZSB1bmRlcmx5aW5nIFBUUCBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGFuZCB0aGF0IGlzIG5vdyBwcm9wZXJseSBoYW5kbGVkLCB3ZSBnZXQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBmaXgsIGBndmVfcHRwX2FkamZpbmVgLCBlc3NlbnRpYWxseSBwcm92aWRlcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIC1FT1BOT1RTVVBQLiBUaGlzIGlzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyB3aWxsIGNhdGNoIHRoaXMsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkIGhlcmUuCgpOb3csIGxldCYjMzk7cyBtb3ZlIHRvIHRoZSBHVkUgUlggcGF0aC4gVGhlIGNvcmUgaXNzdWUgaGVyZSBzZWVtcyB0byBiZSBoYW5kbGluZyBvZiB6ZXJvLWxlbmd0aCBidWZmZXJzLiBJZiBgYnVmX2xlbmAgaXMgemVybywgd2UmIzM5O3JlIGxpa2VseSBza2lwcGluZyB0aGUgd2hvbGUgcGF5bG9hZCwgYXMgaW50ZW5kZWQgd2l0aCB0aGlzIHBhdGNoLiBUaGlzIGlzIHVzZWQgaW4gZ3ZlX3J4X2Rxby4gVGhlIGZpeCBoZXJlIGNoZWNrcyBpZiBgYnVmX2xlbmAgaXMgMC4gSWYgaXQgaXMgMCwgdGhlIGJ1ZmZlciBpcyBmcmVlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHBhc3MgYSAwLWxlbmd0aCBmcmFnbWVudCB0byBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AuIEEgMC1sZW5ndGggZnJhZ21lbnQgaXMgcGVyZmVjdGx5IHZhbGlkLiBUaGUgc2tiIHdpbGwgdGhlbiBoYXZlIGEgZnJhZ21lbnQgb2YgbGVuZ3RoIDAuCgpTbywgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIDAtbGVuZ3RoIGZyYWdtZW50IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgZnJhZ21lbnQgKnBvaW50cyogdG8gYSBwYWdlLCBidXQgYmVjYXVzZSB0aGUgbGVuZ3RoIGlzIHplcm8sIG5vdGhpbmcgaXMgYWN0dWFsbHkgcmVhZCBmcm9tIHRoZSBwYWdlLiBJZiB0aGUgbmV0d29yayBzdGFjayBvciBhbiBYRFAgcHJvZ3JhbSAqdHJpZXMqIHRvIHJlYWQgZnJvbSBhIDAtbGVuZ3RoIGZyYWdtZW50LCBpdCYjMzk7cyBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIG5vdGhpbmcgYXQgYWxsLCB3aGljaCBpcyBhIGNyYXNoLiBLQVNBTiBpcyB0aGVyZSB0byBjYXRjaCBvdXQtb2YtYm91bmRzIHJlYWRzLiBLTVNBTiBkb2VzbiYjMzk7dCBhcHBseS4KClRoZSAwLWxlbmd0aCBmcmFnbWVudCYjMzk7cyBjb250cmlidXRpb24gdG8gYHNrYi0mZ3Q7bGVuYCBpcyAwIGJ5dGVzLiBTbyBpdCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIHBvc3NpYmxlIGV4ZWN1dGlvbiBmbG93czoKCjEuICAqKlplcm8tTGVuZ3RoIEZyYWdtZW50OioqIFRoZSBkYXRhIGJ1ZmZlciBoYXMgYGJ1Zl9sZW5gIG9mIDAuIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCBpcyBjYWxsZWQsIGFuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBTS0IuIFRoaXMgaXMgd2hlcmUgaXTigJlzIHRoZSBmcmFnbWVudCBpcyBhc3NpZ25lZCB0byBgYnVmX3N0YXRlLSZndDtwYWdlX2luZm8ucGFnZWAuCjIuICAqKk5ldHdvcmsgU3RhY2sgUmVhZDoqKiBJZiB0aGUgbmV0d29yayBzdGFjayB0cmllcyB0byByZWFkIGBza2ItJmd0O2xlbmAgYnl0ZXMgZnJvbSB0aGUgU0tCLCBhbmQgdGhlIGZyYWdtZW50IGlzIGFjY2Vzc2VkLCBpdCB3aWxsIHJlYWQgMCBieXRlcywgc28gdGhpcyBpcyBub3QgYSBwcm9ibGVtLiBFdmVuIGlmIHRoZSBjb2RlICppbmNvcnJlY3RseSogY2FsY3VsYXRlcyByZWFkIGxlbmd0aCBhbmQgdHJpZXMgdG8gcmVhZCBtb3JlLCB3ZSBzaG91bGQgZ2V0IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjYXVnaHQgYnkgS0FTQU4uCjMuICAqKlhEUCBQcm9ncmFtIFJlYWQ6KiogSWYgYW4gWERQIHByb2dyYW0gdHJpZXMgdG8gcmVhZCBmcm9tIHRoZSAwLWxlbmd0aCBmcmFnbWVudCwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBwYWdlIGFzc2lnbmVkIHRvIGl0IGFuZCBjb3VsZCBlaXRoZXIgc3VjY2VlZCBpZiBjb2RlIGlzIGNvcnJlY3QsIG9yIGZhaWwgd2l0aCBLQVNBTiBpZiBvdXQtb2YtYm91bmRzLgo0LiAgKipVc2Vyc3BhY2UgQ29weSAoZS5nLiwgQUZfUEFDS0VUKToqKiBJZiB0aGUgU0tCIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGBza2ItJmd0O2xlbmAgKHdoaWNoIGluY2x1ZGVzIDAgZnJvbSB0aGUgMC1sZW5ndGggZnJhZ21lbnQpIGJ5dGVzIHdpbGwgYmUgY29waWVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuCgpUaGVyZWZvcmUsIHRoZSBmaXggKnByZXZlbnRzKiBpc3N1ZXMgcmVsYXRlZCB0byB6ZXJvLWxlbmd0aCBidWZmZXJzLCBidXQgaXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gS0FTQU4gY292ZXJzIHRoZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIGFuZCB0aGVyZSYjMzk7cyBubyByZWFzb24gdG8gZmxhZyB0aGlzIGZvciBLTVNBTi4KCkluIHN1bW1hcnksIG15IGFzc2Vzc21lbnQgaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSW4gYGd2ZV9wdHAuY2AsIGl0IGFkZHMgYSBzdHViIGZvciBgYWRqZmluZWAgKGBndmVfcHRwX2FkamZpbmVgKSB3aGljaCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFBUUCBjb3JlIChgcHRwX2Nsb2NrX2FkanRpbWVgKSB3aGVuIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XG4xLiBJbiBgZ3ZlX3B0cC5jYCwgaXQgYWRkcyBhIHN0dWIgZm9yIGBhZGpmaW5lYCAoYGd2ZV9wdHBfYWRqZmluZWApIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUFRQIGNvcmUgKGBwdHBfY2xvY2tfYWRqdGltZWApIHdoZW4gYG9wcy1cdTAwM2VhZGpmaW5lYCBpcyBpbnZva2VkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi5cbjIuIEluIGBndmVfcnhfZHFvLmNgLCBpdCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIGVhcmx5IGFuZCBmcmVlIHRoZSBidWZmZXIgaWYgYGJ1Zl9sZW5gIGlzIDAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGRyaXZlciBjb3VsZCBhcHBlbmQgYSAwLWxlbmd0aCBmcmFnbWVudCB0byBhbiBza2Igb3IgcGFzcyBhIDAtbGVuZ3RoIGJ1ZmZlciB0byBhbiBYRFAgcHJvZ3JhbS4gQSAwLWxlbmd0aCBmcmFnbWVudCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgaXRzIGxlbmd0aCBpcyAwLCBtZWFuaW5nIG5vIGJ5dGVzIGZyb20gdGhlIGZyYWdtZW50IGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgYnkgdGhlIG5ldHdvcmsgc3RhY2suIEFueSBvdXQtb2YtYm91bmRzIHJlYWRzIGNhdXNlZCBieSBYRFAgcHJvZ3JhbXMgb3IgdGhlIG5ldHdvcmsgc3RhY2sgYXNzdW1pbmcgYSBtaW5pbXVtIGZyYWdtZW50IGxlbmd0aCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbk5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWdzIHRoaXMgcGF0Y2ggZml4ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI2OjQ2LjM5NTgwOTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MzE2ODA2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcHRwX2FkamZpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEluIGBndmVfcHRwLmNgLCBpdCBhZGRzIGEgc3R1YiBmb3IgYGFkamZpbmVgIChgZ3ZlX3B0cF9hZGpmaW5lYCkgd2hpY2ggcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBQVFAgY29yZSAoYHB0cF9jbG9ja19hZGp0aW1lYCkgd2hlbiBgb3BzLVxcdTAwM2VhZGpmaW5lYCBpcyBpbnZva2VkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi5cXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxcblxcbk5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWdzIHRoaXMgcGF0Y2ggZml4ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNjo0Ni4zOTU4MTQxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDcxODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkxNmM0MDI4NmU1ZTExY2NhZTg1MmRlN2NkMTFlYmIyNDBlM2VhNzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXFxuaW5kZXggMDZiMWNmNGE1ZWZjYy4uMWQ2YzU5ZjRlYWQzZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXFxuQEAgLTI2LDYgKzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBndmVfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZ3ZlX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG5AQCAtNjAsNiArNjUsNyBAQCBzdGF0aWMgbG9uZyBndmVfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbylcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7XFxuIFxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcImd2ZSBjbG9ja1xcXCIsXFxuK1xcdC5hZGpmaW5lXFx0PSBndmVfcHRwX2FkamZpbmUsXFxuIFxcdC5nZXR0aW1leDY0XFx0PSBndmVfcHRwX2dldHRpbWV4NjQsXFxuIFxcdC5zZXR0aW1lNjRcXHQ9IGd2ZV9wdHBfc2V0dGltZTY0LFxcbiBcXHQuZG9fYXV4X3dvcmtcXHQ9IGd2ZV9wdHBfZG9fYXV4X3dvcmssXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5pbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5AQCAtODg2LDYgKzg4NiwxMSBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbiBcXHRcXHRyeC1cXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICs9IHVuc3BsaXQ7XFxuIFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfYnl0ZXMgKz0gaGRyX2xlbjtcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbitcXG4rXFx0XFx0aWYgKCFidWZfbGVuKSB7XFxuK1xcdFxcdFxcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICghcngtXFx1MDAzZWN0eC5za2JfaGVhZCBcXHUwMDI2XFx1MDAyNiByeC1cXHUwMDNlZHFvLnBhZ2VfcG9vbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKSB7XFxuIFxcdFxcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNjo0Ny43NzczMTQ4NzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjI5MTg4OTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX3B0cF9hZGpmaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MTZjNDAyODZlNWUxMWNjYWU4NTJkZTdjZDExZWJiMjQwZTNlYTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmNcbmluZGV4IDA2YjFjZjRhNWVmY2MuLjFkNmM1OWY0ZWFkM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmNcbkBAIC0yNiw2ICsyNiwxMSBAQCBpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGd2ZV9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBndmVfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbkBAIC02MCw2ICs2NSw3IEBAIHN0YXRpYyBsb25nIGd2ZV9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZ3ZlX3B0cF9jYXBzID0ge1xuIFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4gXHQubmFtZVx0XHQ9IFwiZ3ZlIGNsb2NrXCIsXG4rXHQuYWRqZmluZVx0PSBndmVfcHRwX2FkamZpbmUsXG4gXHQuZ2V0dGltZXg2NFx0PSBndmVfcHRwX2dldHRpbWV4NjQsXG4gXHQuc2V0dGltZTY0XHQ9IGd2ZV9wdHBfc2V0dGltZTY0LFxuIFx0LmRvX2F1eF93b3JrXHQ9IGd2ZV9wdHBfZG9fYXV4X3dvcmssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuaW5kZXggODI3MWY3MzFhOTFmYy4uMGVjZTJmNmZkZmZiNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuQEAgLTg4Niw2ICs4ODYsMTEgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiBcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICs9IHVuc3BsaXQ7XG4gXHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF9ieXRlcyArPSBoZHJfbGVuO1xuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuK1xuK1x0XHRpZiAoIWJ1Zl9sZW4pIHtcbitcdFx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZCBcdTAwMjZcdTAwMjYgcngtXHUwMDNlZHFvLnBhZ2VfcG9vbCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgbmV0bWVtX2lzX25ldF9pb3YoYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKSB7XG4gXHRcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6MjY6NDcuNzc3MzE2Mjg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3ODg1ODY0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enphYmlsaXR5IG9mIGEgR1ZFIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZ3ZlX3B0cC5jYCBhbmQgYGd2ZV9yeF9kcW8uY2AuIFRoZSBgZ3ZlX3B0cGAgcGFydCBpcyBqdXN0IHJldHVybmluZyBgLUVPUE5PVFNVUFBgLCB3aGljaCBpc24ndCB2ZXJ5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIHRoYXQgYGd2ZV9yeF9kcW9gIG5vdyBoYXMgYSBjaGVjazogYGlmICghYnVmX2xlbikgeyAuLi4gfWAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0IGJlY2F1c2UgaXQncyBpbiB0aGUgUlggZmFzdCBwYXRoLlxuXG5Ob3csIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIgaXMgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIHdoaWNoIGlzIHdoZXJlIFN5emthbGxlciAqcnVucyogYnkgZGVmYXVsdC4gU28sIEdWRSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdXNlZC4gR29vZC4gQ2hlY2tpbmcgdGhlIEtjb25maWcgY29uZmlybXMgdGhlIGRyaXZlciBpcyBlbmFibGVkIChgQ09ORklHX0dWRWApLiBUaGUgcGF0Y2ggaXMgaW4gdGhlIGBndmVfcnhfZHFvYCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgdmlhIGBndmVfcnhfcG9sbF9kcW9gLlxuXG5UaGUgcXVlc3Rpb24gYmVjb21lczogSXMgdGhpcyBmdXp6YWJsZT8gSXQncyBuZXR3b3JrIGRyaXZlciBSWCwgYW5kIFN5emthbGxlciBpcyBkZXNpZ25lZCB0byBmdXp6IG5ldHdvcmsgcGFja2V0cywgc28gdGhlIGluaXRpYWwgaW1wdWxzZSBpcyB5ZXMuIEhvd2V2ZXIsIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBDYW4gU3l6a2FsbGVyIGRpcmVjdGx5IGZ1enogR1ZFPyBUaGUgR1ZFIGRyaXZlciByZWNlaXZlcyBwYWNrZXRzIGZyb20gdGhlIGh5cGVydmlzb3IuIFN5emthbGxlciBjYW4gc2VuZCBwYWNrZXRzLCBidXQgaXQgZG9lc24ndCAqY29udHJvbCogdGhlIEdWRSBkZXZpY2UgZGlyZWN0bHkuIFN5emthbGxlciBpcyBydW5uaW5nICp3aXRoaW4qIHRoZSBHQ0UgaW5zdGFuY2UsIHNvIGl0IGNhbid0IG1hbmlwdWxhdGUgdGhlIGh5cGVydmlzb3IncyB2aWV3IG9mIHRoZSBHVkUgaGFyZHdhcmUsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS5cblxuU3l6a2FsbGVyIGNhbiBmdXp6IHNvZnR3YXJlIGRldmljZXMgbGlrZSB0dW4vdGFwIG9yIHZldGguIEZvciBhIGhhcmR3YXJlIGRldmljZSwgaXQgdXN1YWxseSByZWxpZXMgb24gdGhlIG5ldHdvcmsgc2VuZGluZyBwYWNrZXRzIGJhY2sgdG8gaXRzZWxmIG9yIG9uIGJyb2FkY2FzdCBwYWNrZXRzIHRvIGNhdXNlIGFjdGl2aXR5LCBidXQgaXQgZG9lc24ndCBpbmplY3QgYXJiaXRyYXJ5IGhhcmR3YXJlIGRlc2NyaXB0b3JzLiBHVkUgKmlzKiBhIFBDSSBkZXZpY2UsIGJ1dCBTeXprYWxsZXIgKmRvZXNuJ3QqIGVtdWxhdGUgR1ZFLiBJdCdzIGp1c3QgKnVzaW5nKiBpdCB3aXRoaW4gR0NFLiBTeXprYWxsZXIncyBub3QgY29udHJvbGxpbmcgdGhlIGhhcmR3YXJlLiBJdCdzIGhhbmRsaW5nICpyZWFsKiBuZXR3b3JrIHRyYWZmaWMgKFNTSCwgZXRjLikuXG5cblNvLCBjb250cm9sbGluZyBzb21ldGhpbmcgbGlrZSBgYnVmX2xlbmAgaXMgZGlmZmljdWx0IGJlY2F1c2UgdGhhdCdzIGNvbnRyb2xsZWQgYnkgdGhlIGh5cGVydmlzb3IsIG5vdCB0aGUgZ3Vlc3QgT1Mgd2hlcmUgU3l6a2FsbGVyIGlzIHJ1bm5pbmcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjb250cm9sIHRoZSBjb250ZW50cyBvZiB0aGUgY29tcGxldGlvbiBkZXNjcmlwdG9yIGBjb21wbF9kZXNjYC4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhbiBlYXN5IHdheSB0byBtYW5pcHVsYXRlIHRoZSBkZXNjcmlwdG9yIGNvbnRlbnRzIGJlY2F1c2UgaXQncyBjb21pbmcgZnJvbSB0aGUgaHlwZXJ2aXNvciwgd2hpY2ggdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0gaGFzIG5vIGNvbnRyb2wgb3Zlci4gVGhlIGd1ZXN0IGlzIHRydXN0aW5nIHRoZSBoeXBlcnZpc29yIGhlcmUuXG5cblNvLCBpbiBzaG9ydCwgd2hpbGUgdGhlIHBhdGNoICpsb29rcyogaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGFuIFJYIHBhdGggYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gcGFja2V0IGZ1enppbmcsIHJlYWxpc3RpY2FsbHksIFN5emthbGxlcidzIGRpcmVjdCBjb250cm9sIG92ZXIgdGhlIEdWRSBkZXZpY2UncyBSWCBkZXNjcmlwdG9ycyBpcyBsaW1pdGVkLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBzb21lIGRlZXBlciBkaWdnaW5nIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgdmlhYmxlIGFuZ2xlIG9mIGF0dGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI3OjAwLjU2NTkwNTI4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1MDE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfcnhfZHFvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfR1ZFKSArPSBndmUub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvTWFrZWZpbGU6NDpndmUteSA6PSBndmVfbWFpbi5vIGd2ZV90eC5vIGd2ZV90eF9kcW8ubyBndmVfcngubyBndmVfcnhfZHFvLm8gZ3ZlX2V0aHRvb2wubyBndmVfYWRtaW5xLm8gZ3ZlX3V0aWxzLm8gZ3ZlX2Zsb3dfcnVsZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL01ha2VmaWxlLTUtXFx0ICAgIGd2ZV9idWZmZXJfbWdtdF9kcW8ub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NzkzPXN0YXRpYyB2b2lkIGd2ZV9kbWFfc3luYyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODE1OnN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODE2LVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBndmVfcnhfY29tcGxfZGVzY19kcW8gKmNvbXBsX2Rlc2MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz0xMDgwPWludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoxMTE5OlxcdFxcdGVyciA9IGd2ZV9yeF9kcW8obmFwaSwgcngsIGNvbXBsX2Rlc2MsIGNvbXBscS1cXHUwMDNlaGVhZCwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTIwLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI3OjAwLjYxMjk2MTgxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjEyODMyMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGltaXRhdGlvbnMgb2YgRnV6emluZyB0aGUgR1ZFIFJlY2VpdmUgRGVzY3JpcHRvciBRdWV1ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGd2ZV9yeF9kcW9gIGZ1bmN0aW9uLCBhbmQgaXQncyBoYW5kbGluZyBjb21wbGV0aW9uIGRlc2NyaXB0b3JzIGNvbWluZyBmcm9tIGVpdGhlciB0aGUgaGFyZHdhcmUgb3IgdGhlIGh5cGVydmlzb3IsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBzeXprYWxsZXIgaXMgcnVubmluZyBpbnNpZGUgdGhlIGd1ZXN0LCBpdCBjYW4ndCBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBoeXBlcnZpc29yIHRvIGluamVjdCBzb21ldGhpbmcgb2J2aW91c2x5IGJhZCBsaWtlIGEgemVyby1sZW5ndGggYnVmZmVyIChgYnVmX2xlbiA9PSAwYCkuIFNvLCB3aGlsZSB0aGlzIGNvZGUgcGF0aCAqZXhpc3RzKiwgaXQgc2VlbXMgcHJldHR5IHJlc2lzdGFudCB0byBtZWFuaW5nZnVsIGZ1enppbmcgdGhyb3VnaCBpbnB1dCBtdXRhdGlvbiwgYmVjYXVzZSB0aGUgKnJlYWwqIGlucHV0cyBjb21lIGZyb20gYSB0cnVzdGVkIGh5cGVydmlzb3IuXG5cbkJ1dCB0aGVuIEkgaGFkIGEgdGhvdWdodC4uLiBpcyB0aGVyZSAqYW55KiB3YXkgc3l6a2FsbGVyIGNvdWxkIGFjdHVhbGx5IGhpdCB0aGlzIGBidWZfbGVuID09IDBgIGNhc2U/IENvdWxkIGl0IGJlIGEgbGVnaXRpbWF0ZSBzdGF0ZSB1bmRlciAqbm9ybWFsKiBuZXR3b3JrIGNvbmRpdGlvbnM/IE1heWJlLCBpZiB0aGVyZSdzIGFuIGVtcHR5IHBhY2tldCBvciBhIGhlYWRlciBzcGxpdCBzY2VuYXJpbyB3aGVyZSB0aGUgcGF5bG9hZCBpdHNlbGYgaXMgZW1wdHkgKGxpa2UgYSBUQ1AgQUNLIHdpdGggbm8gZGF0YSkuIElmIHNvLCB3ZSBtaWdodCBhY3R1YWxseSBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBieSBjcmFmdGluZyBzcGVjaWZpYyBwYWNrZXRzISBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBvcGVucyB1cCBhIG5ldyBhdmVudWUuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGdvIHRha2UgYSBsb29rIGF0IGBndmVfcnhfZHFvLmNgIGFyb3VuZCBsaW5lIDg4Ni4gVGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTAsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjc6MzMuMjI1Nzk3MTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRwcmVmZXRjaChidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWdlKTtcXG4gODYxOlxcdFxcdH1cXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cXG4gODY0OlxcdFxcdGlmIChoc3BsaXQpIHtcXG4gODY1OlxcdFxcdFxcdGludCB1bnNwbGl0ID0gMDtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0XFx0aWYgKGhkcl9sZW4gXFx1MDAyNlxcdTAwMjYgIWhibykge1xcbiA4Njg6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHQoc2l6ZV90KWJ1ZmZlcl9pZCAqIHByaXYtXFx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcXG4gODcwOlxcdFxcbiA4NzE6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZCA9XFxuIDg3MjpcXHRcXHRcXHRcXHRcXHRndmVfcnhfY29weV9kYXRhKHByaXYtXFx1MDAzZWRldiwgbmFwaSxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCByeC1cXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgKyBvZmZzZXQsXFxuIDg3NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyX2xlbik7XFxuIDg3NTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQpKVxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gODc3OlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgPSByeC1cXHUwMDNlY3R4LnNrYl9oZWFkO1xcbiA4Nzg6XFx0XFxuIDg3OTpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZWRxby5wYWdlX3Bvb2wpXFxuIDg4MDpcXHRcXHRcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKTtcXG4gODgxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MjpcXHRcXHRcXHRcXHR1bnNwbGl0ID0gMTtcXG4gODgzOlxcdFxcdFxcdH1cXG4gODg0OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA4ODU6XFx0XFx0XFx0cngtXFx1MDAzZXJ4X2hzcGxpdF9wa3QrKztcXG4gODg2OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcXG4gODg3OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfYnl0ZXMgKz0gaGRyX2xlbjtcXG4gODg4OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeC1cXHUwMDNlc3RhdHNzKTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0XFx0aWYgKCFidWZfbGVuKSB7XFxuIDg5MTpcXHRcXHRcXHRcXHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XFxuIDg5MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH0gZWxzZSBpZiAoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQgXFx1MDAyNlxcdTAwMjYgcngtXFx1MDAzZWRxby5wYWdlX3Bvb2wgXFx1MDAyNlxcdTAwMjZcXG4gODk1OlxcdFxcdFxcdCAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcXG4gODk2OlxcdFxcdFxcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxcbiA4OTc6XFx0XFx0XFx0ICogYnVmZmVyLiBJZiB0aGUgcGFja2V0IGJ1ZmZlciBpcyBhIG5ldF9pb3YsIHRob3NlIGNhbid0IGJlXFxuIDg5ODpcXHRcXHRcXHQgKiBlYXNpbHkgbWFwcGVkIGludG8gdGhlIGtlcm5lbCBzcGFjZSB0byBhY2Nlc3MgdGhlIGhlYWRlclxcbiA4OTk6XFx0XFx0XFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxcbiA5MDA6XFx0XFx0XFx0ICovXFxuIDkwMTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MDI6XFx0XFx0fVxcbiA5MDM6XFx0XFxuIDkwNDpcXHRcXHQvKiBTeW5jIHRoZSBwb3J0aW9uIG9mIGRtYSBidWZmZXIgZm9yIENQVSB0byByZWFkLiAqL1xcbiA5MDU6XFx0XFx0Z3ZlX2RtYV9zeW5jKHByaXYsIHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cXG4gOTA4OlxcdFxcdGlmIChyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKSB7XFxuIDkwOTpcXHRcXHRcXHRpZiAodW5saWtlbHkoZ3ZlX3J4X2FwcGVuZF9mcmFncyhuYXBpLCBidWZfc3RhdGUsIGJ1Zl9sZW4sIHJ4LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNzozMy4yMjU5MDYyNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE1MjY2MTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGF5bG9hZCBCdWZmZXIgSGFuZGxpbmcgaW4gTmV0d29yayBDb2RlKipcblxuT2theSwgc28gYGJ1Zl9sZW5gIHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGRhdGEgcGF5bG9hZCBidWZmZXIuIEknbSBmb2N1c2luZyBvbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGBoc3BsaXRgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGhlYWRlciBpcyBoYW5kbGVkIHNlcGFyYXRlbHkuIElmIGBoc3BsaXRgIGlzIGVuYWJsZWQsIHRoZSBoZWFkZXIgZ2V0cyBjb3BpZWQgaW50byB0aGUgc29ja2V0IGJ1ZmZlci4gSWYgdGhlcmUncyBubyBhY3R1YWwgcGF5bG9hZCAoYCFidWZfbGVuYCksIGl0IGZyZWVzIHRoZSBidWZmZXIgYW5kIHJldHVybnMgMC4gVGhhdCBtYWtlcyBzZW5zZSwgaGFuZGxpbmcgYSBoZWFkZXItb25seSBwYWNrZXQgbGlrZSBhIHB1cmUgVENQIEFDSy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IGFuIGF1dG9tYXRlZCBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/XCIgSXQgc2VlbXMgbGlrZWx5LiBTeXprYWxsZXIgaXMgZGVmaW5pdGVseSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhvc2UgZW1wdHktcGF5bG9hZCBwYWNrZXRzLCBhbmQgaWYgaGVhZGVyIHNwbGl0IGlzIGVuYWJsZWQsIHRoYXQgY29kZSBwYXRoIHdvdWxkIGJlIGhpdC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBmb3IgcG90ZW50aWFsIGJ1Z3Mgb3IgdW5pbnRlbmRlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGhzcGxpdGAgaXMgc29tZXRoaW5nIHN5emthbGxlciBjYW4gZGlyZWN0bHkgY29udHJvbCBvciB0cmlnZ2VyIGluZGlyZWN0bHkuXG5cbk9oLCBhbmQgdGhlcmUgd2FzIGFsc28gdGhhdCBgZ3ZlX3B0cF9hZGpmaW5lYCBjaGFuZ2UgaW4gdGhlIHBhdGNoLiBJIG5lZWQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBhbmQgY2hlY2sgb3V0IGBndmVfcHRwLmNgIHRvIHNlZSBpZiB0aGF0J3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcyBvciBpcyBhIHNlcGFyYXRlIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNzo0NC4zNzg1NzA0MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpXFxuICAgMjpcXHQvKiBHb29nbGUgdmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXJcXG4gICAzOlxcdCAqXFxuICAgNDpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQ1xcbiAgIDU6XFx0ICovXFxuICAgNjpcXHRcXG4gICA3OlxcdCNpbmNsdWRlIFxcXCJndmUuaFxcXCJcXG4gICA4OlxcdCNpbmNsdWRlIFxcXCJndmVfYWRtaW5xLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdC8qIEludGVydmFsIHRvIHNjaGVkdWxlIGEgbmljIHRpbWVzdGFtcCBjYWxpYnJhdGlvbiwgMjUwbXMuICovXFxuICAxMTpcXHQjZGVmaW5lIEdWRV9OSUNfVFNfU1lOQ19JTlRFUlZBTF9NUyAyNTBcXG4gIDEyOlxcdFxcbiAgMTM6XFx0LyogUmVhZCB0aGUgbmljIHRpbWVzdGFtcCBmcm9tIGhhcmR3YXJlIHZpYSB0aGUgYWRtaW4gcXVldWUuICovXFxuICAxNDpcXHRpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG4gIDE1OlxcdHtcXG4gIDE2OlxcdFxcdHU2NCBuaWNfcmF3O1xcbiAgMTc6XFx0XFx0aW50IGVycjtcXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ZXJyID0gZ3ZlX2FkbWlucV9yZXBvcnRfbmljX3RzKHByaXYsIHByaXYtXFx1MDAzZW5pY190c19yZXBvcnRfYnVzKTtcXG4gIDIwOlxcdFxcdGlmIChlcnIpXFxuICAyMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHRuaWNfcmF3ID0gYmU2NF90b19jcHUocHJpdi1cXHUwMDNlbmljX3RzX3JlcG9ydC1cXHUwMDNlbmljX3RpbWVzdGFtcCk7XFxuICAyNDpcXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZWxhc3Rfc3luY19uaWNfY291bnRlciwgbmljX3Jhdyk7XFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdHJldHVybiAwO1xcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHRzdGF0aWMgaW50IGd2ZV9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbiAgMzA6XFx0e1xcbiAgMzE6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgMzI6XFx0fVxcbiAgMzM6XFx0XFxuICAzNDpcXHRzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuICAzNTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuICAzNjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4gIDM3OlxcdHtcXG4gIDM4OlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gIDM5OlxcdH1cXG4gIDQwOlxcdFxcbiAgNDE6XFx0c3RhdGljIGludCBndmVfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuICA0MjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0c3RhdGljIGxvbmcgZ3ZlX3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXFxuICA0ODpcXHR7XFxuICA0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgZ3ZlX3B0cCAqcHRwID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBndmVfcHRwLCBpbmZvKTtcXG4gIDUwOlxcdFxcdHN0cnVjdCBndmVfcHJpdiAqcHJpdiA9IHB0cC1cXHUwMDNlcHJpdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjc6NDQuMzc4NjM4NjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNzgwODM0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBEZWNpc2lvbjogR1ZFIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBHVkUgZHJpdmVyLCB3aGljaCBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZSBmb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cywgd2hlcmUgc3l6a2FsbGVyIGlzIHJ1bm5pbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgUFRQIGZ1bmN0aW9ucyBqdXN0IHJldHVybiBgLUVPUE5PVFNVUFBgLCBzbyB0aGF0IGlzIG5vdCBnb2luZyB0byBiZSB3b3J0aCBmdXp6aW5nLCB0aGF0IGRvZXMgbm90aGluZy4gVGhlIHJlYWwgY2hhbmdlIGlzIHRoaXMgc2ltcGxlIGFkZGl0aW9uIHRvIGBndmVfcnhfZHFvYDpcblxuYGBgY1xuXHRcdGlmICghYnVmX2xlbikge1xuXHRcdFx0Z3ZlX2ZyZWVfYnVmZmVyKHJ4LCBidWZfc3RhdGUpO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuYGBgXG5cblRoaXMgbG9va3MgbGlrZSBhIHNpbXBsZSBmaXgsIGxpa2VseSBmb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3Igc2ltaWxhciBpc3N1ZSB3aGVuIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHplcm8uIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZC4gR1ZFICppcyogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYW5kIHN5emthbGxlciBjYW4gZGVmaW5pdGVseSB0cmlnZ2VyIHRoaXMgY29kZSwgZm9yIGV4YW1wbGUsIGJ5IHNlbmRpbmcgYW4gZW1wdHkgcGFja2V0LiBTbywgaXQgKmlzKiByZWFjaGFibGUuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIHNob3VsZCBJIGxpc3QgYFdvcnRoRnV6emluZz10cnVlYD8gSSBjYW4uIFRoZSBpbnN0cnVjdGlvbnMgc2F5IEkgc2hvdWxkIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIGBGb2N1c1N5bWJvbHNgLiBPa2F5LCBgZ3ZlX3J4X2Rxb2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIE5BUEkgcG9sbCBSWCBmdW5jdGlvbiBmb3IgRFFPIHF1ZXVlcywgc28gSSBjYW4gbm90IGxpc3QgdGhpcywgYXMgdGhhdCBpcyBub3QgdXNlZnVsLiBTbywgbXkgc2Vjb25kIHRob3VnaHQgaXMgdG8gbGlzdCBgZ3ZlX3B0cF9hZGpmaW5lYCB3aGljaCBpcyBhIFBUUCBjbG9jayBvcGVyYXRpb24uIFN5emthbGxlciBjYW4gY2FsbCBgY2xvY2tfYWRqdGltZWAgb24gdGhlIFBUUCBjbG9jayBkZXZpY2UsIHdoaWNoIHdvdWxkIGNhbGwgYGd2ZV9wdHBfYWRqZmluZWAuXG5cblNvIGlzIGl0IHJlYWxseSB3b3J0aCBmdXp6aW5nPyBJdCdzIGp1c3QgYSBjaGVjayB0byBmcmVlIGEgYnVmZmVyIHdoZW4gdGhlIGJ1ZmZlciBsZW5ndGggaXMgMC4gQnV0IGl0ICpkb2VzKiBmaXggYSBidWcgLSBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBjcmFzaCwgYW5kIHN5emthbGxlciAqY2FuKiB0cmlnZ2VyIHRoaXMgYnkgc2VuZGluZyB6ZXJvLWxlbmd0aCBwYWNrZXRzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB3aGVuIHJldHVybmluZyBgV29ydGhGdXp6aW5nPXRydWVgLCBJICptdXN0KiBsaXN0IGBGb2N1c1N5bWJvbHNgLiBTbywgaWYgdGhlcmUgYXJlIG5vIG5vbi1ob3QtcGF0aCBmdW5jdGlvbnMsIEkgY2FuIGp1c3QgbGVhdmUgRm9jdXNTeW1ib2xzIGVtcHR5IG9yIGxpc3QgYGd2ZV9wdHBfYWRqZmluZWAuIEJ1dCBpcyB0aGF0IGV2ZW4gaGVscGZ1bD8gVGhpcyBpcyBzdWNoIGEgc2ltcGxlIHBhdGNoLi4uXG5cbldhaXQsIGlzIGhlYWRlciBzcGxpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gR1ZFPyBUaGF0IHdvdWxkIGFmZmVjdCBob3cgbGlrZWx5IHRoaXMgaXMgdG8gYmUgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjc6NTYuNzU2NzI0OTUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU5NDg5OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTI0Mj1zdHJ1Y3QgZ3ZlX3J4X3Jpbmcge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0zMTItXFx0dTY0IHJieXRlczsgLyogZnJlZS1ydW5uaW5nIGJ5dGVzIHJlY2VpdmVkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDozMTM6XFx0dTY0IHJ4X2hzcGxpdF9ieXRlczsgLyogZnJlZS1ydW5uaW5nIGhlYWRlciBieXRlcyByZWNlaXZlZCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE0LVxcdHU2NCBycGFja2V0czsgLyogZnJlZS1ydW5uaW5nIHBhY2tldHMgcmVjZWl2ZWQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE3LVxcdHUzMiBtYXNrOyAvKiBtYXNrcyB0aGUgY250IGFuZCBmaWxsX2NudCB0byB0aGUgc2l6ZSBvZiB0aGUgcmluZyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MzE4OlxcdHU2NCByeF9oc3BsaXRfcGt0OyAvKiBmcmVlLXJ1bm5pbmcgcGFja2V0cyB3aXRoIGhlYWRlcnMgc3BsaXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTMxOS1cXHR1NjQgcnhfY29weWJyZWFrX3BrdDsgLyogZnJlZS1ydW5uaW5nIGNvdW50IG9mIGNvcHlicmVhayBwYWNrZXRzICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTMyNC1cXHQvKiBmcmVlLXJ1bm5pbmcgY291bnQgb2YgdW5zcGxpdCBwYWNrZXRzIGR1ZSB0byBoZWFkZXIgYnVmZmVyIG92ZXJmbG93IG9yIGhkcl9sZW4gaXMgMCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MzI1OlxcdHU2NCByeF9oc3BsaXRfdW5zcGxpdF9wa3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0zMjYtXFx0dTY0IHJ4X2NvbnRfcGFja2V0X2NudDsgLyogZnJlZS1ydW5uaW5nIG11bHRpLWZyYWdtZW50IHBhY2tldHMgcmVjZWl2ZWQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTI2NT1pbnQgZ3ZlX3NldF9yeF9idWZfbGVuX2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiByeF9idWZfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjY3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBndmVfcnhfYWxsb2NfcmluZ3NfY2ZnICpyeF9hbGxvY19jZmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTI2ODppbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjY5LVxcdFxcdFxcdCAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9NDI9c3RhdGljIGNvbnN0IGNoYXIgZ3ZlX2dzdHJpbmdzX21haW5fc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo0MzpcXHRcXFwicnhfcGFja2V0c1xcXCIsIFxcXCJyeF9oc3BsaXRfcGt0XFxcIiwgXFxcInR4X3BhY2tldHNcXFwiLCBcXFwicnhfYnl0ZXNcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy00NC1cXHRcXFwidHhfYnl0ZXNcXFwiLCBcXFwicnhfZHJvcHBlZFxcXCIsIFxcXCJ0eF9kcm9wcGVkXFxcIiwgXFxcInR4X3RpbWVvdXRzXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtNDUtXFx0XFxcInJ4X3NrYl9hbGxvY19mYWlsXFxcIiwgXFxcInJ4X2J1Zl9hbGxvY19mYWlsXFxcIiwgXFxcInJ4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0XFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6NDY6XFx0XFxcInJ4X2hzcGxpdF91bnNwbGl0X3BrdFxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTQ3LVxcdFxcXCJpbnRlcmZhY2VfdXBfY250XFxcIiwgXFxcImludGVyZmFjZV9kb3duX2NudFxcXCIsIFxcXCJyZXNldF9jbnRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTUxPXN0YXRpYyBjb25zdCBjaGFyIGd2ZV9nc3RyaW5nc19yeF9zdGF0c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTUyLVxcdFxcXCJyeF9wb3N0ZWRfZGVzY1sldV1cXFwiLCBcXFwicnhfY29tcGxldGVkX2Rlc2NbJXVdXFxcIiwgXFxcInJ4X2NvbnN1bWVkX2Rlc2NbJXVdXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6NTM6XFx0XFxcInJ4X2J5dGVzWyV1XVxcXCIsIFxcXCJyeF9oc3BsaXRfYnl0ZXNbJXVdXFxcIiwgXFxcInJ4X2NvbnRfcGFja2V0X2NudFsldV1cXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy01NC1cXHRcXFwicnhfZnJhZ19mbGlwX2NudFsldV1cXFwiLCBcXFwicnhfZnJhZ19jb3B5X2NudFsldV1cXFwiLCBcXFwicnhfZnJhZ19hbGxvY19jbnRbJXVdXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz0xNDk9Z3ZlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTUyOlxcdHU2NCB0bXBfcnhfcGt0cywgdG1wX3J4X2hzcGxpdF9wa3QsIHRtcF9yeF9ieXRlcywgdG1wX3J4X2hzcGxpdF9ieXRlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUzLVxcdFxcdHRtcF9yeF9za2JfYWxsb2NfZmFpbCwgdG1wX3J4X2J1Zl9hbGxvY19mYWlsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxNTQ6XFx0XFx0dG1wX3J4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0LCB0bXBfcnhfaHNwbGl0X3Vuc3BsaXRfcGt0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0xNTUtXFx0XFx0dG1wX3R4X3BrdHMsIHRtcF90eF9ieXRlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTU2LVxcdFxcdHRtcF94ZHBfdHhfZXJyb3JzLCB0bXBfeGRwX3JlZGlyZWN0X2Vycm9ycztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTU3OlxcdHU2NCByeF9idWZfYWxsb2NfZmFpbCwgcnhfZGVzY19lcnJfZHJvcHBlZF9wa3QsIHJ4X2hzcGxpdF91bnNwbGl0X3BrdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTU4OlxcdFxcdHJ4X3BrdHMsIHJ4X2hzcGxpdF9wa3QsIHJ4X3NrYl9hbGxvY19mYWlsLCByeF9ieXRlcywgdHhfcGt0cywgdHhfYnl0ZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE1OS1cXHRcXHR0eF9kcm9wcGVkLCB4ZHBfdHhfZXJyb3JzLCB4ZHBfcmVkaXJlY3RfZXJyb3JzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTk4OlxcdGZvciAocnhfcGt0cyA9IDAsIHJ4X2J5dGVzID0gMCwgcnhfaHNwbGl0X3BrdCA9IDAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5OS1cXHQgICAgIHJ4X3NrYl9hbGxvY19mYWlsID0gMCwgcnhfYnVmX2FsbG9jX2ZhaWwgPSAwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMDA6XFx0ICAgICByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCA9IDAsIHJ4X2hzcGxpdF91bnNwbGl0X3BrdCA9IDAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIwMS1cXHQgICAgIHhkcF90eF9lcnJvcnMgPSAwLCB4ZHBfcmVkaXJlY3RfZXJyb3JzID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTAtXFx0XFx0XFx0XFx0dG1wX3J4X3BrdHMgPSByeC1cXHUwMDNlcnBhY2tldHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjIxMTpcXHRcXHRcXHRcXHR0bXBfcnhfaHNwbGl0X3BrdCA9IHJ4LVxcdTAwM2VyeF9oc3BsaXRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTItXFx0XFx0XFx0XFx0dG1wX3J4X2J5dGVzID0gcngtXFx1MDAzZXJieXRlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTYtXFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZXJ4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMTc6XFx0XFx0XFx0XFx0dG1wX3J4X2hzcGxpdF91bnNwbGl0X3BrdCA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjIxODpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTktXFx0XFx0XFx0XFx0dG1wX3hkcF90eF9lcnJvcnMgPSByeC1cXHUwMDNleGRwX3R4X2Vycm9ycztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMjQtXFx0XFx0XFx0cnhfcGt0cyArPSB0bXBfcnhfcGt0cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjI1OlxcdFxcdFxcdHJ4X2hzcGxpdF9wa3QgKz0gdG1wX3J4X2hzcGxpdF9wa3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIyNi1cXHRcXHRcXHRyeF9ieXRlcyArPSB0bXBfcnhfYnl0ZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjI5LVxcdFxcdFxcdHJ4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0ICs9IHRtcF9yeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjMwOlxcdFxcdFxcdHJ4X2hzcGxpdF91bnNwbGl0X3BrdCArPSB0bXBfcnhfaHNwbGl0X3Vuc3BsaXRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMzEtXFx0XFx0XFx0eGRwX3R4X2Vycm9ycyArPSB0bXBfeGRwX3R4X2Vycm9ycztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yNTItXFx0ZGF0YVtpKytdID0gcnhfcGt0cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjUzOlxcdGRhdGFbaSsrXSA9IHJ4X2hzcGxpdF9wa3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTI1NC1cXHRkYXRhW2krK10gPSB0eF9wa3RzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTI2NC1cXHRkYXRhW2krK10gPSByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjY1OlxcdGRhdGFbaSsrXSA9IHJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjY2LVxcdGRhdGFbaSsrXSA9IHByaXYtXFx1MDAzZWludGVyZmFjZV91cF9jbnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzMyLVxcdFxcdFxcdFxcdHRtcF9yeF9ieXRlcyA9IHJ4LVxcdTAwM2VyYnl0ZXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjMzMzpcXHRcXHRcXHRcXHR0bXBfcnhfaHNwbGl0X2J5dGVzID0gcngtXFx1MDAzZXJ4X2hzcGxpdF9ieXRlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzM0LVxcdFxcdFxcdFxcdHRtcF9yeF9za2JfYWxsb2NfZmFpbCA9IHJ4LVxcdTAwM2VyeF9za2JfYWxsb2NfZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0zNDMtXFx0XFx0XFx0ZGF0YVtpKytdID0gdG1wX3J4X2J5dGVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzozNDQ6XFx0XFx0XFx0ZGF0YVtpKytdID0gdG1wX3J4X2hzcGxpdF9ieXRlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzQ1LVxcdFxcdFxcdGRhdGFbaSsrXSA9IHJ4LVxcdTAwM2VyeF9jb250X3BhY2tldF9jbnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9NjA2PXN0YXRpYyBpbnQgZ3ZlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy02MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjYyMzpcXHRlcnIgPSBndmVfc2V0X2hzcGxpdF9jb25maWcocHJpdiwga2VybmVsX2NtZC1cXHUwMDNldGNwX2RhdGFfc3BsaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTYyNC1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X2FsbG9jX2NmZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjExMT1pbnQgZ3ZlX3NldF9yeF9idWZfbGVuX2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiByeF9idWZfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIxNDM6aW50IGd2ZV9zZXRfaHNwbGl0X2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHU4IHRjcF9kYXRhX3NwbGl0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMTQ0LVxcdFxcdFxcdCAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTgxNT1zdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODIxLVxcdGNvbnN0IGJvb2wgZW9wID0gY29tcGxfZGVzYy1cXHUwMDNlZW5kX29mX3BhY2tldCAhPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgyMjpcXHRjb25zdCBib29sIGhzcGxpdCA9IGNvbXBsX2Rlc2MtXFx1MDAzZXNwbGl0X2hlYWRlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MjMtXFx0c3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvICpidWZfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04NjMtXFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4NjQ6XFx0aWYgKGhzcGxpdCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTg2NS1cXHRcXHRpbnQgdW5zcGxpdCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04ODQtXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cngtXFx1MDAzZXN0YXRzcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODg1OlxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfcGt0Kys7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODg2OlxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4ODc6XFx0XFx0cngtXFx1MDAzZXJ4X2hzcGxpdF9ieXRlcyArPSBoZHJfbGVuO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTg4OC1cXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cngtXFx1MDAzZXN0YXRzcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI3OjU3LjgxNjIyMTcwOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTE1OTcwMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgR1ZFIERyaXZlciBIZWFkZXIgU3BsaXQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcG90ZW50aWFsIGJ1ZyByZWxhdGVkIHRvIGhlYWRlciBzcGxpdCBpbiB0aGUgR1ZFIGRyaXZlciwgYW5kIEkgbmVlZCB0byBkZWNpZGUgaWYgaXQncyB3b3J0aCBmdXp6aW5nIHdpdGggU3l6a2FsbGVyLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYGJ1Zl9sZW5gIGlzIHplcm8sIGFuZCBoZWFkZXIgc3BsaXQgaXMgZW5hYmxlZCwgYGd2ZV9yeF9kcW9gIGhhcyBhIHByb2JsZW0gd2hpY2ggaXMgZml4ZWQgYnkgYSByZWNlbnQgcGF0Y2guXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCBHVkUgKmlzKiByZWFjaGFibGUgc2luY2UgU3l6a2FsbGVyIHJ1bnMgb24gR0NFLCB3aGljaCB1c2VzIHRoZSBHVkUgZHJpdmVyIGFzIGl0cyBuZXR3b3JrIGludGVyZmFjZS4gQWxzbywgU3l6a2FsbGVyICpjYW4qIGVuYWJsZSBoZWFkZXIgc3BsaXQgdXNpbmcgYGV0aHRvb2xgIHRocm91Z2ggYGd2ZV9zZXRfcmluZ3BhcmFtYCAtXHUwMDNlIGBndmVfc2V0X2hzcGxpdF9jb25maWdgLiBUaGVuLCBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIGVtcHR5IHBheWxvYWQgcGFja2V0cyAoYSBsaWtlbHkgc2NlbmFyaW8sIGZvciBpbnN0YW5jZSwgYSBUQ1AgQUNLKS4gVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZmF1bHR5IGAhYnVmX2xlbmAgY2hlY2suXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBkcml2ZXIhIFllcywgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBUaGVyZSdzIGBndmVfcHRwX2FkamZpbmVgLCB3aGljaCBpcyBhIG5ldyBmdW5jdGlvbiBhbmQgYGd2ZV9yeF9kcW9gLiBJICp0aGluayogYGd2ZV9wdHBfYWRqZmluZWAganVzdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIE5vdCBleGFjdGx5IGEgaG90IHBhdGgsIGFuZCBwcm9iYWJseSBub3QgdGhhdCBmcnVpdGZ1bCBmb3IgZnV6emluZywgYnV0IGl0ICppcyogYSB2YWxpZCBzeW1ib2wuIEl0IGxvb2tzIGxpa2UgaXQgaXMgdGhlIG9ubHkgb3RoZXIgZnVuY3Rpb24gbW9kaWZpZWQuXG5cbkZvciBgRm9jdXNTeW1ib2xzYCwgSSdsbCBpbmNsdWRlIGBndmVfcHRwX2FkamZpbmVgLlxuXG5BcyBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBgQ09ORklHX0dWRWAgaXMgdGhlIEdWRSBkcml2ZXIgY29uZmlnLiBFdmVuIHRob3VnaCBzeXprYWxsZXIncyBHQ0UgY29uZmlnICpzaG91bGQqIGFscmVhZHkgaGF2ZSBgQ09ORklHX0dWRWAgZW5hYmxlZCwgSSBzaG91bGQgbGlzdCBpdCBhbnl3YXkgdG8gYmUgc2FmZSBhbmQgZXhwbGljaXQuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgZW5hYmxlZCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjA2LjMzMjE5NDk1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiR29vZ2xlIERldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTI6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxMzpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4gIDE0OlxcdFxcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX0dPT0dMRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgR1ZFXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAyNzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MDYuMzMyMzAxNjg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjYxNjg2MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBHVkUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgZXhwbG9pdGFibGUgY2hhbmdlcyB3aXRoaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLlxuXG5GaXJzdCwgSSBpZGVudGlmaWVkIGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgIGFzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgbWVudGlvbiBHQ0UgYW5kIFFFTVUgYXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTaW5jZSBzeXprYWxsZXIgKnByaW1hcmlseSogdGFyZ2V0cyBHQ0UsIGFuZCBHVkUgaXMgdGhlIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIEdDRSwgdGhlIGNvZGUgaXMgaW5kZWVkIHJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0LCB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmUgY2xlYXIgZXhjZXB0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNlZTpcblxuKiAgIFRoZSBhZGRpdGlvbiBvZiBgZ3ZlX3B0cF9hZGpmaW5lYCBpbiBgZ3ZlX3B0cC5jYCwgd2hpY2ggcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIHNlZW1zIHNpbXBsZSwgYnV0IGl0J3Mgbm93IGFuIGV4cG9zZWQgZnVuY3Rpb24gYW5kIGNvdWxkIGJlIGEgcG9pbnQgb2YgYXR0YWNrLlxuKiAgIEEgY2hlY2sgZm9yIGAhYnVmX2xlbmAgaW4gYGd2ZV9yeF9kcW9gIHdpdGhpbiBgZ3ZlX3J4X2Rxby5jYC4gVGhpcyBpcyBhIGJ1ZyBmaXggdGhhdCBwcmV2ZW50cyBwcm9jZXNzaW5nIG9mIGEgemVyby1sZW5ndGggcGFja2V0IGJ1ZmZlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjaGFuZ2VzIHdlcmUgdHJpdmlhbCBhbmQgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IHdhcyBzbWFsbC4gQnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJJ20gbm90IGxvb2tpbmcgYXQgKmltcGFjdCosIEknbSBsb29raW5nIGZvciBhIG1vZGlmY2F0aW9uIHRvIGtlcm5lbCBsb2dpYyBpbiBhIHJlYWNoYWJsZSBhcmVhLlxuXG5JIHJldmlld2VkIHRoZSBleGNsdXNpb25zIGxpc3QuIE5vbmUgb2YgdGhlIGV4Y2x1c2lvbnMgYXBwbHk6IG5vdCBkb2N1bWVudGF0aW9uLCBubyBjb25maWcgY2hhbmdlcywgbm8gZGVjb3JhdGl2ZSBjaGFuZ2VzLCBub3QgYSBQQ0kgZHJpdmVyIHJlbW92ZSwgaXQgaXMgY29yZSBrZXJuZWwgbG9naWMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgaXQgYXMgV29ydGhGdXp6aW5nPXRydWUuXG5cbk15IHByaW1hcnkgZm9jdXMgc3ltYm9sIHNob3VsZCBiZSBgZ3ZlX3B0cF9hZGpmaW5lYC4gV2hpbGUgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGAuYWRqZmluZWApIHdpdGhpbiBgZ3ZlX3B0cF9jYXBzYCwgbWVhbmluZyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEl0IGFjdHMgYXMgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIHRoZSBQVFAgc3Vic3lzdGVtLiBgZ3ZlX3J4X2Rxb2AgaXMgYSBob3QgcGF0aCBmdW5jdGlvbiBzbyBJJ20gc2tpcHBpbmcgaXQuXG5cblRoZSBjb25maWd1cmF0aW9ucyBJJ3ZlIGNvbmZpcm1lZCBhcmUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuIGBHVkVgIGRlcGVuZHMgb24gYFBDSV9NU0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGlzIGEgaGVscGVyLCBhbmQgYFBDSV9NU0lgIGlzIHN0YW5kYXJkLCBzbyB0aGVzZSBhcmUgbm90IG5lZWRlZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIFBUUCBjbG9jayBvcGVyYXRpb24sIGBndmVfcHRwX2FkamZpbmVgLCBhbmQgYSBjaGFuZ2UgaW4gUlggZmFzdCBwYXRoLCBgZ3ZlX3J4X2Rxb2AsIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIEdWRSBpcyBleHBsaWNpdGx5IHVzZWQgaW4gR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjkzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODoyMy45OTM5OTExODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIxMDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9HT09HTEVcIixcbiAgICBcIkdWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd2ZV9wdHBfYWRqZmluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgZHJpdmVyIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIG1pc3NpbmcgUFRQIGNsb2NrIG9wZXJhdGlvbiBgZ3ZlX3B0cF9hZGpmaW5lYCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIFJYIGZhc3QgcGF0aCAoYGd2ZV9yeF9kcW9gKSB3aGVuIGhhbmRsaW5nIHplcm8tbGVuZ3RoIHBheWxvYWQgYnVmZmVycyB3aXRoIGhlYWRlciBzcGxpdCBlbmFibGVkLiBTaW5jZSBHVkUgaXMgcmVhY2hhYmxlIGFuZCBhY3RpdmVseSB1c2VkIGluIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX3B0cF9hZGpmaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODoyNC4wNjkyMDgxMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjQzMzk2NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MjQuMDY5NjcwNDgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NjQyOTI5MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJbiBgZ3ZlX3B0cC5jYCwgaXQgYWRkcyBhIHN0dWIgZm9yIGBhZGpmaW5lYCAoYGd2ZV9wdHBfYWRqZmluZWApIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUFRQIGNvcmUgKGBwdHBfY2xvY2tfYWRqdGltZWApIHdoZW4gYG9wcy1cXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXFxuMi4gSW4gYGd2ZV9yeF9kcW8uY2AsIGl0IGFkZHMgYSBjaGVjayB0byByZXR1cm4gZWFybHkgYW5kIGZyZWUgdGhlIGJ1ZmZlciBpZiBgYnVmX2xlbmAgaXMgMC4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgZHJpdmVyIGNvdWxkIGFwcGVuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IHRvIGFuIHNrYiBvciBwYXNzIGEgMC1sZW5ndGggYnVmZmVyIHRvIGFuIFhEUCBwcm9ncmFtLiBBIDAtbGVuZ3RoIGZyYWdtZW50IGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBpdHMgbGVuZ3RoIGlzIDAsIG1lYW5pbmcgbm8gYnl0ZXMgZnJvbSB0aGUgZnJhZ21lbnQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCBieSB0aGUgbmV0d29yayBzdGFjay4gQW55IG91dC1vZi1ib3VuZHMgcmVhZHMgY2F1c2VkIGJ5IFhEUCBwcm9ncmFtcyBvciB0aGUgbmV0d29yayBzdGFjayBhc3N1bWluZyBhIG1pbmltdW0gZnJhZ21lbnQgbGVuZ3RoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkxNmM0MDI4NmU1ZTExY2NhZTg1MmRlN2NkMTFlYmIyNDBlM2VhNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIzOjI2OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xuaW5kZXggMDZiMWNmNGE1ZWZjYy4uMWQ2YzU5ZjRlYWQzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xuQEAgLTI2LDYgKzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZ3ZlX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbiBzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4gXHRcdFx0ICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuQEAgLTYwLDYgKzY1LDcgQEAgc3RhdGljIGxvbmcgZ3ZlX3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7XG4gXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbiBcdC5uYW1lXHRcdD0gXCJndmUgY2xvY2tcIixcbitcdC5hZGpmaW5lXHQ9IGd2ZV9wdHBfYWRqZmluZSxcbiBcdC5nZXR0aW1leDY0XHQ9IGd2ZV9wdHBfZ2V0dGltZXg2NCxcbiBcdC5zZXR0aW1lNjRcdD0gZ3ZlX3B0cF9zZXR0aW1lNjQsXG4gXHQuZG9fYXV4X3dvcmtcdD0gZ3ZlX3B0cF9kb19hdXhfd29yayxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5pbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5AQCAtODg2LDYgKzg4NiwxMSBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuIFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcbiBcdFx0cngtXHUwMDNlcnhfaHNwbGl0X2J5dGVzICs9IGhkcl9sZW47XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4rXG4rXHRcdGlmICghYnVmX2xlbikge1xuK1x0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fSBlbHNlIGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkIFx1MDAyNlx1MDAyNiByeC1cdTAwM2VkcW8ucGFnZV9wb29sIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcbiBcdFx0Lyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODoyNC4wNjk2NzE0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyNDA5NjM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIuIEl0J3MgdG91Y2hpbmcgYGd2ZV9wdHAuY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBUaGUgYGd2ZV9wdHAuY2AgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgYGd2ZV9wdHBfYWRqZmluZWAgZnVuY3Rpb24gdGhhdCBqdXN0IHJldHVybnMgYC1FT1BOT1RTVVBQYCBhbmQgcmVnaXN0ZXJpbmcgaXQuIE5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGp1c3QgYSBwbGFjZWhvbGRlciBvciBzdHViLCBpdCBzZWVtcy5cblxuVGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCBpcyBpbiBgZ3ZlX3J4X2Rxby5jYC4gSSBzZWUgdGhlIGBndmVfcnhfZHFvYCBmdW5jdGlvbiBiZWluZyBtb2RpZmllZC4gVGhlcmUncyB0aGlzIG5ldyBjaGVjayBhZGRlZDogYGlmICghYnVmX2xlbilgLiBJdCdzIGEgY29uZGl0aW9uYWwgYWZ0ZXIgc29tZSBzdGF0aXN0aWNzIHVwZGF0ZXMsIGFuZCwgaWYgYGJ1Zl9sZW5gIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IGZyZWVzIHRoZSBidWZmZXIgdXNpbmcgYGd2ZV9mcmVlX2J1ZmZlcmAgYW5kIHJldHVybnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGhhcyB0byBiZSBmaXhpbmcgYSBidWcuIEEgemVybyBgYnVmX2xlbmAgbGlrZWx5IGluZGljYXRlcyBzb21ldGhpbmcgd2VudCB3cm9uZyBlYXJsaWVyIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgcGVyaGFwcy4gSXQncyBhIGNsYXNzaWMgc2NlbmFyaW86IHRoZSBjb2RlIG1pZ2h0IGhhdmUgYmVlbiBwcm9jZWVkaW5nIGFzIGlmIHRoZXJlIHdhcyBhIHZhbGlkIGRhdGEgYnVmZmVyIHdoZW4gdGhlcmUgd2FzIG5vbmUuIFRoaXMgY291bGQgbWFuaWZlc3QgaW4gdmFyaW91cyB3YXlzIGRvd24gdGhlIGxpbmU6IGNyZWF0aW5nIGFuIGVtcHR5IFNLQiBmcmFnbWVudCwgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgZGFuZ2Vyb3VzIG91dC1vZi1ib3VuZHMgcmVhZCwgb3Igd3JpdGUuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqb3IgZXhwb3NlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IElmIGBidWZfbGVuYCBpcyAwLCBpdCBtZWFucyB0aGUgYnVmZmVyIGNvbnRlbnQgaXMgbm90IHZhbGlkLCBhbmQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucyBvbiBpdCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV2ZW4gdHJpZ2dlciBhIGNyYXNoIG9yIGNvcnJ1cHRpb24uIEJlZm9yZSwgaXQgd2FzIHBvdGVudGlhbGx5IHBhc3NpbmcgYSBidWZmZXIgb2YgbGVuZ3RoIHplcm8gdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGlzIHBhdGNoIHdvdWxkIGhhdmUgcHJldmVudGVkIGl0IG5vdy5cblxuSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gdGhpcyBhIGJpdCBkZWVwZXIuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGd2ZV9yeF9kcW8uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4ODYsIHRvIHVuZGVyc3RhbmQgKndoeSogYGJ1Zl9sZW5gIG1pZ2h0IGJlIHplcm8gaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCBjb3VsZCBoYXZlIGJlZW4gaGFwcGVuaW5nIHdpdGggdGhhdCB6ZXJvLWxlbmd0aCBidWZmZXIgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHJvb3QgY2F1c2UgaXMgY3J1Y2lhbCB0byBlbnN1cmluZyB0aGlzIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMuIEl0IGZlZWxzIGxpa2UgYSBnb29kIGNhdGNoLCBwb3RlbnRpYWxseSBwcmV2ZW50aW5nIGEgY2xhc3Mgb2YgYnVmZmVyLXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzEuMjkzNzcxMTM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzk1NDM2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX3J4X2Rxb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz03OTM9c3RhdGljIHZvaWQgZ3ZlX2RtYV9zeW5jKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTgxNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4MTU6c3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MTYtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGd2ZV9yeF9jb21wbF9kZXNjX2RxbyAqY29tcGxfZGVzYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwODA9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExMTk6XFx0XFx0ZXJyID0gZ3ZlX3J4X2RxbyhuYXBpLCByeCwgY29tcGxfZGVzYywgY29tcGxxLVxcdTAwM2VoZWFkLCByeC1cXHUwMDNlcV9udW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTExMjAtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzEuNjMzMzI3OTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjI0NzA4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGd2ZV9yeF9kcW8uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZ3ZlX3J4X2Rxby5jYCBmaWxlLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgODg2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBsaWtlbHkgaG91c2VzIHRoZSBjb2RlIEknbSBpbnRlcmVzdGVkIGluLCBnaXZlbiBteSBjdXJyZW50IG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGFueSByZWxhdGVkIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgbGFzdCB0aW1lIEkgbG9va2VkIGludG8gdGhpcyBtb2R1bGUgLSB3aGVyZSBkaWQgSSBsZWF2ZSBvZmY/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBiZWZvcmUgZGl2aW5nIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzQuMzU1ODAxMzc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdGlmIChidWZfc3RhdGUtXFx1MDAzZXhza19idWZmKVxcbiA4NTE6XFx0XFx0XFx0cmV0dXJuIGd2ZV9yeF94c2tfZHFvKG5hcGksIHJ4LCBjb21wbF9kZXNjLCBidWZfc3RhdGUsIHhwcm9nKTtcXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0LyogUGFnZSBtaWdodCBoYXZlIG5vdCBiZWVuIHVzZWQgZm9yIGF3aGlsZSBhbmQgd2FzIGxpa2VseSBsYXN0IHdyaXR0ZW5cXG4gODU0OlxcdFxcdCAqIGJ5IGEgZGlmZmVyZW50IHRocmVhZC5cXG4gODU1OlxcdFxcdCAqL1xcbiA4NTY6XFx0XFx0aWYgKHJ4LVxcdTAwM2VkcW8ucGFnZV9wb29sKSB7XFxuIDg1NzpcXHRcXHRcXHRpZiAoIW5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpXFxuIDg1ODpcXHRcXHRcXHRcXHRwcmVmZXRjaChuZXRtZW1fdG9fcGFnZShidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKTtcXG4gODU5OlxcdFxcdH0gZWxzZSB7XFxuIDg2MDpcXHRcXHRcXHRwcmVmZXRjaChidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWdlKTtcXG4gODYxOlxcdFxcdH1cXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cXG4gODY0OlxcdFxcdGlmIChoc3BsaXQpIHtcXG4gODY1OlxcdFxcdFxcdGludCB1bnNwbGl0ID0gMDtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0XFx0aWYgKGhkcl9sZW4gXFx1MDAyNlxcdTAwMjYgIWhibykge1xcbiA4Njg6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHQoc2l6ZV90KWJ1ZmZlcl9pZCAqIHByaXYtXFx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcXG4gODcwOlxcdFxcbiA4NzE6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZCA9XFxuIDg3MjpcXHRcXHRcXHRcXHRcXHRndmVfcnhfY29weV9kYXRhKHByaXYtXFx1MDAzZWRldiwgbmFwaSxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCByeC1cXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgKyBvZmZzZXQsXFxuIDg3NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyX2xlbik7XFxuIDg3NTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQpKVxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gODc3OlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgPSByeC1cXHUwMDNlY3R4LnNrYl9oZWFkO1xcbiA4Nzg6XFx0XFxuIDg3OTpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZWRxby5wYWdlX3Bvb2wpXFxuIDg4MDpcXHRcXHRcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKTtcXG4gODgxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MjpcXHRcXHRcXHRcXHR1bnNwbGl0ID0gMTtcXG4gODgzOlxcdFxcdFxcdH1cXG4gODg0OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA4ODU6XFx0XFx0XFx0cngtXFx1MDAzZXJ4X2hzcGxpdF9wa3QrKztcXG4gODg2OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcXG4gODg3OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfYnl0ZXMgKz0gaGRyX2xlbjtcXG4gODg4OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeC1cXHUwMDNlc3RhdHNzKTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0XFx0aWYgKCFidWZfbGVuKSB7XFxuIDg5MTpcXHRcXHRcXHRcXHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XFxuIDg5MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH0gZWxzZSBpZiAoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQgXFx1MDAyNlxcdTAwMjYgcngtXFx1MDAzZWRxby5wYWdlX3Bvb2wgXFx1MDAyNlxcdTAwMjZcXG4gODk1OlxcdFxcdFxcdCAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcXG4gODk2OlxcdFxcdFxcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxcbiA4OTc6XFx0XFx0XFx0ICogYnVmZmVyLiBJZiB0aGUgcGFja2V0IGJ1ZmZlciBpcyBhIG5ldF9pb3YsIHRob3NlIGNhbid0IGJlXFxuIDg5ODpcXHRcXHRcXHQgKiBlYXNpbHkgbWFwcGVkIGludG8gdGhlIGtlcm5lbCBzcGFjZSB0byBhY2Nlc3MgdGhlIGhlYWRlclxcbiA4OTk6XFx0XFx0XFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxcbiA5MDA6XFx0XFx0XFx0ICovXFxuIDkwMTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MDI6XFx0XFx0fVxcbiA5MDM6XFx0XFxuIDkwNDpcXHRcXHQvKiBTeW5jIHRoZSBwb3J0aW9uIG9mIGRtYSBidWZmZXIgZm9yIENQVSB0byByZWFkLiAqL1xcbiA5MDU6XFx0XFx0Z3ZlX2RtYV9zeW5jKHByaXYsIHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cXG4gOTA4OlxcdFxcdGlmIChyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKSB7XFxuIDkwOTpcXHRcXHRcXHRpZiAodW5saWtlbHkoZ3ZlX3J4X2FwcGVuZF9mcmFncyhuYXBpLCBidWZfc3RhdGUsIGJ1Zl9sZW4sIHJ4LFxcbiA5MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHByaXYpKSAhPSAwKSB7XFxuIDkxMTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MTI6XFx0XFx0XFx0fVxcbiA5MTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDkxNDpcXHRcXHR9XFxuIDkxNTpcXHRcXG4gOTE2OlxcdFxcdGlmICh4cHJvZykge1xcbiA5MTc6XFx0XFx0XFx0c3RydWN0IGd2ZV94ZHBfYnVmZiBndmVfeGRwO1xcbiA5MTg6XFx0XFx0XFx0dm9pZCAqb2xkX2RhdGE7XFxuIDkxOTpcXHRcXHRcXHRpbnQgeGRwX2FjdDtcXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0XFx0eGRwX2luaXRfYnVmZihcXHUwMDI2Z3ZlX3hkcC54ZHAsIGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplLFxcbiA5MjI6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnJ4LVxcdTAwM2V4ZHBfcnhxKTtcXG4gOTIzOlxcdFxcdFxcdHhkcF9wcmVwYXJlX2J1ZmYoXFx1MDAyNmd2ZV94ZHAueGRwLFxcbiA5MjQ6XFx0XFx0XFx0XFx0XFx0IGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLnBhZ2VfYWRkcmVzcyArXFxuIDkyNTpcXHRcXHRcXHRcXHRcXHQgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFnZV9vZmZzZXQsXFxuIDkyNjpcXHRcXHRcXHRcXHRcXHQgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFkLFxcbiA5Mjc6XFx0XFx0XFx0XFx0XFx0IGJ1Zl9sZW4sIGZhbHNlKTtcXG4gOTI4OlxcdFxcdFxcdGd2ZV94ZHAuZ3ZlID0gcHJpdjtcXG4gOTI5OlxcdFxcdFxcdGd2ZV94ZHAuY29tcGxfZGVzYyA9IGNvbXBsX2Rlc2M7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdFxcdG9sZF9kYXRhID0gZ3ZlX3hkcC54ZHAuZGF0YTtcXG4gOTMyOlxcdFxcdFxcdHhkcF9hY3QgPSBicGZfcHJvZ19ydW5feGRwKHhwcm9nLCBcXHUwMDI2Z3ZlX3hkcC54ZHApO1xcbiA5MzM6XFx0XFx0XFx0YnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFkICs9IGd2ZV94ZHAueGRwLmRhdGEgLSBvbGRfZGF0YTtcXG4gOTM0OlxcdFxcdFxcdGJ1Zl9sZW4gPSBndmVfeGRwLnhkcC5kYXRhX2VuZCAtIGd2ZV94ZHAueGRwLmRhdGE7XFxuIDkzNTpcXHRcXHRcXHRpZiAoeGRwX2FjdCAhPSBYRFBfUEFTUykge1xcbiA5MzY6XFx0XFx0XFx0XFx0Z3ZlX3hkcF9kb25lX2Rxbyhwcml2LCByeCwgXFx1MDAyNmd2ZV94ZHAueGRwLCB4cHJvZywgeGRwX2FjdCxcXG4gOTM3OlxcdFxcdFxcdFxcdFxcdFxcdCBidWZfc3RhdGUpO1xcbiA5Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDkzOTpcXHRcXHRcXHR9XFxuIDk0MDpcXHRcXG4gOTQxOlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA5NDI6XFx0XFx0XFx0cngtXFx1MDAzZXhkcF9hY3Rpb25zW1hEUF9QQVNTXSsrO1xcbiA5NDM6XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA5NDQ6XFx0XFx0fVxcbiA5NDU6XFx0XFxuIDk0NjpcXHRcXHRpZiAoZW9wIFxcdTAwMjZcXHUwMDI2IGJ1Zl9sZW4gXFx1MDAzYz0gcHJpdi1cXHUwMDNlcnhfY29weWJyZWFrIFxcdTAwMjZcXHUwMDI2XFxuIDk0NzpcXHRcXHQgICAgIShyeC1cXHUwMDNlZHFvLnBhZ2VfcG9vbCBcXHUwMDI2XFx1MDAyNlxcbiA5NDg6XFx0XFx0ICAgICAgbmV0bWVtX2lzX25ldF9pb3YoYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ubmV0bWVtKSkpIHtcXG4gOTQ5OlxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX2hlYWQgPSBndmVfcnhfY29weShwcml2LVxcdTAwM2VkZXYsIG5hcGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjM0LjM1NTk2NjQ4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI0NTE0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGBndmVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUlggcGF0aC4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGhhbmRsaW5nIGEgYGJ1Zl9sZW5gIG9mIHplcm8sIHdoaWNoIHNlZW1zIHRvIGluZGljYXRlIGFuIGVtcHR5IGJ1ZmZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd2Fzbid0IGdyYWNlZnVsbHkgaGFuZGxpbmcgdGhpcyBlZGdlIGNhc2UuXG5cbkxvb2tpbmcgYXQgdGhlIGFkZGVkIGNvZGUsIHRoZSBjcnVjaWFsIGxpbmUgaXMgYGlmICghYnVmX2xlbikgeyBndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7IHJldHVybiAwOyB9YC4gIFRoaXMgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIGEgc2hvcnQtY2lyY3VpdC4gSWYgYGJ1Zl9sZW5gIGlzIHplcm8sIG1lYW5pbmcgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgd2UgZnJlZSBpdCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZXJlJ3Mgbm8gZGF0YSB0byBwcm9jZXNzLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY29udGludWUgZG93biB0aGUgcGF0aC5cblxuQmVmb3JlIHRoaXMgZml4LCBob3dldmVyLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB0aGUgY29kZSB3b3VsZCBwcm9jZWVkIGV2ZW4gd2hlbiBgYnVmX2xlbmAgd2FzIHplcm8uIEl0IHdvdWxkIGNhbGwgYGd2ZV9kbWFfc3luYyhwcml2LCByeCwgYnVmX3N0YXRlLCBidWZfbGVuKWAuICBUZWNobmljYWxseSwgc3luY2luZyB6ZXJvIGJ5dGVzIHNob3VsZG4ndCBiZSAqaGFybWZ1bCogcGVyIHNlLCBidXQgaXQncyBjbGVhcmx5IHVubmVjZXNzYXJ5IG92ZXJoZWFkLiBJdCdzIGEgd2FzdGUgb2YgY3ljbGVzLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBoaWdoLXRocm91Z2hwdXQgbmV0d29yayB0cmFmZmljLiBUaGVuIHRoZSBjb2RlIHdvdWxkIG1vdmUgdG8gYGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCwgcHJpdilgLiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBTaW5jZSB0aGUgcHJldmlvdXMgY2FsbCBoYXBwZW5lZCB3aGVuIGBidWZfbGVuYCB3YXMgemVybywgSSdtIG5vdyBjdXJpb3VzOiB3aGF0IGRvZXMgYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgIGFjdHVhbGx5ICpkbyogd2l0aCBhIHplcm8tbGVuZ3RoIGJ1ZmZlcj8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIGdyYWNlZnVsIGhhbmRsaW5nIGZvciBhbiBlbXB0eSBidWZmZXIgb3IgaWYgaXQgd291bGQgY2F1c2UgaXNzdWVzIGRvd25zdHJlYW0uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgb3JpZ2luYWwgcHJvYmxlbSBhbmQgdGhlIHBhdGNoJ3MgaW1wcm92ZW1lbnQ6IGlzIHRoZSBwYXRjaCBqdXN0IGEgbWljcm8tb3B0aW1pemF0aW9uIG9yIGlzIGl0IGZpeGluZyBhIHN1YnRsZSBidWc/IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg0MiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjM5LjU4MDQ4Mzc2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MjQ3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX3J4X2FwcGVuZF9mcmFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz01ODM9c3RhdGljIHZvaWQgZ3ZlX3NrYl9hZGRfcnhfZnJhZyhzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjA0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjYwNTpzdGF0aWMgaW50IGd2ZV9yeF9hcHBlbmRfZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTYwNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvICpidWZfc3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz04MTU9c3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkwOC1cXHRpZiAocngtXFx1MDAzZWN0eC5za2JfaGVhZCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkwOTpcXHRcXHRpZiAodW5saWtlbHkoZ3ZlX3J4X2FwcGVuZF9mcmFncyhuYXBpLCBidWZfc3RhdGUsIGJ1Zl9sZW4sIHJ4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkxMC1cXHRcXHRcXHRcXHRcXHRcXHQgcHJpdikpICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzkuNjI1MDExMTgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzExMjQ1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2A6XG5cbioqRGlzc2VjdGluZyBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBCYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YSBmcmFnbWVudHMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdWRSBkcml2ZXIuIFByb2JhYmx5IGhhbmRsaW5nIHJlYXNzZW1ibHkgb3IgYnVmZmVyIG1hbmFnZW1lbnQgb2Ygc29tZSBraW5kLiBHaXZlbiBpdCdzIGFwcGVuZGluZyBmcmFnbWVudHMsIG15IGluaXRpYWwgZ3Vlc3MgaXMgaXQncyBvcGVyYXRpbmcgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcmVjZWl2ZSBwYXRoLCBhZnRlciBzb21lIGluaXRpYWwgcGFja2V0IHByb2Nlc3NpbmcsIHBlcmhhcHMuIEknbGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgdG8gYmUgY2VydGFpbiwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0byBncmFzcCB0aGUgbWVtb3J5IG1vZGVsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyB3YW50IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIHRvIGFzc2VzcyBwb3RlbnRpYWwgaXNzdWVzIGFuZCBvcHRpbWl6YXRpb25zLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIERNQSBvciBpcyB1c2luZyBzaGFyZWQgbWVtb3J5IGJ1ZmZlcnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjQzLjY1NjEzODgwOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA1OlxcdHN0YXRpYyBpbnQgZ3ZlX3J4X2FwcGVuZF9mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIDYwNjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvICpidWZfc3RhdGUsXFxuIDYwNzpcXHRcXHRcXHRcXHQgICAgICAgdTE2IGJ1Zl9sZW4sIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuIDYwODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbiA2MDk6XFx0e1xcbiA2MTA6XFx0XFx0aW50IG51bV9mcmFncyA9IHNrYl9zaGluZm8ocngtXFx1MDAzZWN0eC5za2JfdGFpbCktXFx1MDAzZW5yX2ZyYWdzO1xcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHRpZiAodW5saWtlbHkobnVtX2ZyYWdzID09IE1BWF9TS0JfRlJBR1MpKSB7XFxuIDYxMzpcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2MTQ6XFx0XFxuIDYxNTpcXHRcXHRcXHRza2IgPSBuYXBpX2FsbG9jX3NrYihuYXBpLCAwKTtcXG4gNjE2OlxcdFxcdFxcdGlmICghc2tiKVxcbiA2MTc6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRcXHRpZiAocngtXFx1MDAzZWRxby5wYWdlX3Bvb2wpXFxuIDYyMDpcXHRcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRcXHRpZiAocngtXFx1MDAzZWN0eC5za2JfdGFpbCA9PSByeC1cXHUwMDNlY3R4LnNrYl9oZWFkKVxcbiA2MjM6XFx0XFx0XFx0XFx0c2tiX3NoaW5mbyhyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKS1cXHUwMDNlZnJhZ19saXN0ID0gc2tiO1xcbiA2MjQ6XFx0XFx0XFx0ZWxzZVxcbiA2MjU6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfdGFpbC1cXHUwMDNlbmV4dCA9IHNrYjtcXG4gNjI2OlxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgPSBza2I7XFxuIDYyNzpcXHRcXHRcXHRudW1fZnJhZ3MgPSAwO1xcbiA2Mjg6XFx0XFx0fVxcbiA2Mjk6XFx0XFx0aWYgKHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgIT0gcngtXFx1MDAzZWN0eC5za2JfaGVhZCkge1xcbiA2MzA6XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZC1cXHUwMDNlbGVuICs9IGJ1Zl9sZW47XFxuIDYzMTpcXHRcXHRcXHRyeC1cXHUwMDNlY3R4LnNrYl9oZWFkLVxcdTAwM2VkYXRhX2xlbiArPSBidWZfbGVuO1xcbiA2MzI6XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZC1cXHUwMDNldHJ1ZXNpemUgKz0gYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8uYnVmX3NpemU7XFxuIDYzMzpcXHRcXHR9XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdC8qIFRyaWdnZXIgb25kZW1hbmQgcGFnZSBhbGxvY2F0aW9uIGlmIHdlIGFyZSBydW5uaW5nIGxvdyBvbiBidWZmZXJzICovXFxuIDYzNjpcXHRcXHRpZiAoZ3ZlX3J4X3Nob3VsZF90cmlnZ2VyX2NvcHlfb25kZW1hbmQocngpKVxcbiA2Mzc6XFx0XFx0XFx0cmV0dXJuIGd2ZV9yeF9jb3B5X29uZGVtYW5kKHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRndmVfc2tiX2FkZF9yeF9mcmFnKHJ4LCBidWZfc3RhdGUsIG51bV9mcmFncywgYnVmX2xlbik7XFxuIDY0MDpcXHRcXHRndmVfcmV1c2VfYnVmZmVyKHJ4LCBidWZfc3RhdGUpO1xcbiA2NDE6XFx0XFx0cmV0dXJuIDA7XFxuIDY0MjpcXHR9XFxuIDY0MzpcXHRcXG4gNjQ0OlxcdHN0YXRpYyBpbnQgZ3ZlX3hkcF90eF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbiA2NDU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4gNjQ2OlxcdHtcXG4gNjQ3OlxcdFxcdHN0cnVjdCBndmVfdHhfcmluZyAqdHg7XFxuIDY0ODpcXHRcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xcbiA2NDk6XFx0XFx0dTMyIHR4X3FpZDtcXG4gNjUwOlxcdFxcdGludCBlcnI7XFxuIDY1MTpcXHRcXG4gNjUyOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuIDY1MzpcXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuIDY1NDpcXHRcXHRcXHRpZiAocngtXFx1MDAzZXhza19wb29sKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODo0My42NTYyNjU2OTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMjUxMjc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIFplcm8tTGVuZ3RoIEZyYWdtZW50IFNjZW5hcmlvIGluIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY2FzZSB3aGVyZSBgYnVmX2xlbmAgaXMgemVybyB3aXRoaW4gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW1wbGljYXRpb24gb2YgYWRkaW5nIGEgemVyby1sZW5ndGggZnJhZ21lbnQuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYWRkIGEgemVyby1sZW5ndGggZnJhZ21lbnQgd2hlbiBgYnVmX2xlbmAgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvci5cblxuT2theSwgbGV0IG1lIGNsYXJpZnk6IGBndmVfcnhfYXBwZW5kX2ZyYWdzYCAqZG9lcyogY2FsbCBgZ3ZlX3NrYl9hZGRfcnhfZnJhZyhyeCwgYnVmX3N0YXRlLCBudW1fZnJhZ3MsIDApYCBpZiBgYnVmX2xlbmAgaXMgemVyby4gVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyBgZ3ZlX3NrYl9hZGRfcnhfZnJhZ2AgaGFuZGxlcyB0aGF0IHplcm8gbGVuZ3RoLiBJJ3ZlIGdvdCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIHRvIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiBpdCBnZXRzIGEgemVybyBsZW5ndGggdmFsdWUuIFRoYXQncyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODo0Ny40NTg3ODE3MTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MzpcXHRzdGF0aWMgdm9pZCBndmVfc2tiX2FkZF9yeF9mcmFnKHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuIDU4NDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZSxcXG4gNTg1OlxcdFxcdFxcdFxcdFxcdGludCBudW1fZnJhZ3MsIHUxNiBidWZfbGVuKVxcbiA1ODY6XFx0e1xcbiA1ODc6XFx0XFx0aWYgKHJ4LVxcdTAwM2VkcW8ucGFnZV9wb29sKSB7XFxuIDU4ODpcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWdfbmV0bWVtKHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwsIG51bV9mcmFncyxcXG4gNTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5uZXRtZW0sXFxuIDU5MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFnZV9vZmZzZXQgK1xcbiA1OTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLnBhZCwgYnVmX2xlbixcXG4gNTkyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5idWZfc2l6ZSk7XFxuIDU5MzpcXHRcXHR9IGVsc2Uge1xcbiA1OTQ6XFx0XFx0XFx0c2tiX2FkZF9yeF9mcmFnKHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwsIG51bV9mcmFncyxcXG4gNTk1OlxcdFxcdFxcdFxcdFxcdGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLnBhZ2UsXFxuIDU5NjpcXHRcXHRcXHRcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCArXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWQsIGJ1Zl9sZW4sXFxuIDU5ODpcXHRcXHRcXHRcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5idWZfc2l6ZSk7XFxuIDU5OTpcXHRcXHR9XFxuIDYwMDpcXHR9XFxuIDYwMTpcXHRcXG4gNjAyOlxcdC8qIENoYWlucyBtdWx0aSBza2JzIGZvciBzaW5nbGUgcnggcGFja2V0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODo0Ny40NTg5MTM3NjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2OTk5MzM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJc3N1ZXMgd2l0aCBaZXJvLUxlbmd0aCBCdWZmZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgaXQgaGFuZGxlcyBgYnVmX2xlbiA9IDBgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgemVyby1sZW5ndGggZnJhZ21lbnQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgc2luY2Ugbm8gZGF0YSBpcyBjb3BpZWQsIHRoYXQncyBub3QgYSBjb25jZXJuLiBIb3dldmVyLCBpZiBgYnVmX2xlbmAgaXMgemVybyBidXQgc29tZWhvdyBjb250cmlidXRlcyB0byB0aGUgY2FsY3VsYXRpb24gb2YgYHRydWVzaXplYCBsYXRlciwgdGhhdCB3b3VsZCBiZSBhbiBpbnRlcmVzdGluZyB0aGluZyB0byBpbnZlc3RpZ2F0ZSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24uXG5cblRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYSB6ZXJvLWxlbmd0aCBmcmFnbWVudCAqY291bGQqIHdyZWFrIGhhdm9jIG9uIHRoZSBuZXR3b3JrIHN0YWNrIGluIGEgbW9yZSBnZW5lcmFsIHNlbnNlLCBsZWFkaW5nIHRvIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3JzLCBvdXQtb2YtYm91bmRzIHJlYWRzLCBvciBvdGhlciBpc3N1ZXMgaWYgdGhlIGNvZGUgYXNzdW1lcyBhbGwgZnJhZ21lbnRzIGhhdmUgYSBsZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIE5vdCBuZWNlc3NhcmlseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgYnV0IGEgYnVnIG5vbmV0aGVsZXNzLlxuXG5Pa2F5LCBsZXQncyBsb29rIGNsb3NlbHkgYXQgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyBpZiBgaHNwbGl0YCBpcyB0cnVlLCBhbmQgYGJ1Zl9sZW5gIGlzIHplcm8sIGBndmVfZnJlZV9idWZmZXJgIGlzIGNhbGxlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgSWYgYGhzcGxpdGAgaXMgc2V0LCBpdCBtZWFucyBhIGhlYWRlciBzcGxpdCBoYXMgb2NjdXJyZWQsIGFuZCB0aGUgaGVhZGVyIGhhcyBiZWVuIGNvcGllZCBpbnRvIGByeC1cdTAwM2VjdHguc2tiX2hlYWRgLiBUaGUgZmFjdCB0aGF0IHdlIHJldHVybiAwIGVhcmx5IGlmIGBidWZfbGVuYCBpcyB6ZXJvIG1lYW5zIHRoZXJlIGlzIG5vIGRhdGEgcGF5bG9hZCBpbiB0aGlzIGJ1ZmZlci4gSWYgd2UgKmRpZG4ndCogcmV0dXJuLCB0aGUgY29kZSB3b3VsZCBzeW5jIHRoZSBETUEgYnVmZmVyLCBhbmQgdGhlbiwgaWYgYHJ4LVx1MDAzZWN0eC5za2JfaGVhZGAgZXhpc3RzLCBhcHBlbmQgYSB6ZXJvLWxlbmd0aCBmcmFnbWVudC4gSG1tLCB3aGF0IGlmIGBoZHJfbGVuIFx1MDAyNlx1MDAyNiAhaGJvYCBpcyBmYWxzZT8gIFRoZW4gYHJ4LVx1MDAzZWN0eC5za2JfaGVhZGAgKm1pZ2h0KiBiZSBOVUxMIGFuZCB0aGUgYGlmIChyeC1cdTAwM2VjdHguc2tiX2hlYWQpYCB3b3VsZCBiZSBza2lwcGVkLlxuXG5JZiB3ZSAqc2tpcCogdGhlIGFwcGVuZGluZywgaXQgd291bGQgdGhlbiBqdW1wIHRvIHRoZSB4ZHAgY29kZS4gVGhlIGNvbmNlcm4gaXM6IGlmIGBidWZfbGVuYCBpcyAwLCB0aGVuIHRoZSBgeGRwX3ByZXBhcmVfYnVmZmAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYGJ1Zl9sZW4gPSAwYC4gIFRoaXMgbWVhbnMgdGhlIEJQRiBwcm9ncmFtIG1pZ2h0IHRoZW4gcnVuIG9uIGEgemVyby1sZW5ndGggYnVmZmVyISBUaGF0IHNvdW5kcyByaXNreSwgYXMgdGhlIEJQRiBjb2RlIG1pZ2h0IGFzc3VtZSBhIG1pbmltdW0gcGFja2V0IGxlbmd0aCwgbGlrZSBmb3IgdGhlIEV0aGVybmV0IGhlYWRlciwgd2hpY2ggd291bGQgdHJpZ2dlciBvdXQtb2YtYm91bmRzIHJlYWRzLiBLQVNBTiAqc2hvdWxkKiBjYXRjaCB0aGlzLCBidXQgdGhhdCdzIHNvbWV0aGluZyB0byB2ZXJpZnkuXG5cblRoZXJlJ3MgYWxzbyB0aGUgYGVvcGAgY2FzZSwgYW5kIGlmIGBidWZfbGVuYCBpcyAwLCB0aGUgYGd2ZV9yeF9jb3B5YCBpcyBjYWxsZWQgd2l0aCBgYnVmX2xlbiA9IDBgLiBUaGlzIGFsbG9jYXRlcyBhbiBza2IgYW5kIGNvcGllcyAwIGJ5dGVzLCB0aGVuIHJldHVybnMuIEFnYWluLCBubyBtZW1vcnkgaXNzdWUuXG5cbk5vdywgd2FpdC4uLiBldmVuIGlmIGBidWZfbGVuYCBpcyAwLCBpcyB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQ/ICBBZ2Fpbiwgbm8gYnl0ZXMgYXJlIGNvcGllZCwgc28gbm8gcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkZpbmFsbHksIEkgbm90aWNlIHRoZSBpbmNsdXNpb24gb2YgYGd2ZV9wdHBfYWRqZmluZWAuIFRoaXMgc2VlbXMgdG8gYmUgYSBtaXNzaW5nIGZ1bmN0aW9uIHBvaW50ZXIuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gaXQgYW5kIGl0J3MgbnVsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyOTowMy4xNTg4NTAzNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQ1NDcyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRqZmluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmM9MTIyPXN0YXRpYyBpbnQgcHRwX2Nsb2NrX2FkanRpbWUoc3RydWN0IHBvc2l4X2Nsb2NrICpwYywgc3RydWN0IF9fa2VybmVsX3RpbWV4ICp0eClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2NC1cXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2suYzoxNjU6XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VhZGpmaW5lKG9wcywgdHgtXFx1MDAzZWZyZXEpO1xcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2Ni1cXHRcXHRpZiAoIWVycilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTM2PW1vZHVsZV9wYXJhbShmaXJtd2FyZSwgY2hhcnAsIDApO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtNDAtXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6NDE6c3RhdGljIGludCBfaWR0Y21fYWRqZmluZShzdHJ1Y3QgaWR0Y21fY2hhbm5lbCAqY2hhbm5lbCwgbG9uZyBzY2FsZWRfcHBtKTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy00Mi1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTE1MDc9c3RhdGljIGludCBpZHRjbV9zdG9wX3BoYXNlX3B1bGxfaW4oc3RydWN0IGlkdGNtX2NoYW5uZWwgKmNoYW5uZWwpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xNTEwLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE1MTE6XFx0ZXJyID0gX2lkdGNtX2FkamZpbmUoY2hhbm5lbCwgY2hhbm5lbC1cXHUwMDNlY3VycmVudF9mcmVxX3NjYWxlZF9wcG0pO1xcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE1MTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTE1NTM9c3RhdGljIGludCBkb19waGFzZV9wdWxsX2luX3N3KHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4MS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxNTgyOlxcdGVyciA9IF9pZHRjbV9hZGpmaW5lKGNoYW5uZWwsIGRlbHRhX3BwbSk7XFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4My1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTE3MDE9c3RhdGljIGludCBfaWR0Y21fYWRqcGhhc2Uoc3RydWN0IGlkdGNtX2NoYW5uZWwgKmNoYW5uZWwsIHMzMiBkZWx0YV9ucylcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE3MjctXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MTcyODpzdGF0aWMgaW50IF9pZHRjbV9hZGpmaW5lKHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTcyOS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xNzQ5LVxcdCAqXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MTc1MDpcXHQgKiBhZGpmaW5lOlxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE3NTEtXFx0ICogICAgICAgcHBtXzE2ICogNV4xMlxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTg3Nz1zdGF0aWMgaW50IGlkdGNtX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzMzIgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xODkzLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE4OTQ6c3RhdGljIGludCBpZHRjbV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCAgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE4OTUte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTkwNi1cXHRtdXRleF9sb2NrKGlkdGNtLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxOTA3OlxcdGVyciA9IF9pZHRjbV9hZGpmaW5lKGNoYW5uZWwsIHNjYWxlZF9wcG0pO1xcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE5MDgtXFx0bXV0ZXhfdW5sb2NrKGlkdGNtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMjAzNi1cXHQuZ2V0bWF4cGhhc2VcXHQ9IFxcdTAwMjZpZHRjbV9nZXRtYXhwaGFzZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoyMDM3OlxcdC5hZGpmaW5lXFx0PSBcXHUwMDI2aWR0Y21fYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDM4LVxcdC5hZGp0aW1lXFx0PSBcXHUwMDI2aWR0Y21fYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzX2RlcHJlY2F0ZWQgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDU0LVxcdC5nZXRtYXhwaGFzZSAgICA9IFxcdTAwMjZpZHRjbV9nZXRtYXhwaGFzZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoyMDU1OlxcdC5hZGpmaW5lXFx0PSBcXHUwMDI2aWR0Y21fYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDU2LVxcdC5hZGp0aW1lXFx0PSBcXHUwMDI2aWR0Y21fYWRqdGltZV9kZXByZWNhdGVkLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYz0yNzA9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkZmxfdG9kX2Nsb2NrX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9kZmxfdG9kLmMtMjczLVxcdC5tYXhfYWRqID0gVE9EX01BWF9BREosXFxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYzoyNzQ6XFx0LmFkamZpbmUgPSBkZmxfdG9kX2FkanVzdF9maW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9kZmxfdG9kLmMtMjc1LVxcdC5hZGp0aW1lID0gZGZsX3RvZF9hZGp1c3RfdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYz0xMTQ9c3RhdGljIHM2NCBkdGVfcmVhZF9uY29fd2l0aF9vdmYoc3RydWN0IHB0cF9kdGUgKnB0cF9kdGUpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMTM1LVxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYzoxMzY6c3RhdGljIGludCBwdHBfZHRlX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMTM3LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYz0yMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfZHRlX2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMjIxLVxcdC5wcHNcXHRcXHQ9IDAsXFxuZHJpdmVycy9wdHAvcHRwX2R0ZS5jOjIyMjpcXHQuYWRqZmluZVxcdD0gcHRwX2R0ZV9hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYy0yMjMtXFx0LmFkanRpbWVcXHQ9IHB0cF9kdGVfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYz00Nzk9c3RhdGljIGludCBpZHRmYzNfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHMzMiBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy00OTAtXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjQ5MTpzdGF0aWMgaW50IF9pZHRmYzNfYWRqZmluZShzdHJ1Y3QgaWR0ZmMzICppZHRmYzMsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNDkyLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MDgtXFx0ICpcXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmM6NTA5OlxcdCAqIGFkamZpbmU6XFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jLTUxMC1cXHQgKiAgICAgICBwcG1fMTYgKiAyXjI4XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTIxLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYzo1MjI6c3RhdGljIGludCBpZHRmYzNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjMte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jLTUyNy1cXHRtdXRleF9sb2NrKGlkdGZjMy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjUyODpcXHRlcnIgPSBfaWR0ZmMzX2FkamZpbmUoaWR0ZmMzLCBzY2FsZWRfcHBtKTtcXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTI5LVxcdG11dGV4X3VubG9jayhpZHRmYzMtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jPTU5MD1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIGlkdGZjM19jYXBzID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jLTU5Ni1cXHQuYWRqcGhhc2VcXHQ9IFxcdTAwMjZpZHRmYzNfYWRqcGhhc2UsXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjU5NzpcXHQuYWRqZmluZVxcdD0gXFx1MDAyNmlkdGZjM19hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01OTgtXFx0LmFkanRpbWVcXHQ9IFxcdTAwMjZpZHRmYzNfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTUxMD1zdGF0aWMgdm9pZCBpZHQ4MnAzM19hZGp0aW1lX3dvcmthcm91bmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNTIyLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjUyMzpzdGF0aWMgaW50IF9pZHQ4MnAzM19hZGpmaW5lKHN0cnVjdCBpZHQ4MnAzM19jaGFubmVsICpjaGFubmVsLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNTI0LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTUzNy1cXHQgKlxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjUzODpcXHQgKiBhZGpmaW5lOlxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTUzOS1cXHQgKiAgICAgICBzY2FsZWRfcHBtICogNV4xMiAqIDEwXjVcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU3OT1zdGF0aWMgaW50IGlkdDgycDMzX3N0b3BfZGRjbyhzdHJ1Y3QgaWR0ODJwMzNfY2hhbm5lbCAqY2hhbm5lbClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTU4Mi1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo1ODM6XFx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCwgY2hhbm5lbC1cXHUwMDNlY3VycmVudF9mcmVxKTtcXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01ODQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU5Mj1zdGF0aWMgaW50IGlkdDgycDMzX3N0YXJ0X2RkY28oc3RydWN0IGlkdDgycDMzX2NoYW5uZWwgKmNoYW5uZWwsIHMzMiBkZWx0YV9ucylcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTYxMi1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo2MTM6XFx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCxcXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy02MTQtXFx0XFx0XFx0XFx0aWR0ODJwMzNfZGRjb19zY2FsZWRfcHBtKGN1cnJlbnRfcHBtLCBwcGIpKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTk3ND1zdGF0aWMgaW50IGlkdDgycDMzX2FkandyaXRlcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHMzMiBvZmZzZXRfbnMpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy0xMDA5LVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjEwMTA6c3RhdGljIGludCBpZHQ4MnAzM19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAxMS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy0xMDIzLVxcdG11dGV4X2xvY2soaWR0ODJwMzMtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjEwMjQ6XFx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCwgc2NhbGVkX3BwbSk7XFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAyNS1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTExNTM9c3RhdGljIHZvaWQgaWR0ODJwMzNfY2Fwc19pbml0KHUzMiBpbmRleCwgc3RydWN0IHB0cF9jbG9ja19pbmZvICpjYXBzLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTE2NS1cXHRjYXBzLVxcdTAwM2VnZXRtYXhwaGFzZSA9IGlkdDgycDMzX2dldG1heHBoYXNlO1xcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjExNjY6XFx0Y2Fwcy1cXHUwMDNlYWRqZmluZSA9IGlkdDgycDMzX2FkamZpbmU7XFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTE2Ny1cXHRjYXBzLVxcdTAwM2VhZGp0aW1lID0gaWR0ODJwMzNfYWRqdGltZTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM9NTg9c3RhdGljIGludCBwdHBfa3ZtX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy02OC1cXG5kcml2ZXJzL3B0cC9wdHBfa3ZtX2NvbW1vbi5jOjY5OnN0YXRpYyBpbnQgcHRwX2t2bV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIGRlbHRhKVxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmMtNzAte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfa3ZtX2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfa3ZtX2NvbW1vbi5jLTExNy1cXHQucHBzXFx0XFx0PSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM6MTE4OlxcdC5hZGpmaW5lXFx0PSBwdHBfa3ZtX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy0xMTktXFx0LmFkanRpbWVcXHQ9IHB0cF9rdm1fYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM9NDQ9c3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX21vY2suYy00OC1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjQ5OnN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTUwLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM9MTE4PXN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmMtMTMyLVxcdFxcdC5tYXhfYWRqXFx0PSBNT0NLX1BIQ19NQVhfQURKX1BQQixcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjEzMzpcXHRcXHQuYWRqZmluZVxcdD0gbW9ja19waGNfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTEzNC1cXHRcXHQuYWRqdGltZVxcdD0gbW9ja19waGNfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmM9NjM2PXN0YXRpYyB2b2lkIG5ldGNfdGltZXJfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgdTY0IHBlcmlvZClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmMtNjU4LVxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmM6NjU5OnN0YXRpYyBpbnQgbmV0Y190aW1lcl9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy02NjAte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYz03MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBuZXRjX3RpbWVyX3B0cF9jYXBzID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy03NDYtXFx0XFx0XFx0XFx0IFBUUF9TVFJJQ1RfRkxBR1MsXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYzo3NDc6XFx0LmFkamZpbmVcXHQ9IG5ldGNfdGltZXJfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jLTc0OC1cXHQuYWRqdGltZVxcdD0gbmV0Y190aW1lcl9hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTE2MTM9c3RhdGljIGludFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxNjE0OnB0cF9vY3BfbnVsbF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTYxNS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTczND1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9vY3BfY2xvY2tfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQwLVxcdC5hZGp0aW1lXFx0PSBwdHBfb2NwX2FkanRpbWUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE3NDE6XFx0LmFkamZpbmVcXHQ9IHB0cF9vY3BfbnVsbF9hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQyLVxcdC5hZGpwaGFzZVxcdD0gcHRwX29jcF9udWxsX2FkanBoYXNlLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3BjaC5jPTI5NT1zdGF0aWMgaXJxcmV0dXJuX3QgaXNyKGludCBpcnEsIHZvaWQgKnByaXYpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtMzM5LVxcbmRyaXZlcnMvcHRwL3B0cF9wY2guYzozNDA6c3RhdGljIGludCBwdHBfcGNoX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtMzQxLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9wY2guYz00MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfcGNoX2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtNDMyLVxcdC5wcHNcXHRcXHQ9IDAsXFxuZHJpdmVycy9wdHAvcHRwX3BjaC5jOjQzMzpcXHQuYWRqZmluZVxcdD0gcHRwX3BjaF9hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9wY2guYy00MzQtXFx0LmFkanRpbWVcXHQ9IHB0cF9wY2hfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jPTE5Nj1FWFBPUlRfU1lNQk9MX0dQTChwdHBfcW9yaXFfaXNyKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTIwMS1cXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYzoyMDI6aW50IHB0cF9xb3JpcV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMjAzLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTIzMC19XFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmM6MjMxOkVYUE9SVF9TWU1CT0xfR1BMKHB0cF9xb3JpcV9hZGpmaW5lKTtcXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYy0yMzItXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYz0zNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfcW9yaXFfY2FwcyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTM1Ny1cXHQucHBzXFx0XFx0PSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jOjM1ODpcXHQuYWRqZmluZVxcdD0gcHRwX3FvcmlxX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMzU5LVxcdC5hZGp0aW1lXFx0PSBwdHBfcW9yaXFfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM9MTE9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9zdGNrZV9jbG9jaywgKnB0cF9xcHRfY2xvY2s7XFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy0xMi1cXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jOjEzOnN0YXRpYyBpbnQgcHRwX3MzOTBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtMTQte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYz04Mz1zdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9zMzkwX3N0Y2tlX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jLTg2LVxcdC5tYXhfYWRqXFx0PSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM6ODc6XFx0LmFkamZpbmVcXHQ9IHB0cF9zMzkwX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy04OC1cXHQuYWRqdGltZVxcdD0gcHRwX3MzOTBfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM9OTQ9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfczM5MF9xcHRfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtOTctXFx0Lm1heF9hZGpcXHQ9IDAsXFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYzo5ODpcXHQuYWRqZmluZVxcdD0gcHRwX3MzOTBfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jLTk5LVxcdC5hZGp0aW1lXFx0PSBwdHBfczM5MF9hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTM0PXN0YXRpYyB2b2lkIHB0cF92Y2xvY2tfaGFzaF9kZWwoc3RydWN0IHB0cF92Y2xvY2sgKnZjbG9jaylcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy00NC1cXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmM6NDU6c3RhdGljIGludCBwdHBfdmNsb2NrX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmMtNDYte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTE2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92Y2xvY2tfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy0xNjctXFx0Lm1heF9hZGpcXHQ9IDUwMDAwMDAwMCxcXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmM6MTY4OlxcdC5hZGpmaW5lXFx0PSBwdHBfdmNsb2NrX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jLTE2OS1cXHQuYWRqdGltZVxcdD0gcHRwX3ZjbG9ja19hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0yNTQ9c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjg2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjg3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBkZWx0YSlcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI4OC17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTMxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92bWNsb2NrX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMyMy1cXHQucHBzXFx0XFx0PSAwLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzI0OlxcdC5hZGpmaW5lXFx0PSBwdHBfdm1jbG9ja19hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzI1LVxcdC5hZGp0aW1lXFx0PSBwdHBfdm1jbG9ja19hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jPTM5PXN0YXRpYyBpbnQgcHRwX3Ztd19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jLTQzLVxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYzo0NDpzdGF0aWMgaW50IHB0cF92bXdfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgZGVsdGEpXFxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jLTQ1LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYz03MT1zdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92bXdfY2xvY2tfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03NS1cXHQuYWRqdGltZVxcdD0gcHRwX3Ztd19hZGp0aW1lLFxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYzo3NjpcXHQuYWRqZmluZVxcdD0gcHRwX3Ztd19hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03Ny1cXHQuZ2V0dGltZTY0XFx0PSBwdHBfdm13X2dldHRpbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI5OjA0LjE5MzQwNDkyN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODUxOTE3MDU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSW50cm9kdWNlZCoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIHRoaXMgY29kZSBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXZSdyZSBsb29raW5nIGF0IGEgY291cGxlIG9mIGZpeGVzIGhlcmUsIG9uZSBpbiB0aGUgUFRQIGRyaXZlciBhbmQgYW5vdGhlciBpbiB0aGUgR1ZFIFJYIHBhdGguIE15IGNvbmNlcm4sIGFzIGFsd2F5cyB3aXRoIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3Mgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuRmlyc3QsIHRoZSBQVFAgY2hhbmdlLiBXZSdyZSBkZWFsaW5nIHdpdGggYHB0cF9jbG9ja19hZGp0aW1lYC4gSXQgYXBwZWFycyB0aGF0IGlmIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgTlVMTCwgd2hpY2ggaXMgcG9zc2libGUgaWYgdGhlIHVuZGVybHlpbmcgUFRQIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBmcmVxdWVuY3kgYWRqdXN0bWVudCBhbmQgdGhhdCBpcyBub3cgcHJvcGVybHkgaGFuZGxlZCwgd2UgZ2V0IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgZml4LCBgZ3ZlX3B0cF9hZGpmaW5lYCwgZXNzZW50aWFsbHkgcHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyAtRU9QTk9UU1VQUC4gVGhpcyBpcyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbi4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgcHJvdGVjdGlvbnMgd2lsbCBjYXRjaCB0aGlzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkIG9yIGxlYWtlZCBoZXJlLlxuXG5Ob3csIGxldCdzIG1vdmUgdG8gdGhlIEdWRSBSWCBwYXRoLiBUaGUgY29yZSBpc3N1ZSBoZXJlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIG9mIHplcm8tbGVuZ3RoIGJ1ZmZlcnMuIElmIGBidWZfbGVuYCBpcyB6ZXJvLCB3ZSdyZSBsaWtlbHkgc2tpcHBpbmcgdGhlIHdob2xlIHBheWxvYWQsIGFzIGludGVuZGVkIHdpdGggdGhpcyBwYXRjaC4gVGhpcyBpcyB1c2VkIGluIGd2ZV9yeF9kcW8uIFRoZSBmaXggaGVyZSBjaGVja3MgaWYgYGJ1Zl9sZW5gIGlzIDAuIElmIGl0IGlzIDAsIHRoZSBidWZmZXIgaXMgZnJlZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlYXJseS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSBjb3VsZCBwYXNzIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBBIDAtbGVuZ3RoIGZyYWdtZW50IGlzIHBlcmZlY3RseSB2YWxpZC4gVGhlIHNrYiB3aWxsIHRoZW4gaGF2ZSBhIGZyYWdtZW50IG9mIGxlbmd0aCAwLlxuXG5TbywgaGVyZSdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgMC1sZW5ndGggZnJhZ21lbnQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBmcmFnbWVudCAqcG9pbnRzKiB0byBhIHBhZ2UsIGJ1dCBiZWNhdXNlIHRoZSBsZW5ndGggaXMgemVybywgbm90aGluZyBpcyBhY3R1YWxseSByZWFkIGZyb20gdGhlIHBhZ2UuIElmIHRoZSBuZXR3b3JrIHN0YWNrIG9yIGFuIFhEUCBwcm9ncmFtICp0cmllcyogdG8gcmVhZCBmcm9tIGEgMC1sZW5ndGggZnJhZ21lbnQsIGl0J3MgZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBub3RoaW5nIGF0IGFsbCwgd2hpY2ggaXMgYSBjcmFzaC4gS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcy4gS01TQU4gZG9lc24ndCBhcHBseS5cblxuVGhlIDAtbGVuZ3RoIGZyYWdtZW50J3MgY29udHJpYnV0aW9uIHRvIGBza2ItXHUwMDNlbGVuYCBpcyAwIGJ5dGVzLiBTbyBpdCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS5cblxuT2theSwgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBwb3NzaWJsZSBleGVjdXRpb24gZmxvd3M6XG5cbjEuICAqKlplcm8tTGVuZ3RoIEZyYWdtZW50OioqIFRoZSBkYXRhIGJ1ZmZlciBoYXMgYGJ1Zl9sZW5gIG9mIDAuIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCBpcyBjYWxsZWQsIGFuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBTS0IuIFRoaXMgaXMgd2hlcmUgaXTigJlzIHRoZSBmcmFnbWVudCBpcyBhc3NpZ25lZCB0byBgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlYC5cbjIuICAqKk5ldHdvcmsgU3RhY2sgUmVhZDoqKiBJZiB0aGUgbmV0d29yayBzdGFjayB0cmllcyB0byByZWFkIGBza2ItXHUwMDNlbGVuYCBieXRlcyBmcm9tIHRoZSBTS0IsIGFuZCB0aGUgZnJhZ21lbnQgaXMgYWNjZXNzZWQsIGl0IHdpbGwgcmVhZCAwIGJ5dGVzLCBzbyB0aGlzIGlzIG5vdCBhIHByb2JsZW0uIEV2ZW4gaWYgdGhlIGNvZGUgKmluY29ycmVjdGx5KiBjYWxjdWxhdGVzIHJlYWQgbGVuZ3RoIGFuZCB0cmllcyB0byByZWFkIG1vcmUsIHdlIHNob3VsZCBnZXQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGNhdWdodCBieSBLQVNBTi5cbjMuICAqKlhEUCBQcm9ncmFtIFJlYWQ6KiogSWYgYW4gWERQIHByb2dyYW0gdHJpZXMgdG8gcmVhZCBmcm9tIHRoZSAwLWxlbmd0aCBmcmFnbWVudCwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBwYWdlIGFzc2lnbmVkIHRvIGl0IGFuZCBjb3VsZCBlaXRoZXIgc3VjY2VlZCBpZiBjb2RlIGlzIGNvcnJlY3QsIG9yIGZhaWwgd2l0aCBLQVNBTiBpZiBvdXQtb2YtYm91bmRzLlxuNC4gICoqVXNlcnNwYWNlIENvcHkgKGUuZy4sIEFGX1BBQ0tFVCk6KiogSWYgdGhlIFNLQiBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBgc2tiLVx1MDAzZWxlbmAgKHdoaWNoIGluY2x1ZGVzIDAgZnJvbSB0aGUgMC1sZW5ndGggZnJhZ21lbnQpIGJ5dGVzIHdpbGwgYmUgY29waWVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuXG5cblRoZXJlZm9yZSwgdGhlIGZpeCAqcHJldmVudHMqIGlzc3VlcyByZWxhdGVkIHRvIHplcm8tbGVuZ3RoIGJ1ZmZlcnMsIGJ1dCBpdCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBLQVNBTiBjb3ZlcnMgdGhlIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlcywgYW5kIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBmb3IgS01TQU4uXG5cbkluIHN1bW1hcnksIG15IGFzc2Vzc21lbnQgaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc5LCJPdXRwdXRUb2tlbnMiOjI5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjk6MjIuNzEyNTc4NTEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJbiBgZ3ZlX3B0cC5jYCwgaXQgYWRkcyBhIHN0dWIgZm9yIGBhZGpmaW5lYCAoYGd2ZV9wdHBfYWRqZmluZWApIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUFRQIGNvcmUgKGBwdHBfY2xvY2tfYWRqdGltZWApIHdoZW4gYG9wcy1cXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXFxuMi4gSW4gYGd2ZV9yeF9kcW8uY2AsIGl0IGFkZHMgYSBjaGVjayB0byByZXR1cm4gZWFybHkgYW5kIGZyZWUgdGhlIGJ1ZmZlciBpZiBgYnVmX2xlbmAgaXMgMC4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgZHJpdmVyIGNvdWxkIGFwcGVuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IHRvIGFuIHNrYiBvciBwYXNzIGEgMC1sZW5ndGggYnVmZmVyIHRvIGFuIFhEUCBwcm9ncmFtLiBBIDAtbGVuZ3RoIGZyYWdtZW50IGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBpdHMgbGVuZ3RoIGlzIDAsIG1lYW5pbmcgbm8gYnl0ZXMgZnJvbSB0aGUgZnJhZ21lbnQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCBieSB0aGUgbmV0d29yayBzdGFjay4gQW55IG91dC1vZi1ib3VuZHMgcmVhZHMgY2F1c2VkIGJ5IFhEUCBwcm9ncmFtcyBvciB0aGUgbmV0d29yayBzdGFjayBhc3N1bWluZyBhIG1pbmltdW0gZnJhZ21lbnQgbGVuZ3RoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEluIGBndmVfcHRwLmNgLCBpdCBhZGRzIGEgc3R1YiBmb3IgYGFkamZpbmVgIChgZ3ZlX3B0cF9hZGpmaW5lYCkgd2hpY2ggcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBQVFAgY29yZSAoYHB0cF9jbG9ja19hZGp0aW1lYCkgd2hlbiBgb3BzLVxcdTAwM2VhZGpmaW5lYCBpcyBpbnZva2VkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi5cXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxcblxcbk5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWdzIHRoaXMgcGF0Y2ggZml4ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 22:47:43 +0000 UTC FinishedAt: 2026-08-07 23:29:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "d879a52c-ece2-4ed5-ab17-8a415e4fa3e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gve_ptp_adjfine" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfR09PR0xFJiMzNDssCiAgICAmIzM0O0dWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9wdHBfYWRqZmluZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSW4gYGd2ZV9wdHAuY2AsIGl0IGFkZHMgYSBzdHViIGZvciBgYWRqZmluZWAgKGBndmVfcHRwX2FkamZpbmVgKSB3aGljaCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFBUUCBjb3JlIChgcHRwX2Nsb2NrX2FkanRpbWVgKSB3aGVuIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGRyaXZlciB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBlbnZpcm9ubWVudHMuIEl0IGFkZHMgYSBtaXNzaW5nIFBUUCBjbG9jayBvcGVyYXRpb24gYGd2ZV9wdHBfYWRqZmluZWAgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBSWCBmYXN0IHBhdGggKGBndmVfcnhfZHFvYCkgd2hlbiBoYW5kbGluZyB6ZXJvLWxlbmd0aCBwYXlsb2FkIGJ1ZmZlcnMgd2l0aCBoZWFkZXIgc3BsaXQgZW5hYmxlZC4gU2luY2UgR1ZFIGlzIHJlYWNoYWJsZSBhbmQgYWN0aXZlbHkgdXNlZCBpbiBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MTZjNDAyODZlNWUxMWNjYWU4NTJkZTdjZDExZWJiMjQwZTNlYTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXG5pbmRleCAwNmIxY2Y0YTVlZmNjLi4xZDZjNTlmNGVhZDNkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXG5AQCAtMjYsNiAmIzQzOzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGd2ZV9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZ3ZlX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4gXHRcdFx0ICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG5AQCAtNjAsNiAmIzQzOzY1LDcgQEAgc3RhdGljIGxvbmcgZ3ZlX3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7XG4gXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7Z3ZlIGNsb2NrXCYjMzQ7LFxuJiM0MztcdC5hZGpmaW5lXHQ9IGd2ZV9wdHBfYWRqZmluZSxcbiBcdC5nZXR0aW1leDY0XHQ9IGd2ZV9wdHBfZ2V0dGltZXg2NCxcbiBcdC5zZXR0aW1lNjRcdD0gZ3ZlX3B0cF9zZXR0aW1lNjQsXG4gXHQuZG9fYXV4X3dvcmtcdD0gZ3ZlX3B0cF9kb19hdXhfd29yayxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5pbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5AQCAtODg2LDYgJiM0Mzs4ODYsMTEgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiBcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0O1xuIFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXMgJiM0Mzs9IGhkcl9sZW47XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFidWZfbGVuKSB7XG4mIzQzO1x0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2UgaWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQgXHUwMDI2XHUwMDI2IHJ4LVx1MDAzZWRxby5wYWdlX3Bvb2wgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ubmV0bWVtKSkge1xuIFx0XHQvKiB3aGVuIGhlYWRlciBzcGxpdCBpcyBkaXNhYmxlZCwgdGhlIGhlYWRlciB3ZW50IHRvIHRoZSBwYWNrZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX3B0cF9hZGpmaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgZHJpdmVyIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIG1pc3NpbmcgUFRQIGNsb2NrIG9wZXJhdGlvbiBgZ3ZlX3B0cF9hZGpmaW5lYCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIFJYIGZhc3QgcGF0aCAoYGd2ZV9yeF9kcW9gKSB3aGVuIGhhbmRsaW5nIHplcm8tbGVuZ3RoIHBheWxvYWQgYnVmZmVycyB3aXRoIGhlYWRlciBzcGxpdCBlbmFibGVkLiBTaW5jZSBHVkUgaXMgcmVhY2hhYmxlIGFuZCBhY3RpdmVseSB1c2VkIGluIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxNmM0MDI4NmU1ZTExY2NhZTg1MmRlN2NkMTFlYmIyNDBlM2VhNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDIzOjI2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYwppbmRleCAwNmIxY2Y0YTVlZmNjLi4xZDZjNTlmNGVhZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYwpAQCAtMjYsNiAmIzQzOzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBndmVfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiAJCQkgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiAJCQkgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKQEAgLTYwLDYgJiM0Mzs2NSw3IEBAIHN0YXRpYyBsb25nIGd2ZV9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKQogc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gJiMzNDtndmUgY2xvY2smIzM0OywKJiM0MzsJLmFkamZpbmUJPSBndmVfcHRwX2FkamZpbmUsCiAJLmdldHRpbWV4NjQJPSBndmVfcHRwX2dldHRpbWV4NjQsCiAJLnNldHRpbWU2NAk9IGd2ZV9wdHBfc2V0dGltZTY0LAogCS5kb19hdXhfd29yawk9IGd2ZV9wdHBfZG9fYXV4X3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jCmluZGV4IDgyNzFmNzMxYTkxZmMuLjBlY2UyZjZmZGZmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jCkBAIC04ODYsNiAmIzQzOzg4NiwxMSBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LAogCQlyeC0mZ3Q7cnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0OwogCQlyeC0mZ3Q7cnhfaHNwbGl0X2J5dGVzICYjNDM7PSBoZHJfbGVuOwogCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4LSZndDtzdGF0c3MpOwomIzQzOwomIzQzOwkJaWYgKCFidWZfbGVuKSB7CiYjNDM7CQkJZ3ZlX2ZyZWVfYnVmZmVyKHJ4LCBidWZfc3RhdGUpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQogCX0gZWxzZSBpZiAoIXJ4LSZndDtjdHguc2tiX2hlYWQgJmFtcDsmYW1wOyByeC0mZ3Q7ZHFvLnBhZ2VfcG9vbCAmYW1wOyZhbXA7CiAJCSAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS0mZ3Q7cGFnZV9pbmZvLm5ldG1lbSkpIHsKIAkJLyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enphYmlsaXR5IG9mIGEgR1ZFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBndmVfcHRwLmNgIGFuZCBgZ3ZlX3J4X2Rxby5jYC4gVGhlIGBndmVfcHRwYCBwYXJ0IGlzIGp1c3QgcmV0dXJuaW5nIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzbiYjMzk7dCB2ZXJ5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIHRoYXQgYGd2ZV9yeF9kcW9gIG5vdyBoYXMgYSBjaGVjazogYGlmICghYnVmX2xlbikgeyAuLi4gfWAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0IGJlY2F1c2UgaXQmIzM5O3MgaW4gdGhlIFJYIGZhc3QgcGF0aC4KCk5vdywgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciBpcyB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSwgd2hpY2ggaXMgd2hlcmUgU3l6a2FsbGVyICpydW5zKiBieSBkZWZhdWx0LiBTbywgR1ZFIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB1c2VkLiBHb29kLiBDaGVja2luZyB0aGUgS2NvbmZpZyBjb25maXJtcyB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgKGBDT05GSUdfR1ZFYCkuIFRoZSBwYXRjaCBpcyBpbiB0aGUgYGd2ZV9yeF9kcW9gIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB2aWEgYGd2ZV9yeF9wb2xsX2Rxb2AuCgpUaGUgcXVlc3Rpb24gYmVjb21lczogSXMgdGhpcyBmdXp6YWJsZT8gSXQmIzM5O3MgbmV0d29yayBkcml2ZXIgUlgsIGFuZCBTeXprYWxsZXIgaXMgZGVzaWduZWQgdG8gZnV6eiBuZXR3b3JrIHBhY2tldHMsIHNvIHRoZSBpbml0aWFsIGltcHVsc2UgaXMgeWVzLiBIb3dldmVyLCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIENhbiBTeXprYWxsZXIgZGlyZWN0bHkgZnV6eiBHVkU/IFRoZSBHVkUgZHJpdmVyIHJlY2VpdmVzIHBhY2tldHMgZnJvbSB0aGUgaHlwZXJ2aXNvci4gU3l6a2FsbGVyIGNhbiBzZW5kIHBhY2tldHMsIGJ1dCBpdCBkb2VzbiYjMzk7dCAqY29udHJvbCogdGhlIEdWRSBkZXZpY2UgZGlyZWN0bHkuIFN5emthbGxlciBpcyBydW5uaW5nICp3aXRoaW4qIHRoZSBHQ0UgaW5zdGFuY2UsIHNvIGl0IGNhbiYjMzk7dCBtYW5pcHVsYXRlIHRoZSBoeXBlcnZpc29yJiMzOTtzIHZpZXcgb2YgdGhlIEdWRSBoYXJkd2FyZSwgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LgoKU3l6a2FsbGVyIGNhbiBmdXp6IHNvZnR3YXJlIGRldmljZXMgbGlrZSB0dW4vdGFwIG9yIHZldGguIEZvciBhIGhhcmR3YXJlIGRldmljZSwgaXQgdXN1YWxseSByZWxpZXMgb24gdGhlIG5ldHdvcmsgc2VuZGluZyBwYWNrZXRzIGJhY2sgdG8gaXRzZWxmIG9yIG9uIGJyb2FkY2FzdCBwYWNrZXRzIHRvIGNhdXNlIGFjdGl2aXR5LCBidXQgaXQgZG9lc24mIzM5O3QgaW5qZWN0IGFyYml0cmFyeSBoYXJkd2FyZSBkZXNjcmlwdG9ycy4gR1ZFICppcyogYSBQQ0kgZGV2aWNlLCBidXQgU3l6a2FsbGVyICpkb2VzbiYjMzk7dCogZW11bGF0ZSBHVkUuIEl0JiMzOTtzIGp1c3QgKnVzaW5nKiBpdCB3aXRoaW4gR0NFLiBTeXprYWxsZXImIzM5O3Mgbm90IGNvbnRyb2xsaW5nIHRoZSBoYXJkd2FyZS4gSXQmIzM5O3MgaGFuZGxpbmcgKnJlYWwqIG5ldHdvcmsgdHJhZmZpYyAoU1NILCBldGMuKS4KClNvLCBjb250cm9sbGluZyBzb21ldGhpbmcgbGlrZSBgYnVmX2xlbmAgaXMgZGlmZmljdWx0IGJlY2F1c2UgdGhhdCYjMzk7cyBjb250cm9sbGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBub3QgdGhlIGd1ZXN0IE9TIHdoZXJlIFN5emthbGxlciBpcyBydW5uaW5nLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gY29udHJvbCB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBsZXRpb24gZGVzY3JpcHRvciBgY29tcGxfZGVzY2AuIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGFuIGVhc3kgd2F5IHRvIG1hbmlwdWxhdGUgdGhlIGRlc2NyaXB0b3IgY29udGVudHMgYmVjYXVzZSBpdCYjMzk7cyBjb21pbmcgZnJvbSB0aGUgaHlwZXJ2aXNvciwgd2hpY2ggdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0gaGFzIG5vIGNvbnRyb2wgb3Zlci4gVGhlIGd1ZXN0IGlzIHRydXN0aW5nIHRoZSBoeXBlcnZpc29yIGhlcmUuCgpTbywgaW4gc2hvcnQsIHdoaWxlIHRoZSBwYXRjaCAqbG9va3MqIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYW4gUlggcGF0aCBhbmQgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBwYWNrZXQgZnV6emluZywgcmVhbGlzdGljYWxseSwgU3l6a2FsbGVyJiMzOTtzIGRpcmVjdCBjb250cm9sIG92ZXIgdGhlIEdWRSBkZXZpY2UmIzM5O3MgUlggZGVzY3JpcHRvcnMgaXMgbGltaXRlZC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgZGVlcGVyIGRpZ2dpbmcgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB2aWFibGUgYW5nbGUgb2YgYXR0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9yeF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0dWRSkgJiM0Mzs9IGd2ZS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL01ha2VmaWxlOjQ6Z3ZlLXkgOj0gZ3ZlX21haW4ubyBndmVfdHgubyBndmVfdHhfZHFvLm8gZ3ZlX3J4Lm8gZ3ZlX3J4X2Rxby5vIGd2ZV9ldGh0b29sLm8gZ3ZlX2FkbWlucS5vIGd2ZV91dGlscy5vIGd2ZV9mbG93X3J1bGUubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9NYWtlZmlsZS01LVx0ICAgIGd2ZV9idWZmZXJfbWdtdF9kcW8ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTc5Mz1zdGF0aWMgdm9pZCBndmVfZG1hX3N5bmMoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTgxNC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgxNTpzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODE2LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZ3ZlX3J4X2NvbXBsX2Rlc2NfZHFvICpjb21wbF9kZXNjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwODA9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExMTk6XHRcdGVyciA9IGd2ZV9yeF9kcW8obmFwaSwgcngsIGNvbXBsX2Rlc2MsIGNvbXBscS1cdTAwM2VoZWFkLCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTIwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbWl0YXRpb25zIG9mIEZ1enppbmcgdGhlIEdWRSBSZWNlaXZlIERlc2NyaXB0b3IgUXVldWUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGd2ZV9yeF9kcW9gIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgaGFuZGxpbmcgY29tcGxldGlvbiBkZXNjcmlwdG9ycyBjb21pbmcgZnJvbSBlaXRoZXIgdGhlIGhhcmR3YXJlIG9yIHRoZSBoeXBlcnZpc29yLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2Ugc3l6a2FsbGVyIGlzIHJ1bm5pbmcgaW5zaWRlIHRoZSBndWVzdCwgaXQgY2FuJiMzOTt0IGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhlIGh5cGVydmlzb3IgdG8gaW5qZWN0IHNvbWV0aGluZyBvYnZpb3VzbHkgYmFkIGxpa2UgYSB6ZXJvLWxlbmd0aCBidWZmZXIgKGBidWZfbGVuID09IDBgKS4gU28sIHdoaWxlIHRoaXMgY29kZSBwYXRoICpleGlzdHMqLCBpdCBzZWVtcyBwcmV0dHkgcmVzaXN0YW50IHRvIG1lYW5pbmdmdWwgZnV6emluZyB0aHJvdWdoIGlucHV0IG11dGF0aW9uLCBiZWNhdXNlIHRoZSAqcmVhbCogaW5wdXRzIGNvbWUgZnJvbSBhIHRydXN0ZWQgaHlwZXJ2aXNvci4KCkJ1dCB0aGVuIEkgaGFkIGEgdGhvdWdodC4uLiBpcyB0aGVyZSAqYW55KiB3YXkgc3l6a2FsbGVyIGNvdWxkIGFjdHVhbGx5IGhpdCB0aGlzIGBidWZfbGVuID09IDBgIGNhc2U/IENvdWxkIGl0IGJlIGEgbGVnaXRpbWF0ZSBzdGF0ZSB1bmRlciAqbm9ybWFsKiBuZXR3b3JrIGNvbmRpdGlvbnM/IE1heWJlLCBpZiB0aGVyZSYjMzk7cyBhbiBlbXB0eSBwYWNrZXQgb3IgYSBoZWFkZXIgc3BsaXQgc2NlbmFyaW8gd2hlcmUgdGhlIHBheWxvYWQgaXRzZWxmIGlzIGVtcHR5IChsaWtlIGEgVENQIEFDSyB3aXRoIG5vIGRhdGEpLiBJZiBzbywgd2UgbWlnaHQgYWN0dWFsbHkgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgYnkgY3JhZnRpbmcgc3BlY2lmaWMgcGFja2V0cyEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IG9wZW5zIHVwIGEgbmV3IGF2ZW51ZS4KCkkgc2hvdWxkIHByb2JhYmx5IGdvIHRha2UgYSBsb29rIGF0IGBndmVfcnhfZHFvLmNgIGFyb3VuZCBsaW5lIDg4Ni4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFx0XHRwcmVmZXRjaChidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZ2UpO1xuIDg2MTpcdFx0fVxuIDg2MjpcdFxuIDg2MzpcdFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cbiA4NjQ6XHRcdGlmIChoc3BsaXQpIHtcbiA4NjU6XHRcdFx0aW50IHVuc3BsaXQgPSAwO1xuIDg2NjpcdFxuIDg2NzpcdFx0XHRpZiAoaGRyX2xlbiBcdTAwMjZcdTAwMjYgIWhibykge1xuIDg2ODpcdFx0XHRcdHNpemVfdCBvZmZzZXQgPVxuIDg2OTpcdFx0XHRcdFx0KHNpemVfdClidWZmZXJfaWQgKiBwcml2LVx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcbiA4NzA6XHRcbiA4NzE6XHRcdFx0XHRyeC1cdTAwM2VjdHguc2tiX2hlYWQgPVxuIDg3MjpcdFx0XHRcdFx0Z3ZlX3J4X2NvcHlfZGF0YShwcml2LVx1MDAzZWRldiwgbmFwaSxcbiA4NzM6XHRcdFx0XHRcdFx0XHQgcngtXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgJiM0Mzsgb2Zmc2V0LFxuIDg3NDpcdFx0XHRcdFx0XHRcdCBoZHJfbGVuKTtcbiA4NzU6XHRcdFx0XHRpZiAodW5saWtlbHkoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZCkpXG4gODc2Olx0XHRcdFx0XHRnb3RvIGVycm9yO1xuIDg3NzpcdFx0XHRcdHJ4LVx1MDAzZWN0eC5za2JfdGFpbCA9IHJ4LVx1MDAzZWN0eC5za2JfaGVhZDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdFx0XHRpZiAocngtXHUwMDNlZHFvLnBhZ2VfcG9vbClcbiA4ODA6XHRcdFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHJ4LVx1MDAzZWN0eC5za2JfaGVhZCk7XG4gODgxOlx0XHRcdH0gZWxzZSB7XG4gODgyOlx0XHRcdFx0dW5zcGxpdCA9IDE7XG4gODgzOlx0XHRcdH1cbiA4ODQ6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDg4NTpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfcGt0JiM0MzsmIzQzOztcbiA4ODY6XHRcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0O1xuIDg4NzpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXMgJiM0Mzs9IGhkcl9sZW47XG4gODg4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4gODg5Olx0XG4gODkwOlx0XHRcdGlmICghYnVmX2xlbikge1xuIDg5MTpcdFx0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiA4OTI6XHRcdFx0XHRyZXR1cm4gMDtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0fSBlbHNlIGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkIFx1MDAyNlx1MDAyNiByeC1cdTAwM2VkcW8ucGFnZV9wb29sIFx1MDAyNlx1MDAyNlxuIDg5NTpcdFx0XHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcbiA4OTY6XHRcdFx0Lyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0XG4gODk3Olx0XHRcdCAqIGJ1ZmZlci4gSWYgdGhlIHBhY2tldCBidWZmZXIgaXMgYSBuZXRfaW92LCB0aG9zZSBjYW4mIzM5O3QgYmVcbiA4OTg6XHRcdFx0ICogZWFzaWx5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgc3BhY2UgdG8gYWNjZXNzIHRoZSBoZWFkZXJcbiA4OTk6XHRcdFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxuIDkwMDpcdFx0XHQgKi9cbiA5MDE6XHRcdFx0Z290byBlcnJvcjtcbiA5MDI6XHRcdH1cbiA5MDM6XHRcbiA5MDQ6XHRcdC8qIFN5bmMgdGhlIHBvcnRpb24gb2YgZG1hIGJ1ZmZlciBmb3IgQ1BVIHRvIHJlYWQuICovXG4gOTA1Olx0XHRndmVfZG1hX3N5bmMocHJpdiwgcngsIGJ1Zl9zdGF0ZSwgYnVmX2xlbik7XG4gOTA2Olx0XG4gOTA3Olx0XHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cbiA5MDg6XHRcdGlmIChyeC1cdTAwM2VjdHguc2tiX2hlYWQpIHtcbiA5MDk6XHRcdFx0aWYgKHVubGlrZWx5KGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYXlsb2FkIEJ1ZmZlciBIYW5kbGluZyBpbiBOZXR3b3JrIENvZGUqKgoKT2theSwgc28gYGJ1Zl9sZW5gIHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGRhdGEgcGF5bG9hZCBidWZmZXIuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IHRoZSBjb2RlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBgaHNwbGl0YCBpcyB0cnVlLCBtZWFuaW5nIHRoZSBoZWFkZXIgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LiBJZiBgaHNwbGl0YCBpcyBlbmFibGVkLCB0aGUgaGVhZGVyIGdldHMgY29waWVkIGludG8gdGhlIHNvY2tldCBidWZmZXIuIElmIHRoZXJlJiMzOTtzIG5vIGFjdHVhbCBwYXlsb2FkIChgIWJ1Zl9sZW5gKSwgaXQgZnJlZXMgdGhlIGJ1ZmZlciBhbmQgcmV0dXJucyAwLiBUaGF0IG1ha2VzIHNlbnNlLCBoYW5kbGluZyBhIGhlYWRlci1vbmx5IHBhY2tldCBsaWtlIGEgcHVyZSBUQ1AgQUNLLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IGFuIGF1dG9tYXRlZCBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/JiMzNDsgSXQgc2VlbXMgbGlrZWx5LiBTeXprYWxsZXIgaXMgZGVmaW5pdGVseSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhvc2UgZW1wdHktcGF5bG9hZCBwYWNrZXRzLCBhbmQgaWYgaGVhZGVyIHNwbGl0IGlzIGVuYWJsZWQsIHRoYXQgY29kZSBwYXRoIHdvdWxkIGJlIGhpdC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgZm9yIHBvdGVudGlhbCBidWdzIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3IuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBoc3BsaXRgIGlzIHNvbWV0aGluZyBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IGNvbnRyb2wgb3IgdHJpZ2dlciBpbmRpcmVjdGx5LgoKT2gsIGFuZCB0aGVyZSB3YXMgYWxzbyB0aGF0IGBndmVfcHRwX2FkamZpbmVgIGNoYW5nZSBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGFuZCBjaGVjayBvdXQgYGd2ZV9wdHAuY2AgdG8gc2VlIGlmIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcyBvciBpcyBhIHNlcGFyYXRlIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpXG4gICAyOlx0LyogR29vZ2xlIHZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyXG4gICAzOlx0ICpcbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQ1xuICAgNTpcdCAqL1xuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFwmIzM0O2d2ZS5oXCYjMzQ7XG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7Z3ZlX2FkbWlucS5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0LyogSW50ZXJ2YWwgdG8gc2NoZWR1bGUgYSBuaWMgdGltZXN0YW1wIGNhbGlicmF0aW9uLCAyNTBtcy4gKi9cbiAgMTE6XHQjZGVmaW5lIEdWRV9OSUNfVFNfU1lOQ19JTlRFUlZBTF9NUyAyNTBcbiAgMTI6XHRcbiAgMTM6XHQvKiBSZWFkIHRoZSBuaWMgdGltZXN0YW1wIGZyb20gaGFyZHdhcmUgdmlhIHRoZSBhZG1pbiBxdWV1ZS4gKi9cbiAgMTQ6XHRpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbiAgMTU6XHR7XG4gIDE2Olx0XHR1NjQgbmljX3JhdztcbiAgMTc6XHRcdGludCBlcnI7XG4gIDE4Olx0XG4gIDE5Olx0XHRlcnIgPSBndmVfYWRtaW5xX3JlcG9ydF9uaWNfdHMocHJpdiwgcHJpdi1cdTAwM2VuaWNfdHNfcmVwb3J0X2J1cyk7XG4gIDIwOlx0XHRpZiAoZXJyKVxuICAyMTpcdFx0XHRyZXR1cm4gZXJyO1xuICAyMjpcdFxuICAyMzpcdFx0bmljX3JhdyA9IGJlNjRfdG9fY3B1KHByaXYtXHUwMDNlbmljX3RzX3JlcG9ydC1cdTAwM2VuaWNfdGltZXN0YW1wKTtcbiAgMjQ6XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VsYXN0X3N5bmNfbmljX2NvdW50ZXIsIG5pY19yYXcpO1xuICAyNTpcdFxuICAyNjpcdFx0cmV0dXJuIDA7XG4gIDI3Olx0fVxuICAyODpcdFxuICAyOTpcdHN0YXRpYyBpbnQgZ3ZlX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4gIDMwOlx0e1xuICAzMTpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuICAzMjpcdH1cbiAgMzM6XHRcbiAgMzQ6XHRzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4gIDM1Olx0XHRcdFx0ICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuICAzNjpcdFx0XHRcdCAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuICAzNzpcdHtcbiAgMzg6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAgMzk6XHR9XG4gIDQwOlx0XG4gIDQxOlx0c3RhdGljIGludCBndmVfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4gIDQyOlx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gIDQzOlx0e1xuICA0NDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHRzdGF0aWMgbG9uZyBndmVfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbylcbiAgNDg6XHR7XG4gIDQ5Olx0XHRjb25zdCBzdHJ1Y3QgZ3ZlX3B0cCAqcHRwID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBndmVfcHRwLCBpbmZvKTtcbiAgNTA6XHRcdHN0cnVjdCBndmVfcHJpdiAqcHJpdiA9IHB0cC1cdTAwM2Vwcml2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBEZWNpc2lvbjogR1ZFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIEdWRSBkcml2ZXIsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIGZvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLCB3aGVyZSBzeXprYWxsZXIgaXMgcnVubmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSBQVFAgZnVuY3Rpb25zIGp1c3QgcmV0dXJuIGAtRU9QTk9UU1VQUGAsIHNvIHRoYXQgaXMgbm90IGdvaW5nIHRvIGJlIHdvcnRoIGZ1enppbmcsIHRoYXQgZG9lcyBub3RoaW5nLiBUaGUgcmVhbCBjaGFuZ2UgaXMgdGhpcyBzaW1wbGUgYWRkaXRpb24gdG8gYGd2ZV9yeF9kcW9gOgoKYGBgYwoJCWlmICghYnVmX2xlbikgewoJCQlndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7CgkJCXJldHVybiAwOwoJCX0KYGBgCgpUaGlzIGxvb2tzIGxpa2UgYSBzaW1wbGUgZml4LCBsaWtlbHkgZm9yIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHNpbWlsYXIgaXNzdWUgd2hlbiB0aGUgYnVmZmVyIGxlbmd0aCBpcyB6ZXJvLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkLiBHVkUgKmlzKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBhbmQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRyaWdnZXIgdGhpcyBjb2RlLCBmb3IgZXhhbXBsZSwgYnkgc2VuZGluZyBhbiBlbXB0eSBwYWNrZXQuIFNvLCBpdCAqaXMqIHJlYWNoYWJsZS4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIHNob3VsZCBJIGxpc3QgYFdvcnRoRnV6emluZz10cnVlYD8gSSBjYW4uIFRoZSBpbnN0cnVjdGlvbnMgc2F5IEkgc2hvdWxkIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIGBGb2N1c1N5bWJvbHNgLiBPa2F5LCBgZ3ZlX3J4X2Rxb2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIE5BUEkgcG9sbCBSWCBmdW5jdGlvbiBmb3IgRFFPIHF1ZXVlcywgc28gSSBjYW4gbm90IGxpc3QgdGhpcywgYXMgdGhhdCBpcyBub3QgdXNlZnVsLiBTbywgbXkgc2Vjb25kIHRob3VnaHQgaXMgdG8gbGlzdCBgZ3ZlX3B0cF9hZGpmaW5lYCB3aGljaCBpcyBhIFBUUCBjbG9jayBvcGVyYXRpb24uIFN5emthbGxlciBjYW4gY2FsbCBgY2xvY2tfYWRqdGltZWAgb24gdGhlIFBUUCBjbG9jayBkZXZpY2UsIHdoaWNoIHdvdWxkIGNhbGwgYGd2ZV9wdHBfYWRqZmluZWAuCgpTbyBpcyBpdCByZWFsbHkgd29ydGggZnV6emluZz8gSXQmIzM5O3MganVzdCBhIGNoZWNrIHRvIGZyZWUgYSBidWZmZXIgd2hlbiB0aGUgYnVmZmVyIGxlbmd0aCBpcyAwLiBCdXQgaXQgKmRvZXMqIGZpeCBhIGJ1ZyAtIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIGNyYXNoLCBhbmQgc3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgdGhpcyBieSBzZW5kaW5nIHplcm8tbGVuZ3RoIHBhY2tldHMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHdoZW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgKm11c3QqIGxpc3QgYEZvY3VzU3ltYm9sc2AuIFNvLCBpZiB0aGVyZSBhcmUgbm8gbm9uLWhvdC1wYXRoIGZ1bmN0aW9ucywgSSBjYW4ganVzdCBsZWF2ZSBGb2N1c1N5bWJvbHMgZW1wdHkgb3IgbGlzdCBgZ3ZlX3B0cF9hZGpmaW5lYC4gQnV0IGlzIHRoYXQgZXZlbiBoZWxwZnVsPyBUaGlzIGlzIHN1Y2ggYSBzaW1wbGUgcGF0Y2guLi4KCldhaXQsIGlzIGhlYWRlciBzcGxpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gR1ZFPyBUaGF0IHdvdWxkIGFmZmVjdCBob3cgbGlrZWx5IHRoaXMgaXMgdG8gYmUgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTI0Mj1zdHJ1Y3QgZ3ZlX3J4X3Jpbmcge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzEyLVx0dTY0IHJieXRlczsgLyogZnJlZS1ydW5uaW5nIGJ5dGVzIHJlY2VpdmVkICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjMxMzpcdHU2NCByeF9oc3BsaXRfYnl0ZXM7IC8qIGZyZWUtcnVubmluZyBoZWFkZXIgYnl0ZXMgcmVjZWl2ZWQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE0LVx0dTY0IHJwYWNrZXRzOyAvKiBmcmVlLXJ1bm5pbmcgcGFja2V0cyByZWNlaXZlZCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE3LVx0dTMyIG1hc2s7IC8qIG1hc2tzIHRoZSBjbnQgYW5kIGZpbGxfY250IHRvIHRoZSBzaXplIG9mIHRoZSByaW5nICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjMxODpcdHU2NCByeF9oc3BsaXRfcGt0OyAvKiBmcmVlLXJ1bm5pbmcgcGFja2V0cyB3aXRoIGhlYWRlcnMgc3BsaXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE5LVx0dTY0IHJ4X2NvcHlicmVha19wa3Q7IC8qIGZyZWUtcnVubmluZyBjb3VudCBvZiBjb3B5YnJlYWsgcGFja2V0cyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzI0LVx0LyogZnJlZS1ydW5uaW5nIGNvdW50IG9mIHVuc3BsaXQgcGFja2V0cyBkdWUgdG8gaGVhZGVyIGJ1ZmZlciBvdmVyZmxvdyBvciBoZHJfbGVuIGlzIDAgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MzI1Olx0dTY0IHJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzI2LVx0dTY0IHJ4X2NvbnRfcGFja2V0X2NudDsgLyogZnJlZS1ydW5uaW5nIG11bHRpLWZyYWdtZW50IHBhY2tldHMgcmVjZWl2ZWQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyNjU9aW50IGd2ZV9zZXRfcnhfYnVmX2xlbl9jb25maWcoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgcnhfYnVmX2xlbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyNjctXHRcdFx0ICAgICAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyNjg6aW50IGd2ZV9zZXRfaHNwbGl0X2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHU4IHRjcF9kYXRhX3NwbGl0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjY5LVx0XHRcdCAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTQyPXN0YXRpYyBjb25zdCBjaGFyIGd2ZV9nc3RyaW5nc19tYWluX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo0MzpcdFwmIzM0O3J4X3BhY2tldHNcJiMzNDssIFwmIzM0O3J4X2hzcGxpdF9wa3RcJiMzNDssIFwmIzM0O3R4X3BhY2tldHNcJiMzNDssIFwmIzM0O3J4X2J5dGVzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTQ0LVx0XCYjMzQ7dHhfYnl0ZXNcJiMzNDssIFwmIzM0O3J4X2Ryb3BwZWRcJiMzNDssIFwmIzM0O3R4X2Ryb3BwZWRcJiMzNDssIFwmIzM0O3R4X3RpbWVvdXRzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTQ1LVx0XCYjMzQ7cnhfc2tiX2FsbG9jX2ZhaWxcJiMzNDssIFwmIzM0O3J4X2J1Zl9hbGxvY19mYWlsXCYjMzQ7LCBcJiMzNDtyeF9kZXNjX2Vycl9kcm9wcGVkX3BrdFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo0NjpcdFwmIzM0O3J4X2hzcGxpdF91bnNwbGl0X3BrdFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy00Ny1cdFwmIzM0O2ludGVyZmFjZV91cF9jbnRcJiMzNDssIFwmIzM0O2ludGVyZmFjZV9kb3duX2NudFwmIzM0OywgXCYjMzQ7cmVzZXRfY250XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz01MT1zdGF0aWMgY29uc3QgY2hhciBndmVfZ3N0cmluZ3Nfcnhfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTUyLVx0XCYjMzQ7cnhfcG9zdGVkX2Rlc2NbJXVdXCYjMzQ7LCBcJiMzNDtyeF9jb21wbGV0ZWRfZGVzY1sldV1cJiMzNDssIFwmIzM0O3J4X2NvbnN1bWVkX2Rlc2NbJXVdXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjUzOlx0XCYjMzQ7cnhfYnl0ZXNbJXVdXCYjMzQ7LCBcJiMzNDtyeF9oc3BsaXRfYnl0ZXNbJXVdXCYjMzQ7LCBcJiMzNDtyeF9jb250X3BhY2tldF9jbnRbJXVdXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTU0LVx0XCYjMzQ7cnhfZnJhZ19mbGlwX2NudFsldV1cJiMzNDssIFwmIzM0O3J4X2ZyYWdfY29weV9jbnRbJXVdXCYjMzQ7LCBcJiMzNDtyeF9mcmFnX2FsbG9jX2NudFsldV1cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTE0OT1ndmVfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxNTI6XHR1NjQgdG1wX3J4X3BrdHMsIHRtcF9yeF9oc3BsaXRfcGt0LCB0bXBfcnhfYnl0ZXMsIHRtcF9yeF9oc3BsaXRfYnl0ZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUzLVx0XHR0bXBfcnhfc2tiX2FsbG9jX2ZhaWwsIHRtcF9yeF9idWZfYWxsb2NfZmFpbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxNTQ6XHRcdHRtcF9yeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCwgdG1wX3J4X2hzcGxpdF91bnNwbGl0X3BrdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0xNTUtXHRcdHRtcF90eF9wa3RzLCB0bXBfdHhfYnl0ZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTU2LVx0XHR0bXBfeGRwX3R4X2Vycm9ycywgdG1wX3hkcF9yZWRpcmVjdF9lcnJvcnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTU3Olx0dTY0IHJ4X2J1Zl9hbGxvY19mYWlsLCByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCwgcnhfaHNwbGl0X3Vuc3BsaXRfcGt0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjE1ODpcdFx0cnhfcGt0cywgcnhfaHNwbGl0X3BrdCwgcnhfc2tiX2FsbG9jX2ZhaWwsIHJ4X2J5dGVzLCB0eF9wa3RzLCB0eF9ieXRlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0xNTktXHRcdHR4X2Ryb3BwZWQsIHhkcF90eF9lcnJvcnMsIHhkcF9yZWRpcmVjdF9lcnJvcnM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxOTg6XHRmb3IgKHJ4X3BrdHMgPSAwLCByeF9ieXRlcyA9IDAsIHJ4X2hzcGxpdF9wa3QgPSAwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5OS1cdCAgICAgcnhfc2tiX2FsbG9jX2ZhaWwgPSAwLCByeF9idWZfYWxsb2NfZmFpbCA9IDAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjAwOlx0ICAgICByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCA9IDAsIHJ4X2hzcGxpdF91bnNwbGl0X3BrdCA9IDAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjAxLVx0ICAgICB4ZHBfdHhfZXJyb3JzID0gMCwgeGRwX3JlZGlyZWN0X2Vycm9ycyA9IDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIxMC1cdFx0XHRcdHRtcF9yeF9wa3RzID0gcngtXHUwMDNlcnBhY2tldHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjExOlx0XHRcdFx0dG1wX3J4X2hzcGxpdF9wa3QgPSByeC1cdTAwM2VyeF9oc3BsaXRfcGt0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIxMi1cdFx0XHRcdHRtcF9yeF9ieXRlcyA9IHJ4LVx1MDAzZXJieXRlcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjE2LVx0XHRcdFx0XHRyeC1cdTAwM2VyeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMTc6XHRcdFx0XHR0bXBfcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMTg6XHRcdFx0XHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTktXHRcdFx0XHR0bXBfeGRwX3R4X2Vycm9ycyA9IHJ4LVx1MDAzZXhkcF90eF9lcnJvcnM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIyNC1cdFx0XHRyeF9wa3RzICYjNDM7PSB0bXBfcnhfcGt0cztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMjU6XHRcdFx0cnhfaHNwbGl0X3BrdCAmIzQzOz0gdG1wX3J4X2hzcGxpdF9wa3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjI2LVx0XHRcdHJ4X2J5dGVzICYjNDM7PSB0bXBfcnhfYnl0ZXM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIyOS1cdFx0XHRyeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCAmIzQzOz0gdG1wX3J4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjIzMDpcdFx0XHRyeF9oc3BsaXRfdW5zcGxpdF9wa3QgJiM0Mzs9IHRtcF9yeF9oc3BsaXRfdW5zcGxpdF9wa3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjMxLVx0XHRcdHhkcF90eF9lcnJvcnMgJiM0Mzs9IHRtcF94ZHBfdHhfZXJyb3JzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yNTItXHRkYXRhW2kmIzQzOyYjNDM7XSA9IHJ4X3BrdHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjUzOlx0ZGF0YVtpJiM0MzsmIzQzO10gPSByeF9oc3BsaXRfcGt0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTI1NC1cdGRhdGFbaSYjNDM7JiM0MztdID0gdHhfcGt0cztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjY0LVx0ZGF0YVtpJiM0MzsmIzQzO10gPSByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyNjU6XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yNjYtXHRkYXRhW2kmIzQzOyYjNDM7XSA9IHByaXYtXHUwMDNlaW50ZXJmYWNlX3VwX2NudDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzMyLVx0XHRcdFx0dG1wX3J4X2J5dGVzID0gcngtXHUwMDNlcmJ5dGVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjMzMzpcdFx0XHRcdHRtcF9yeF9oc3BsaXRfYnl0ZXMgPSByeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzM0LVx0XHRcdFx0dG1wX3J4X3NrYl9hbGxvY19mYWlsID0gcngtXHUwMDNlcnhfc2tiX2FsbG9jX2ZhaWw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTM0My1cdFx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHRtcF9yeF9ieXRlcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzozNDQ6XHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSB0bXBfcnhfaHNwbGl0X2J5dGVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTM0NS1cdFx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IHJ4LVx1MDAzZXJ4X2NvbnRfcGFja2V0X2NudDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9NjA2PXN0YXRpYyBpbnQgZ3ZlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtNjIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjYyMzpcdGVyciA9IGd2ZV9zZXRfaHNwbGl0X2NvbmZpZyhwcml2LCBrZXJuZWxfY21kLVx1MDAzZXRjcF9kYXRhX3NwbGl0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTYyNC1cdFx0XHRcdCAgICBcdTAwMjZyeF9hbGxvY19jZmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMTExPWludCBndmVfc2V0X3J4X2J1Zl9sZW5fY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIHJ4X2J1Zl9sZW4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjE0MzppbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE0NC1cdFx0XHQgIHN0cnVjdCBndmVfcnhfYWxsb2NfcmluZ3NfY2ZnICpyeF9hbGxvY19jZmcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9ODE1PXN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODIxLVx0Y29uc3QgYm9vbCBlb3AgPSBjb21wbF9kZXNjLVx1MDAzZWVuZF9vZl9wYWNrZXQgIT0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgyMjpcdGNvbnN0IGJvb2wgaHNwbGl0ID0gY29tcGxfZGVzYy1cdTAwM2VzcGxpdF9oZWFkZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MjMtXHRzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04NjMtXHQvKiBDb3B5IHRoZSBoZWFkZXIgaW50byB0aGUgc2tiIGluIHRoZSBjYXNlIG9mIGhlYWRlciBzcGxpdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODY0Olx0aWYgKGhzcGxpdCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODY1LVx0XHRpbnQgdW5zcGxpdCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODg0LVx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4ODU6XHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF9wa3QmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODg2Olx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgJiM0Mzs9IHVuc3BsaXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4ODc6XHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF9ieXRlcyAmIzQzOz0gaGRyX2xlbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTg4OC1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cngtXHUwMDNlc3RhdHNzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBHVkUgRHJpdmVyIEhlYWRlciBTcGxpdCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgYnVnIHJlbGF0ZWQgdG8gaGVhZGVyIHNwbGl0IGluIHRoZSBHVkUgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGRlY2lkZSBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHdpdGggU3l6a2FsbGVyLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYGJ1Zl9sZW5gIGlzIHplcm8sIGFuZCBoZWFkZXIgc3BsaXQgaXMgZW5hYmxlZCwgYGd2ZV9yeF9kcW9gIGhhcyBhIHByb2JsZW0gd2hpY2ggaXMgZml4ZWQgYnkgYSByZWNlbnQgcGF0Y2guCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgR1ZFICppcyogcmVhY2hhYmxlIHNpbmNlIFN5emthbGxlciBydW5zIG9uIEdDRSwgd2hpY2ggdXNlcyB0aGUgR1ZFIGRyaXZlciBhcyBpdHMgbmV0d29yayBpbnRlcmZhY2UuIEFsc28sIFN5emthbGxlciAqY2FuKiBlbmFibGUgaGVhZGVyIHNwbGl0IHVzaW5nIGBldGh0b29sYCB0aHJvdWdoIGBndmVfc2V0X3JpbmdwYXJhbWAgLSZndDsgYGd2ZV9zZXRfaHNwbGl0X2NvbmZpZ2AuIFRoZW4sIFN5emthbGxlciBjYW4gZ2VuZXJhdGUgZW1wdHkgcGF5bG9hZCBwYWNrZXRzIChhIGxpa2VseSBzY2VuYXJpbywgZm9yIGluc3RhbmNlLCBhIFRDUCBBQ0spLiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBmYXVsdHkgYCFidWZfbGVuYCBjaGVjay4KClNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBkcml2ZXIhIFllcywgaXQmIzM5O3Mgd29ydGggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBUaGVyZSYjMzk7cyBgZ3ZlX3B0cF9hZGpmaW5lYCwgd2hpY2ggaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBndmVfcnhfZHFvYC4gSSAqdGhpbmsqIGBndmVfcHRwX2FkamZpbmVgIGp1c3QgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBOb3QgZXhhY3RseSBhIGhvdCBwYXRoLCBhbmQgcHJvYmFibHkgbm90IHRoYXQgZnJ1aXRmdWwgZm9yIGZ1enppbmcsIGJ1dCBpdCAqaXMqIGEgdmFsaWQgc3ltYm9sLiBJdCBsb29rcyBsaWtlIGl0IGlzIHRoZSBvbmx5IG90aGVyIGZ1bmN0aW9uIG1vZGlmaWVkLgoKRm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTtsbCBpbmNsdWRlIGBndmVfcHRwX2FkamZpbmVgLgoKQXMgZm9yIGBFbmFibGVDb25maWdzYCwgYENPTkZJR19HVkVgIGlzIHRoZSBHVkUgZHJpdmVyIGNvbmZpZy4gRXZlbiB0aG91Z2ggc3l6a2FsbGVyJiMzOTtzIEdDRSBjb25maWcgKnNob3VsZCogYWxyZWFkeSBoYXZlIGBDT05GSUdfR1ZFYCBlbmFibGVkLCBJIHNob3VsZCBsaXN0IGl0IGFueXdheSB0byBiZSBzYWZlIGFuZCBleHBsaWNpdC4KTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGVuYWJsZWQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0I1xuICAgMjpcdCMgR29vZ2xlIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDM6XHQjXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIE5FVF9WRU5ET1JfR09PR0xFXG4gICA2Olx0XHRib29sIFwmIzM0O0dvb2dsZSBEZXZpY2VzXCYjMzQ7XG4gICA3Olx0XHRkZWZhdWx0IHlcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDEyOlx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTM6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBHb29nbGUgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxuICAxNDpcdFx0ICBmb3IgeW91ciBzcGVjaWZpYyBkZXZpY2UgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1ZFTkRPUl9HT09HTEVcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgR1ZFXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtHb29nbGUgVmlydHVhbCBOSUMgKGdWTklDKSBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIChQQ0lfTVNJIFx1MDAyNlx1MDAyNiAoWDg2IHx8IENQVV9MSVRUTEVfRU5ESUFOKSlcbiAgMjE6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMjI6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQylcJiMzNDtcbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMjc6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBndmUuXG4gIDI4Olx0XG4gIDI5Olx0ZW5kaWYgI05FVF9WRU5ET1JfR09PR0xFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjkzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE2NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEdWRSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCB3aGlsZSBzZWVtaW5nbHkgbWlub3IsIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IGV4cGxvaXRhYmxlIGNoYW5nZXMgd2l0aGluIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4KCkZpcnN0LCBJIGlkZW50aWZpZWQgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIEdDRSBhbmQgUUVNVSBhcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFNpbmNlIHN5emthbGxlciAqcHJpbWFyaWx5KiB0YXJnZXRzIEdDRSwgYW5kIEdWRSBpcyB0aGUgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgR0NFLCB0aGUgY29kZSBpcyBpbmRlZWQgcmVhY2hhYmxlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoYXQsIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZSBjbGVhciBleGNlcHRpb25zLgoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNlZToKCiogICBUaGUgYWRkaXRpb24gb2YgYGd2ZV9wdHBfYWRqZmluZWAgaW4gYGd2ZV9wdHAuY2AsIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBzZWVtcyBzaW1wbGUsIGJ1dCBpdCYjMzk7cyBub3cgYW4gZXhwb3NlZCBmdW5jdGlvbiBhbmQgY291bGQgYmUgYSBwb2ludCBvZiBhdHRhY2suCiogICBBIGNoZWNrIGZvciBgIWJ1Zl9sZW5gIGluIGBndmVfcnhfZHFvYCB3aXRoaW4gYGd2ZV9yeF9kcW8uY2AuIFRoaXMgaXMgYSBidWcgZml4IHRoYXQgcHJldmVudHMgcHJvY2Vzc2luZyBvZiBhIHplcm8tbGVuZ3RoIHBhY2tldCBidWZmZXIuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhlIGNoYW5nZXMgd2VyZSB0cml2aWFsIGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgd2FzIHNtYWxsLiBCdXQgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEkmIzM5O20gbm90IGxvb2tpbmcgYXQgKmltcGFjdCosIEkmIzM5O20gbG9va2luZyBmb3IgYSBtb2RpZmNhdGlvbiB0byBrZXJuZWwgbG9naWMgaW4gYSByZWFjaGFibGUgYXJlYS4KCkkgcmV2aWV3ZWQgdGhlIGV4Y2x1c2lvbnMgbGlzdC4gTm9uZSBvZiB0aGUgZXhjbHVzaW9ucyBhcHBseTogbm90IGRvY3VtZW50YXRpb24sIG5vIGNvbmZpZyBjaGFuZ2VzLCBubyBkZWNvcmF0aXZlIGNoYW5nZXMsIG5vdCBhIFBDSSBkcml2ZXIgcmVtb3ZlLCBpdCBpcyBjb3JlIGtlcm5lbCBsb2dpYy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmxhZyBpdCBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9sIHNob3VsZCBiZSBgZ3ZlX3B0cF9hZGpmaW5lYC4gV2hpbGUgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYC5hZGpmaW5lYCkgd2l0aGluIGBndmVfcHRwX2NhcHNgLCBtZWFuaW5nIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gSXQgYWN0cyBhcyBhbiBBUEkgZW50cnlwb2ludCBmb3IgdGhlIFBUUCBzdWJzeXN0ZW0uIGBndmVfcnhfZHFvYCBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uIHNvIEkmIzM5O20gc2tpcHBpbmcgaXQuCgpUaGUgY29uZmlndXJhdGlvbnMgSSYjMzk7dmUgY29uZmlybWVkIGFyZSBgTkVUX1ZFTkRPUl9HT09HTEVgIGFuZCBgR1ZFYC4gYEdWRWAgZGVwZW5kcyBvbiBgUENJX01TSWAgYW5kIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgYSBoZWxwZXIsIGFuZCBgUENJX01TSWAgaXMgc3RhbmRhcmQsIHNvIHRoZXNlIGFyZSBub3QgbmVlZGVkLgoKVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIFBUUCBjbG9jayBvcGVyYXRpb24sIGBndmVfcHRwX2FkamZpbmVgLCBhbmQgYSBjaGFuZ2UgaW4gUlggZmFzdCBwYXRoLCBgZ3ZlX3J4X2Rxb2AsIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIEdWRSBpcyBleHBsaWNpdGx5IHVzZWQgaW4gR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfcHRwX2FkamZpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfcHRwX2FkamZpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSW4gYGd2ZV9wdHAuY2AsIGl0IGFkZHMgYSBzdHViIGZvciBgYWRqZmluZWAgKGBndmVfcHRwX2FkamZpbmVgKSB3aGljaCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFBUUCBjb3JlIChgcHRwX2Nsb2NrX2FkanRpbWVgKSB3aGVuIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MTZjNDAyODZlNWUxMWNjYWU4NTJkZTdjZDExZWJiMjQwZTNlYTc3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMKaW5kZXggMDZiMWNmNGE1ZWZjYy4uMWQ2YzU5ZjRlYWQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMKQEAgLTI2LDYgJiM0MzsyNiwxMSBAQCBpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3ZlX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBndmVfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAogCQkJICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCkBAIC02MCw2ICYjNDM7NjUsNyBAQCBzdGF0aWMgbG9uZyBndmVfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbykKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZ3ZlX3B0cF9jYXBzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICYjMzQ7Z3ZlIGNsb2NrJiMzNDssCiYjNDM7CS5hZGpmaW5lCT0gZ3ZlX3B0cF9hZGpmaW5lLAogCS5nZXR0aW1leDY0CT0gZ3ZlX3B0cF9nZXR0aW1leDY0LAogCS5zZXR0aW1lNjQJPSBndmVfcHRwX3NldHRpbWU2NCwKIAkuZG9fYXV4X3dvcmsJPSBndmVfcHRwX2RvX2F1eF93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYwppbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYwpAQCAtODg2LDYgJiM0Mzs4ODYsMTEgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwKIAkJcngtJmd0O3J4X2hzcGxpdF91bnNwbGl0X3BrdCAmIzQzOz0gdW5zcGxpdDsKIAkJcngtJmd0O3J4X2hzcGxpdF9ieXRlcyAmIzQzOz0gaGRyX2xlbjsKIAkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeC0mZ3Q7c3RhdHNzKTsKJiM0MzsKJiM0MzsJCWlmICghYnVmX2xlbikgewomIzQzOwkJCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKCFyeC0mZ3Q7Y3R4LnNrYl9oZWFkICZhbXA7JmFtcDsgcngtJmd0O2Rxby5wYWdlX3Bvb2wgJmFtcDsmYW1wOwogCQkgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtJmd0O3BhZ2VfaW5mby5uZXRtZW0pKSB7CiAJCS8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlci4gSXQmIzM5O3MgdG91Y2hpbmcgYGd2ZV9wdHAuY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBUaGUgYGd2ZV9wdHAuY2AgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgYGd2ZV9wdHBfYWRqZmluZWAgZnVuY3Rpb24gdGhhdCBqdXN0IHJldHVybnMgYC1FT1BOT1RTVVBQYCBhbmQgcmVnaXN0ZXJpbmcgaXQuIE5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGp1c3QgYSBwbGFjZWhvbGRlciBvciBzdHViLCBpdCBzZWVtcy4KClRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gYGd2ZV9yeF9kcW8uY2AuIEkgc2VlIHRoZSBgZ3ZlX3J4X2Rxb2AgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIFRoZXJlJiMzOTtzIHRoaXMgbmV3IGNoZWNrIGFkZGVkOiBgaWYgKCFidWZfbGVuKWAuIEl0JiMzOTtzIGEgY29uZGl0aW9uYWwgYWZ0ZXIgc29tZSBzdGF0aXN0aWNzIHVwZGF0ZXMsIGFuZCwgaWYgYGJ1Zl9sZW5gIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IGZyZWVzIHRoZSBidWZmZXIgdXNpbmcgYGd2ZV9mcmVlX2J1ZmZlcmAgYW5kIHJldHVybnMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBoYXMgdG8gYmUgZml4aW5nIGEgYnVnLiBBIHplcm8gYGJ1Zl9sZW5gIGxpa2VseSBpbmRpY2F0ZXMgc29tZXRoaW5nIHdlbnQgd3JvbmcgZWFybGllciBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcsIHBlcmhhcHMuIEl0JiMzOTtzIGEgY2xhc3NpYyBzY2VuYXJpbzogdGhlIGNvZGUgbWlnaHQgaGF2ZSBiZWVuIHByb2NlZWRpbmcgYXMgaWYgdGhlcmUgd2FzIGEgdmFsaWQgZGF0YSBidWZmZXIgd2hlbiB0aGVyZSB3YXMgbm9uZS4gVGhpcyBjb3VsZCBtYW5pZmVzdCBpbiB2YXJpb3VzIHdheXMgZG93biB0aGUgbGluZTogY3JlYXRpbmcgYW4gZW1wdHkgU0tCIGZyYWdtZW50LCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBkYW5nZXJvdXMgb3V0LW9mLWJvdW5kcyByZWFkLCBvciB3cml0ZS4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqb3IgZXhwb3NlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IElmIGBidWZfbGVuYCBpcyAwLCBpdCBtZWFucyB0aGUgYnVmZmVyIGNvbnRlbnQgaXMgbm90IHZhbGlkLCBhbmQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucyBvbiBpdCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV2ZW4gdHJpZ2dlciBhIGNyYXNoIG9yIGNvcnJ1cHRpb24uIEJlZm9yZSwgaXQgd2FzIHBvdGVudGlhbGx5IHBhc3NpbmcgYSBidWZmZXIgb2YgbGVuZ3RoIHplcm8gdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGlzIHBhdGNoIHdvdWxkIGhhdmUgcHJldmVudGVkIGl0IG5vdy4KCkkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGlzIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGd2ZV9yeF9kcW8uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4ODYsIHRvIHVuZGVyc3RhbmQgKndoeSogYGJ1Zl9sZW5gIG1pZ2h0IGJlIHplcm8gaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCBjb3VsZCBoYXZlIGJlZW4gaGFwcGVuaW5nIHdpdGggdGhhdCB6ZXJvLWxlbmd0aCBidWZmZXIgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHJvb3QgY2F1c2UgaXMgY3J1Y2lhbCB0byBlbnN1cmluZyB0aGlzIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLiBJdCBmZWVscyBsaWtlIGEgZ29vZCBjYXRjaCwgcG90ZW50aWFsbHkgcHJldmVudGluZyBhIGNsYXNzIG9mIGJ1ZmZlci1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX3J4X2RxbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTc5Mz1zdGF0aWMgdm9pZCBndmVfZG1hX3N5bmMoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTgxNC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgxNTpzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODE2LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZ3ZlX3J4X2NvbXBsX2Rlc2NfZHFvICpjb21wbF9kZXNjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwODA9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExMTk6XHRcdGVyciA9IGd2ZV9yeF9kcW8obmFwaSwgcngsIGNvbXBsX2Rlc2MsIGNvbXBscS1cdTAwM2VoZWFkLCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTIwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBndmVfcnhfZHFvLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBndmVfcnhfZHFvLmNgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgODg2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBsaWtlbHkgaG91c2VzIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgZ2l2ZW4gbXkgY3VycmVudCBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGFueSByZWxhdGVkIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGxhc3QgdGltZSBJIGxvb2tlZCBpbnRvIHRoaXMgbW9kdWxlIC0gd2hlcmUgZGlkIEkgbGVhdmUgb2ZmPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYmVmb3JlIGRpdmluZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0aWYgKGJ1Zl9zdGF0ZS1cdTAwM2V4c2tfYnVmZilcbiA4NTE6XHRcdFx0cmV0dXJuIGd2ZV9yeF94c2tfZHFvKG5hcGksIHJ4LCBjb21wbF9kZXNjLCBidWZfc3RhdGUsIHhwcm9nKTtcbiA4NTI6XHRcbiA4NTM6XHRcdC8qIFBhZ2UgbWlnaHQgaGF2ZSBub3QgYmVlbiB1c2VkIGZvciBhd2hpbGUgYW5kIHdhcyBsaWtlbHkgbGFzdCB3cml0dGVuXG4gODU0Olx0XHQgKiBieSBhIGRpZmZlcmVudCB0aHJlYWQuXG4gODU1Olx0XHQgKi9cbiA4NTY6XHRcdGlmIChyeC1cdTAwM2VkcW8ucGFnZV9wb29sKSB7XG4gODU3Olx0XHRcdGlmICghbmV0bWVtX2lzX25ldF9pb3YoYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKVxuIDg1ODpcdFx0XHRcdHByZWZldGNoKG5ldG1lbV90b19wYWdlKGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ubmV0bWVtKSk7XG4gODU5Olx0XHR9IGVsc2Uge1xuIDg2MDpcdFx0XHRwcmVmZXRjaChidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZ2UpO1xuIDg2MTpcdFx0fVxuIDg2MjpcdFxuIDg2MzpcdFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cbiA4NjQ6XHRcdGlmIChoc3BsaXQpIHtcbiA4NjU6XHRcdFx0aW50IHVuc3BsaXQgPSAwO1xuIDg2NjpcdFxuIDg2NzpcdFx0XHRpZiAoaGRyX2xlbiBcdTAwMjZcdTAwMjYgIWhibykge1xuIDg2ODpcdFx0XHRcdHNpemVfdCBvZmZzZXQgPVxuIDg2OTpcdFx0XHRcdFx0KHNpemVfdClidWZmZXJfaWQgKiBwcml2LVx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcbiA4NzA6XHRcbiA4NzE6XHRcdFx0XHRyeC1cdTAwM2VjdHguc2tiX2hlYWQgPVxuIDg3MjpcdFx0XHRcdFx0Z3ZlX3J4X2NvcHlfZGF0YShwcml2LVx1MDAzZWRldiwgbmFwaSxcbiA4NzM6XHRcdFx0XHRcdFx0XHQgcngtXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgJiM0Mzsgb2Zmc2V0LFxuIDg3NDpcdFx0XHRcdFx0XHRcdCBoZHJfbGVuKTtcbiA4NzU6XHRcdFx0XHRpZiAodW5saWtlbHkoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZCkpXG4gODc2Olx0XHRcdFx0XHRnb3RvIGVycm9yO1xuIDg3NzpcdFx0XHRcdHJ4LVx1MDAzZWN0eC5za2JfdGFpbCA9IHJ4LVx1MDAzZWN0eC5za2JfaGVhZDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdFx0XHRpZiAocngtXHUwMDNlZHFvLnBhZ2VfcG9vbClcbiA4ODA6XHRcdFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHJ4LVx1MDAzZWN0eC5za2JfaGVhZCk7XG4gODgxOlx0XHRcdH0gZWxzZSB7XG4gODgyOlx0XHRcdFx0dW5zcGxpdCA9IDE7XG4gODgzOlx0XHRcdH1cbiA4ODQ6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDg4NTpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfcGt0JiM0MzsmIzQzOztcbiA4ODY6XHRcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICYjNDM7PSB1bnNwbGl0O1xuIDg4NzpcdFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfYnl0ZXMgJiM0Mzs9IGhkcl9sZW47XG4gODg4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4gODg5Olx0XG4gODkwOlx0XHRcdGlmICghYnVmX2xlbikge1xuIDg5MTpcdFx0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiA4OTI6XHRcdFx0XHRyZXR1cm4gMDtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0fSBlbHNlIGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkIFx1MDAyNlx1MDAyNiByeC1cdTAwM2VkcW8ucGFnZV9wb29sIFx1MDAyNlx1MDAyNlxuIDg5NTpcdFx0XHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcbiA4OTY6XHRcdFx0Lyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0XG4gODk3Olx0XHRcdCAqIGJ1ZmZlci4gSWYgdGhlIHBhY2tldCBidWZmZXIgaXMgYSBuZXRfaW92LCB0aG9zZSBjYW4mIzM5O3QgYmVcbiA4OTg6XHRcdFx0ICogZWFzaWx5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgc3BhY2UgdG8gYWNjZXNzIHRoZSBoZWFkZXJcbiA4OTk6XHRcdFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxuIDkwMDpcdFx0XHQgKi9cbiA5MDE6XHRcdFx0Z290byBlcnJvcjtcbiA5MDI6XHRcdH1cbiA5MDM6XHRcbiA5MDQ6XHRcdC8qIFN5bmMgdGhlIHBvcnRpb24gb2YgZG1hIGJ1ZmZlciBmb3IgQ1BVIHRvIHJlYWQuICovXG4gOTA1Olx0XHRndmVfZG1hX3N5bmMocHJpdiwgcngsIGJ1Zl9zdGF0ZSwgYnVmX2xlbik7XG4gOTA2Olx0XG4gOTA3Olx0XHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cbiA5MDg6XHRcdGlmIChyeC1cdTAwM2VjdHguc2tiX2hlYWQpIHtcbiA5MDk6XHRcdFx0aWYgKHVubGlrZWx5KGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCxcbiA5MTA6XHRcdFx0XHRcdFx0XHQgcHJpdikpICE9IDApIHtcbiA5MTE6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDkxMjpcdFx0XHR9XG4gOTEzOlx0XHRcdHJldHVybiAwO1xuIDkxNDpcdFx0fVxuIDkxNTpcdFxuIDkxNjpcdFx0aWYgKHhwcm9nKSB7XG4gOTE3Olx0XHRcdHN0cnVjdCBndmVfeGRwX2J1ZmYgZ3ZlX3hkcDtcbiA5MTg6XHRcdFx0dm9pZCAqb2xkX2RhdGE7XG4gOTE5Olx0XHRcdGludCB4ZHBfYWN0O1xuIDkyMDpcdFxuIDkyMTpcdFx0XHR4ZHBfaW5pdF9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLCBidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplLFxuIDkyMjpcdFx0XHRcdCAgICAgIFx1MDAyNnJ4LVx1MDAzZXhkcF9yeHEpO1xuIDkyMzpcdFx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLFxuIDkyNDpcdFx0XHRcdFx0IGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFnZV9hZGRyZXNzICYjNDM7XG4gOTI1Olx0XHRcdFx0XHQgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCxcbiA5MjY6XHRcdFx0XHRcdCBidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZCxcbiA5Mjc6XHRcdFx0XHRcdCBidWZfbGVuLCBmYWxzZSk7XG4gOTI4Olx0XHRcdGd2ZV94ZHAuZ3ZlID0gcHJpdjtcbiA5Mjk6XHRcdFx0Z3ZlX3hkcC5jb21wbF9kZXNjID0gY29tcGxfZGVzYztcbiA5MzA6XHRcbiA5MzE6XHRcdFx0b2xkX2RhdGEgPSBndmVfeGRwLnhkcC5kYXRhO1xuIDkzMjpcdFx0XHR4ZHBfYWN0ID0gYnBmX3Byb2dfcnVuX3hkcCh4cHJvZywgXHUwMDI2Z3ZlX3hkcC54ZHApO1xuIDkzMzpcdFx0XHRidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLnBhZCAmIzQzOz0gZ3ZlX3hkcC54ZHAuZGF0YSAtIG9sZF9kYXRhO1xuIDkzNDpcdFx0XHRidWZfbGVuID0gZ3ZlX3hkcC54ZHAuZGF0YV9lbmQgLSBndmVfeGRwLnhkcC5kYXRhO1xuIDkzNTpcdFx0XHRpZiAoeGRwX2FjdCAhPSBYRFBfUEFTUykge1xuIDkzNjpcdFx0XHRcdGd2ZV94ZHBfZG9uZV9kcW8ocHJpdiwgcngsIFx1MDAyNmd2ZV94ZHAueGRwLCB4cHJvZywgeGRwX2FjdCxcbiA5Mzc6XHRcdFx0XHRcdFx0IGJ1Zl9zdGF0ZSk7XG4gOTM4Olx0XHRcdFx0cmV0dXJuIDA7XG4gOTM5Olx0XHRcdH1cbiA5NDA6XHRcbiA5NDE6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDk0MjpcdFx0XHRyeC1cdTAwM2V4ZHBfYWN0aW9uc1tYRFBfUEFTU10mIzQzOyYjNDM7O1xuIDk0MzpcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuIDk0NDpcdFx0fVxuIDk0NTpcdFxuIDk0NjpcdFx0aWYgKGVvcCBcdTAwMjZcdTAwMjYgYnVmX2xlbiBcdTAwM2M9IHByaXYtXHUwMDNlcnhfY29weWJyZWFrIFx1MDAyNlx1MDAyNlxuIDk0NzpcdFx0ICAgICEocngtXHUwMDNlZHFvLnBhZ2VfcG9vbCBcdTAwMjZcdTAwMjZcbiA5NDg6XHRcdCAgICAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ubmV0bWVtKSkpIHtcbiA5NDk6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl9oZWFkID0gZ3ZlX3J4X2NvcHkocHJpdi1cdTAwM2VkZXYsIG5hcGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDIKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGBndmVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUlggcGF0aC4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGhhbmRsaW5nIGEgYGJ1Zl9sZW5gIG9mIHplcm8sIHdoaWNoIHNlZW1zIHRvIGluZGljYXRlIGFuIGVtcHR5IGJ1ZmZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd2FzbiYjMzk7dCBncmFjZWZ1bGx5IGhhbmRsaW5nIHRoaXMgZWRnZSBjYXNlLgoKTG9va2luZyBhdCB0aGUgYWRkZWQgY29kZSwgdGhlIGNydWNpYWwgbGluZSBpcyBgaWYgKCFidWZfbGVuKSB7IGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsgcmV0dXJuIDA7IH1gLiAgVGhpcyBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBzaG9ydC1jaXJjdWl0LiBJZiBgYnVmX2xlbmAgaXMgemVybywgbWVhbmluZyB0aGUgYnVmZmVyIGlzIGVtcHR5LCB3ZSBmcmVlIGl0IGltbWVkaWF0ZWx5IGFuZCByZXR1cm4uIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlcmUmIzM5O3Mgbm8gZGF0YSB0byBwcm9jZXNzLCBzbyB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBhdGguCgpCZWZvcmUgdGhpcyBmaXgsIGhvd2V2ZXIsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQgZXZlbiB3aGVuIGBidWZfbGVuYCB3YXMgemVyby4gSXQgd291bGQgY2FsbCBgZ3ZlX2RtYV9zeW5jKHByaXYsIHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pYC4gIFRlY2huaWNhbGx5LCBzeW5jaW5nIHplcm8gYnl0ZXMgc2hvdWxkbiYjMzk7dCBiZSAqaGFybWZ1bCogcGVyIHNlLCBidXQgaXQmIzM5O3MgY2xlYXJseSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gSXQmIzM5O3MgYSB3YXN0ZSBvZiBjeWNsZXMsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoaWdoLXRocm91Z2hwdXQgbmV0d29yayB0cmFmZmljLiBUaGVuIHRoZSBjb2RlIHdvdWxkIG1vdmUgdG8gYGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCwgcHJpdilgLiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBTaW5jZSB0aGUgcHJldmlvdXMgY2FsbCBoYXBwZW5lZCB3aGVuIGBidWZfbGVuYCB3YXMgemVybywgSSYjMzk7bSBub3cgY3VyaW91czogd2hhdCBkb2VzIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCBhY3R1YWxseSAqZG8qIHdpdGggYSB6ZXJvLWxlbmd0aCBidWZmZXI/IEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGlmIHRoaXMgZnVuY3Rpb24gaGFzIHNvbWUgZ3JhY2VmdWwgaGFuZGxpbmcgZm9yIGFuIGVtcHR5IGJ1ZmZlciBvciBpZiBpdCB3b3VsZCBjYXVzZSBpc3N1ZXMgZG93bnN0cmVhbS4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgcGF0Y2gmIzM5O3MgaW1wcm92ZW1lbnQ6IGlzIHRoZSBwYXRjaCBqdXN0IGEgbWljcm8tb3B0aW1pemF0aW9uIG9yIGlzIGl0IGZpeGluZyBhIHN1YnRsZSBidWc/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9yeF9hcHBlbmRfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz01ODM9c3RhdGljIHZvaWQgZ3ZlX3NrYl9hZGRfcnhfZnJhZyhzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTYwNC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjYwNTpzdGF0aWMgaW50IGd2ZV9yeF9hcHBlbmRfZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjA2LVx0XHRcdCAgICAgICBzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz04MTU9c3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy05MDgtXHRpZiAocngtXHUwMDNlY3R4LnNrYl9oZWFkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5MDk6XHRcdGlmICh1bmxpa2VseShndmVfcnhfYXBwZW5kX2ZyYWdzKG5hcGksIGJ1Zl9zdGF0ZSwgYnVmX2xlbiwgcngsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy05MTAtXHRcdFx0XHRcdFx0IHByaXYpKSAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgOgoKKipEaXNzZWN0aW5nIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBndmVfcnhfYXBwZW5kX2ZyYWdzYC4gQmFzZWQgb24gdGhlIG5hbWUgYWxvbmUsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHJlY2VpdmluZyBkYXRhIGZyYWdtZW50cyBpbiB0aGUgY29udGV4dCBvZiB0aGUgR1ZFIGRyaXZlci4gUHJvYmFibHkgaGFuZGxpbmcgcmVhc3NlbWJseSBvciBidWZmZXIgbWFuYWdlbWVudCBvZiBzb21lIGtpbmQuIEdpdmVuIGl0JiMzOTtzIGFwcGVuZGluZyBmcmFnbWVudHMsIG15IGluaXRpYWwgZ3Vlc3MgaXMgaXQmIzM5O3Mgb3BlcmF0aW5nIGF0IHRoZSBib3R0b20gb2YgdGhlIHJlY2VpdmUgcGF0aCwgYWZ0ZXIgc29tZSBpbml0aWFsIHBhY2tldCBwcm9jZXNzaW5nLCBwZXJoYXBzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byBiZSBjZXJ0YWluLCB0aG91Z2guIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0byBncmFzcCB0aGUgbWVtb3J5IG1vZGVsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyB3YW50IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIHRvIGFzc2VzcyBwb3RlbnRpYWwgaXNzdWVzIGFuZCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgcGFydGljdWxhcmx5IGlmIGl0IGludGVyZmFjZXMgd2l0aCBETUEgb3IgaXMgdXNpbmcgc2hhcmVkIG1lbW9yeSBidWZmZXJzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNTpcdHN0YXRpYyBpbnQgZ3ZlX3J4X2FwcGVuZF9mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gNjA2Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBndmVfcnhfYnVmX3N0YXRlX2RxbyAqYnVmX3N0YXRlLFxuIDYwNzpcdFx0XHRcdCAgICAgICB1MTYgYnVmX2xlbiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiA2MDg6XHRcdFx0XHQgICAgICAgc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuIDYwOTpcdHtcbiA2MTA6XHRcdGludCBudW1fZnJhZ3MgPSBza2Jfc2hpbmZvKHJ4LVx1MDAzZWN0eC5za2JfdGFpbCktXHUwMDNlbnJfZnJhZ3M7XG4gNjExOlx0XG4gNjEyOlx0XHRpZiAodW5saWtlbHkobnVtX2ZyYWdzID09IE1BWF9TS0JfRlJBR1MpKSB7XG4gNjEzOlx0XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNjE0Olx0XG4gNjE1Olx0XHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIDApO1xuIDYxNjpcdFx0XHRpZiAoIXNrYilcbiA2MTc6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNjE4Olx0XG4gNjE5Olx0XHRcdGlmIChyeC1cdTAwM2VkcW8ucGFnZV9wb29sKVxuIDYyMDpcdFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG4gNjIxOlx0XG4gNjIyOlx0XHRcdGlmIChyeC1cdTAwM2VjdHguc2tiX3RhaWwgPT0gcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuIDYyMzpcdFx0XHRcdHNrYl9zaGluZm8ocngtXHUwMDNlY3R4LnNrYl9oZWFkKS1cdTAwM2VmcmFnX2xpc3QgPSBza2I7XG4gNjI0Olx0XHRcdGVsc2VcbiA2MjU6XHRcdFx0XHRyeC1cdTAwM2VjdHguc2tiX3RhaWwtXHUwMDNlbmV4dCA9IHNrYjtcbiA2MjY6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl90YWlsID0gc2tiO1xuIDYyNzpcdFx0XHRudW1fZnJhZ3MgPSAwO1xuIDYyODpcdFx0fVxuIDYyOTpcdFx0aWYgKHJ4LVx1MDAzZWN0eC5za2JfdGFpbCAhPSByeC1cdTAwM2VjdHguc2tiX2hlYWQpIHtcbiA2MzA6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl9oZWFkLVx1MDAzZWxlbiAmIzQzOz0gYnVmX2xlbjtcbiA2MzE6XHRcdFx0cngtXHUwMDNlY3R4LnNrYl9oZWFkLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBidWZfbGVuO1xuIDYzMjpcdFx0XHRyeC1cdTAwM2VjdHguc2tiX2hlYWQtXHUwMDNldHJ1ZXNpemUgJiM0Mzs9IGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8uYnVmX3NpemU7XG4gNjMzOlx0XHR9XG4gNjM0Olx0XG4gNjM1Olx0XHQvKiBUcmlnZ2VyIG9uZGVtYW5kIHBhZ2UgYWxsb2NhdGlvbiBpZiB3ZSBhcmUgcnVubmluZyBsb3cgb24gYnVmZmVycyAqL1xuIDYzNjpcdFx0aWYgKGd2ZV9yeF9zaG91bGRfdHJpZ2dlcl9jb3B5X29uZGVtYW5kKHJ4KSlcbiA2Mzc6XHRcdFx0cmV0dXJuIGd2ZV9yeF9jb3B5X29uZGVtYW5kKHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xuIDYzODpcdFxuIDYzOTpcdFx0Z3ZlX3NrYl9hZGRfcnhfZnJhZyhyeCwgYnVmX3N0YXRlLCBudW1fZnJhZ3MsIGJ1Zl9sZW4pO1xuIDY0MDpcdFx0Z3ZlX3JldXNlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiA2NDE6XHRcdHJldHVybiAwO1xuIDY0MjpcdH1cbiA2NDM6XHRcbiA2NDQ6XHRzdGF0aWMgaW50IGd2ZV94ZHBfdHhfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiA2NDU6XHRcdFx0XHQgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIDY0NjpcdHtcbiA2NDc6XHRcdHN0cnVjdCBndmVfdHhfcmluZyAqdHg7XG4gNjQ4Olx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xuIDY0OTpcdFx0dTMyIHR4X3FpZDtcbiA2NTA6XHRcdGludCBlcnI7XG4gNjUxOlx0XG4gNjUyOlx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuIDY1MzpcdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xuIDY1NDpcdFx0XHRpZiAocngtXHUwMDNleHNrX3Bvb2wpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBaZXJvLUxlbmd0aCBGcmFnbWVudCBTY2VuYXJpbyBpbiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2FzZSB3aGVyZSBgYnVmX2xlbmAgaXMgemVybyB3aXRoaW4gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW1wbGljYXRpb24gb2YgYWRkaW5nIGEgemVyby1sZW5ndGggZnJhZ21lbnQuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYWRkIGEgemVyby1sZW5ndGggZnJhZ21lbnQgd2hlbiBgYnVmX2xlbmAgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvci4KCk9rYXksIGxldCBtZSBjbGFyaWZ5OiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AgKmRvZXMqIGNhbGwgYGd2ZV9za2JfYWRkX3J4X2ZyYWcocngsIGJ1Zl9zdGF0ZSwgbnVtX2ZyYWdzLCAwKWAgaWYgYGJ1Zl9sZW5gIGlzIHplcm8uIFRoZSBrZXkgaXMgaW4gdW5kZXJzdGFuZGluZyBob3cgYGd2ZV9za2JfYWRkX3J4X2ZyYWdgIGhhbmRsZXMgdGhhdCB6ZXJvIGxlbmd0aC4gSSYjMzk7dmUgZ290IHRvIHRyYWNlIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGl0IGdldHMgYSB6ZXJvIGxlbmd0aCB2YWx1ZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODM6XHRzdGF0aWMgdm9pZCBndmVfc2tiX2FkZF9yeF9mcmFnKHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4gNTg0Olx0XHRcdFx0XHRzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZSxcbiA1ODU6XHRcdFx0XHRcdGludCBudW1fZnJhZ3MsIHUxNiBidWZfbGVuKVxuIDU4NjpcdHtcbiA1ODc6XHRcdGlmIChyeC1cdTAwM2VkcW8ucGFnZV9wb29sKSB7XG4gNTg4Olx0XHRcdHNrYl9hZGRfcnhfZnJhZ19uZXRtZW0ocngtXHUwMDNlY3R4LnNrYl90YWlsLCBudW1fZnJhZ3MsXG4gNTg5Olx0XHRcdFx0XHQgICAgICAgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5uZXRtZW0sXG4gNTkwOlx0XHRcdFx0XHQgICAgICAgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCAmIzQzO1xuIDU5MTpcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFkLCBidWZfbGVuLFxuIDU5MjpcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8uYnVmX3NpemUpO1xuIDU5MzpcdFx0fSBlbHNlIHtcbiA1OTQ6XHRcdFx0c2tiX2FkZF9yeF9mcmFnKHJ4LVx1MDAzZWN0eC5za2JfdGFpbCwgbnVtX2ZyYWdzLFxuIDU5NTpcdFx0XHRcdFx0YnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlLFxuIDU5NjpcdFx0XHRcdFx0YnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCAmIzQzO1xuIDU5NzpcdFx0XHRcdFx0YnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWQsIGJ1Zl9sZW4sXG4gNTk4Olx0XHRcdFx0XHRidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplKTtcbiA1OTk6XHRcdH1cbiA2MDA6XHR9XG4gNjAxOlx0XG4gNjAyOlx0LyogQ2hhaW5zIG11bHRpIHNrYnMgZm9yIHNpbmdsZSByeCBwYWNrZXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIHdpdGggWmVyby1MZW5ndGggQnVmZmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgaXQgaGFuZGxlcyBgYnVmX2xlbiA9IDBgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgemVyby1sZW5ndGggZnJhZ21lbnQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgc2luY2Ugbm8gZGF0YSBpcyBjb3BpZWQsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gSG93ZXZlciwgaWYgYGJ1Zl9sZW5gIGlzIHplcm8gYnV0IHNvbWVob3cgY29udHJpYnV0ZXMgdG8gdGhlIGNhbGN1bGF0aW9uIG9mIGB0cnVlc2l6ZWAgbGF0ZXIsIHRoYXQgd291bGQgYmUgYW4gaW50ZXJlc3RpbmcgdGhpbmcgdG8gaW52ZXN0aWdhdGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uLgoKVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBhIHplcm8tbGVuZ3RoIGZyYWdtZW50ICpjb3VsZCogd3JlYWsgaGF2b2Mgb24gdGhlIG5ldHdvcmsgc3RhY2sgaW4gYSBtb3JlIGdlbmVyYWwgc2Vuc2UsIGxlYWRpbmcgdG8gZGl2aXNpb24gYnkgemVybyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgcmVhZHMsIG9yIG90aGVyIGlzc3VlcyBpZiB0aGUgY29kZSBhc3N1bWVzIGFsbCBmcmFnbWVudHMgaGF2ZSBhIGxlbmd0aCBncmVhdGVyIHRoYW4gemVyby4gTm90IG5lY2Vzc2FyaWx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBidXQgYSBidWcgbm9uZXRoZWxlc3MuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBjbG9zZWx5IGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgaWYgYGhzcGxpdGAgaXMgdHJ1ZSwgYW5kIGBidWZfbGVuYCBpcyB6ZXJvLCBgZ3ZlX2ZyZWVfYnVmZmVyYCBpcyBjYWxsZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucy4gIElmIGBoc3BsaXRgIGlzIHNldCwgaXQgbWVhbnMgYSBoZWFkZXIgc3BsaXQgaGFzIG9jY3VycmVkLCBhbmQgdGhlIGhlYWRlciBoYXMgYmVlbiBjb3BpZWQgaW50byBgcngtJmd0O2N0eC5za2JfaGVhZGAuIFRoZSBmYWN0IHRoYXQgd2UgcmV0dXJuIDAgZWFybHkgaWYgYGJ1Zl9sZW5gIGlzIHplcm8gbWVhbnMgdGhlcmUgaXMgbm8gZGF0YSBwYXlsb2FkIGluIHRoaXMgYnVmZmVyLiBJZiB3ZSAqZGlkbiYjMzk7dCogcmV0dXJuLCB0aGUgY29kZSB3b3VsZCBzeW5jIHRoZSBETUEgYnVmZmVyLCBhbmQgdGhlbiwgaWYgYHJ4LSZndDtjdHguc2tiX2hlYWRgIGV4aXN0cywgYXBwZW5kIGEgemVyby1sZW5ndGggZnJhZ21lbnQuIEhtbSwgd2hhdCBpZiBgaGRyX2xlbiAmYW1wOyZhbXA7ICFoYm9gIGlzIGZhbHNlPyAgVGhlbiBgcngtJmd0O2N0eC5za2JfaGVhZGAgKm1pZ2h0KiBiZSBOVUxMIGFuZCB0aGUgYGlmIChyeC0mZ3Q7Y3R4LnNrYl9oZWFkKWAgd291bGQgYmUgc2tpcHBlZC4KCklmIHdlICpza2lwKiB0aGUgYXBwZW5kaW5nLCBpdCB3b3VsZCB0aGVuIGp1bXAgdG8gdGhlIHhkcCBjb2RlLiBUaGUgY29uY2VybiBpczogaWYgYGJ1Zl9sZW5gIGlzIDAsIHRoZW4gdGhlIGB4ZHBfcHJlcGFyZV9idWZmYCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBgYnVmX2xlbiA9IDBgLiAgVGhpcyBtZWFucyB0aGUgQlBGIHByb2dyYW0gbWlnaHQgdGhlbiBydW4gb24gYSB6ZXJvLWxlbmd0aCBidWZmZXIhIFRoYXQgc291bmRzIHJpc2t5LCBhcyB0aGUgQlBGIGNvZGUgbWlnaHQgYXNzdW1lIGEgbWluaW11bSBwYWNrZXQgbGVuZ3RoLCBsaWtlIGZvciB0aGUgRXRoZXJuZXQgaGVhZGVyLCB3aGljaCB3b3VsZCB0cmlnZ2VyIG91dC1vZi1ib3VuZHMgcmVhZHMuIEtBU0FOICpzaG91bGQqIGNhdGNoIHRoaXMsIGJ1dCB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byB2ZXJpZnkuCgpUaGVyZSYjMzk7cyBhbHNvIHRoZSBgZW9wYCBjYXNlLCBhbmQgaWYgYGJ1Zl9sZW5gIGlzIDAsIHRoZSBgZ3ZlX3J4X2NvcHlgIGlzIGNhbGxlZCB3aXRoIGBidWZfbGVuID0gMGAuIFRoaXMgYWxsb2NhdGVzIGFuIHNrYiBhbmQgY29waWVzIDAgYnl0ZXMsIHRoZW4gcmV0dXJucy4gQWdhaW4sIG5vIG1lbW9yeSBpc3N1ZS4KCk5vdywgd2FpdC4uLiBldmVuIGlmIGBidWZfbGVuYCBpcyAwLCBpcyB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQ/ICBBZ2Fpbiwgbm8gYnl0ZXMgYXJlIGNvcGllZCwgc28gbm8gcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuCgpGaW5hbGx5LCBJIG5vdGljZSB0aGUgaW5jbHVzaW9uIG9mIGBndmVfcHRwX2FkamZpbmVgLiBUaGlzIHNlZW1zIHRvIGJlIGEgbWlzc2luZyBmdW5jdGlvbiBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIHVuY29uZGl0aW9uYWwgY2FsbCB0byBpdCBhbmQgaXQmIzM5O3MgbnVsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqZmluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfY2xvY2suYz0xMjI9c3RhdGljIGludCBwdHBfY2xvY2tfYWRqdGltZShzdHJ1Y3QgcG9zaXhfY2xvY2sgKnBjLCBzdHJ1Y3QgX19rZXJuZWxfdGltZXggKnR4KVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2NC1cdFx0XHRyZXR1cm4gLUVSQU5HRTtcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjE2NTpcdFx0ZXJyID0gb3BzLVx1MDAzZWFkamZpbmUob3BzLCB0eC1cdTAwM2VmcmVxKTtcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2Ni1cdFx0aWYgKCFlcnIpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MzY9bW9kdWxlX3BhcmFtKGZpcm13YXJlLCBjaGFycCwgMCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtNDAtXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzo0MTpzdGF0aWMgaW50IF9pZHRjbV9hZGpmaW5lKHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLCBsb25nIHNjYWxlZF9wcG0pO1xuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtNDItXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTUwNz1zdGF0aWMgaW50IGlkdGNtX3N0b3BfcGhhc2VfcHVsbF9pbihzdHJ1Y3QgaWR0Y21fY2hhbm5lbCAqY2hhbm5lbClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xNTEwLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MTUxMTpcdGVyciA9IF9pZHRjbV9hZGpmaW5lKGNoYW5uZWwsIGNoYW5uZWwtXHUwMDNlY3VycmVudF9mcmVxX3NjYWxlZF9wcG0pO1xuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTUxMi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTU1Mz1zdGF0aWMgaW50IGRvX3BoYXNlX3B1bGxfaW5fc3coc3RydWN0IGlkdGNtX2NoYW5uZWwgKmNoYW5uZWwsXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4MS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE1ODI6XHRlcnIgPSBfaWR0Y21fYWRqZmluZShjaGFubmVsLCBkZWx0YV9wcG0pO1xuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4My1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYz0xNzAxPXN0YXRpYyBpbnQgX2lkdGNtX2FkanBoYXNlKHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLCBzMzIgZGVsdGFfbnMpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTcyNy1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE3Mjg6c3RhdGljIGludCBfaWR0Y21fYWRqZmluZShzdHJ1Y3QgaWR0Y21fY2hhbm5lbCAqY2hhbm5lbCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTcyOS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTc0OS1cdCAqXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxNzUwOlx0ICogYWRqZmluZTpcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE3NTEtXHQgKiAgICAgICBwcG1fMTYgKiA1XjEyXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTg3Nz1zdGF0aWMgaW50IGlkdGNtX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzMzIgZGVsdGEpXG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTg5My1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE4OTQ6c3RhdGljIGludCBpZHRjbV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCAgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTg5NS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTkwNi1cdG11dGV4X2xvY2soaWR0Y20tXHUwMDNlbG9jayk7XG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxOTA3Olx0ZXJyID0gX2lkdGNtX2FkamZpbmUoY2hhbm5lbCwgc2NhbGVkX3BwbSk7XG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xOTA4LVx0bXV0ZXhfdW5sb2NrKGlkdGNtLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTIwMzYtXHQuZ2V0bWF4cGhhc2VcdD0gXHUwMDI2aWR0Y21fZ2V0bWF4cGhhc2UsXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoyMDM3Olx0LmFkamZpbmVcdD0gXHUwMDI2aWR0Y21fYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTIwMzgtXHQuYWRqdGltZVx0PSBcdTAwMjZpZHRjbV9hZGp0aW1lLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzX2RlcHJlY2F0ZWQgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMjA1NC1cdC5nZXRtYXhwaGFzZSAgICA9IFx1MDAyNmlkdGNtX2dldG1heHBoYXNlLFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MjA1NTpcdC5hZGpmaW5lXHQ9IFx1MDAyNmlkdGNtX2FkamZpbmUsXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDU2LVx0LmFkanRpbWVcdD0gXHUwMDI2aWR0Y21fYWRqdGltZV9kZXByZWNhdGVkLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9kZmxfdG9kLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZGZsX3RvZF9jbG9ja19vcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYy0yNzMtXHQubWF4X2FkaiA9IFRPRF9NQVhfQURKLFxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYzoyNzQ6XHQuYWRqZmluZSA9IGRmbF90b2RfYWRqdXN0X2ZpbmUsXG5kcml2ZXJzL3B0cC9wdHBfZGZsX3RvZC5jLTI3NS1cdC5hZGp0aW1lID0gZGZsX3RvZF9hZGp1c3RfdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmM9MTE0PXN0YXRpYyBzNjQgZHRlX3JlYWRfbmNvX3dpdGhfb3ZmKHN0cnVjdCBwdHBfZHRlICpwdHBfZHRlKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9kdGUuYy0xMzUtXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmM6MTM2OnN0YXRpYyBpbnQgcHRwX2R0ZV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMTM3LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmM9MjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2R0ZV9jYXBzID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9kdGUuYy0yMjEtXHQucHBzXHRcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYzoyMjI6XHQuYWRqZmluZVx0PSBwdHBfZHRlX2FkamZpbmUsXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMjIzLVx0LmFkanRpbWVcdD0gcHRwX2R0ZV9hZGp0aW1lLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYz00Nzk9c3RhdGljIGludCBpZHRmYzNfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHMzMiBkZWx0YSlcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNDkwLVxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjQ5MTpzdGF0aWMgaW50IF9pZHRmYzNfYWRqZmluZShzdHJ1Y3QgaWR0ZmMzICppZHRmYzMsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy00OTIte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MDgtXHQgKlxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjUwOTpcdCAqIGFkamZpbmU6XG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTEwLVx0ICogICAgICAgcHBtXzE2ICogMl4yOFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjEtXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmM6NTIyOnN0YXRpYyBpbnQgaWR0ZmMzX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjMte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjctXHRtdXRleF9sb2NrKGlkdGZjMy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYzo1Mjg6XHRlcnIgPSBfaWR0ZmMzX2FkamZpbmUoaWR0ZmMzLCBzY2FsZWRfcHBtKTtcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjktXHRtdXRleF91bmxvY2soaWR0ZmMzLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9mYzMuYz01OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRmYzNfY2FwcyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTk2LVx0LmFkanBoYXNlXHQ9IFx1MDAyNmlkdGZjM19hZGpwaGFzZSxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYzo1OTc6XHQuYWRqZmluZVx0PSBcdTAwMjZpZHRmYzNfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01OTgtXHQuYWRqdGltZVx0PSBcdTAwMjZpZHRmYzNfYWRqdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYz01MTA9c3RhdGljIHZvaWQgaWR0ODJwMzNfYWRqdGltZV93b3JrYXJvdW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01MjItXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo1MjM6c3RhdGljIGludCBfaWR0ODJwMzNfYWRqZmluZShzdHJ1Y3QgaWR0ODJwMzNfY2hhbm5lbCAqY2hhbm5lbCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNTI0LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01MzctXHQgKlxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmM6NTM4Olx0ICogYWRqZmluZTpcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTUzOS1cdCAqICAgICAgIHNjYWxlZF9wcG0gKiA1XjEyICogMTBeNVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU3OT1zdGF0aWMgaW50IGlkdDgycDMzX3N0b3BfZGRjbyhzdHJ1Y3QgaWR0ODJwMzNfY2hhbm5lbCAqY2hhbm5lbClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01ODItXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo1ODM6XHRlcnIgPSBfaWR0ODJwMzNfYWRqZmluZShjaGFubmVsLCBjaGFubmVsLVx1MDAzZWN1cnJlbnRfZnJlcSk7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01ODQtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU5Mj1zdGF0aWMgaW50IGlkdDgycDMzX3N0YXJ0X2RkY28oc3RydWN0IGlkdDgycDMzX2NoYW5uZWwgKmNoYW5uZWwsIHMzMiBkZWx0YV9ucylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy02MTItXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo2MTM6XHRlcnIgPSBfaWR0ODJwMzNfYWRqZmluZShjaGFubmVsLFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNjE0LVx0XHRcdFx0aWR0ODJwMzNfZGRjb19zY2FsZWRfcHBtKGN1cnJlbnRfcHBtLCBwcGIpKTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYz05NzQ9c3RhdGljIGludCBpZHQ4MnAzM19hZGp3cml0ZXBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzMzIgb2Zmc2V0X25zKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTEwMDktXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzoxMDEwOnN0YXRpYyBpbnQgaWR0ODJwMzNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAxMS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAyMy1cdG11dGV4X2xvY2soaWR0ODJwMzMtXHUwMDNlbG9jayk7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzoxMDI0Olx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCwgc2NhbGVkX3BwbSk7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy0xMDI1LVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTExNTM9c3RhdGljIHZvaWQgaWR0ODJwMzNfY2Fwc19pbml0KHUzMiBpbmRleCwgc3RydWN0IHB0cF9jbG9ja19pbmZvICpjYXBzLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTExNjUtXHRjYXBzLVx1MDAzZWdldG1heHBoYXNlID0gaWR0ODJwMzNfZ2V0bWF4cGhhc2U7XG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzoxMTY2Olx0Y2Fwcy1cdTAwM2VhZGpmaW5lID0gaWR0ODJwMzNfYWRqZmluZTtcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTExNjctXHRjYXBzLVx1MDAzZWFkanRpbWUgPSBpZHQ4MnAzM19hZGp0aW1lO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM9NTg9c3RhdGljIGludCBwdHBfa3ZtX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmMtNjgtXG5kcml2ZXJzL3B0cC9wdHBfa3ZtX2NvbW1vbi5jOjY5OnN0YXRpYyBpbnQgcHRwX2t2bV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIGRlbHRhKVxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy03MC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfa3ZtX2NhcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy0xMTctXHQucHBzXHRcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM6MTE4Olx0LmFkamZpbmVcdD0gcHRwX2t2bV9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy0xMTktXHQuYWRqdGltZVx0PSBwdHBfa3ZtX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX21vY2suYz00ND1zdGF0aWMgdTY0IG1vY2tfcGhjX2NjX3JlYWQoc3RydWN0IGN5Y2xlY291bnRlciAqY2MpXG4tLVxuZHJpdmVycy9wdHAvcHRwX21vY2suYy00OC1cbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM6NDk6c3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX21vY2suYy01MC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX21vY2suYz0xMTg9c3RydWN0IG1vY2tfcGhjICptb2NrX3BoY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmMtMTMyLVx0XHQubWF4X2Fkalx0PSBNT0NLX1BIQ19NQVhfQURKX1BQQixcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM6MTMzOlx0XHQuYWRqZmluZVx0PSBtb2NrX3BoY19hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX21vY2suYy0xMzQtXHRcdC5hZGp0aW1lXHQ9IG1vY2tfcGhjX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX25ldGMuYz02MzY9c3RhdGljIHZvaWQgbmV0Y190aW1lcl9hZGp1c3RfcGVyaW9kKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LCB1NjQgcGVyaW9kKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmMtNjU4LVxuZHJpdmVycy9wdHAvcHRwX25ldGMuYzo2NTk6c3RhdGljIGludCBuZXRjX3RpbWVyX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmMtNjYwLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jPTczNT1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIG5ldGNfdGltZXJfcHRwX2NhcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy03NDYtXHRcdFx0XHQgUFRQX1NUUklDVF9GTEFHUyxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmM6NzQ3Olx0LmFkamZpbmVcdD0gbmV0Y190aW1lcl9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy03NDgtXHQuYWRqdGltZVx0PSBuZXRjX3RpbWVyX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTE2MTM9c3RhdGljIGludFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE2MTQ6cHRwX29jcF9udWxsX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTE2MTUte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xNzM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX29jcF9jbG9ja19pbmZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQwLVx0LmFkanRpbWVcdD0gcHRwX29jcF9hZGp0aW1lLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE3NDE6XHQuYWRqZmluZVx0PSBwdHBfb2NwX251bGxfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQyLVx0LmFkanBoYXNlXHQ9IHB0cF9vY3BfbnVsbF9hZGpwaGFzZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmM9Mjk1PXN0YXRpYyBpcnFyZXR1cm5fdCBpc3IoaW50IGlycSwgdm9pZCAqcHJpdilcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtMzM5LVxuZHJpdmVycy9wdHAvcHRwX3BjaC5jOjM0MDpzdGF0aWMgaW50IHB0cF9wY2hfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX3BjaC5jLTM0MS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3BjaC5jPTQyNj1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9wY2hfY2FwcyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtNDMyLVx0LnBwc1x0XHQ9IDAsXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmM6NDMzOlx0LmFkamZpbmVcdD0gcHRwX3BjaF9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3BjaC5jLTQzNC1cdC5hZGp0aW1lXHQ9IHB0cF9wY2hfYWRqdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYz0xOTY9RVhQT1JUX1NZTUJPTF9HUEwocHRwX3FvcmlxX2lzcik7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMjAxLVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmM6MjAyOmludCBwdHBfcW9yaXFfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMjAzLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYy0yMzAtfVxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmM6MjMxOkVYUE9SVF9TWU1CT0xfR1BMKHB0cF9xb3JpcV9hZGpmaW5lKTtcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTIzMi1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYz0zNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfcW9yaXFfY2FwcyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYy0zNTctXHQucHBzXHRcdD0gMSxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jOjM1ODpcdC5hZGpmaW5lXHQ9IHB0cF9xb3JpcV9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMzU5LVx0LmFkanRpbWVcdD0gcHRwX3FvcmlxX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYz0xMT1zdGF0aWMgc3RydWN0IHB0cF9jbG9jayAqcHRwX3N0Y2tlX2Nsb2NrLCAqcHRwX3FwdF9jbG9jaztcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtMTItXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jOjEzOnN0YXRpYyBpbnQgcHRwX3MzOTBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy0xNC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYz04Mz1zdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9zMzkwX3N0Y2tlX2luZm8gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy04Ni1cdC5tYXhfYWRqXHQ9IDAsXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jOjg3Olx0LmFkamZpbmVcdD0gcHRwX3MzOTBfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtODgtXHQuYWRqdGltZVx0PSBwdHBfczM5MF9hZGp0aW1lLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM9OTQ9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfczM5MF9xcHRfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jLTk3LVx0Lm1heF9hZGpcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM6OTg6XHQuYWRqZmluZVx0PSBwdHBfczM5MF9hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy05OS1cdC5hZGp0aW1lXHQ9IHB0cF9zMzkwX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTM0PXN0YXRpYyB2b2lkIHB0cF92Y2xvY2tfaGFzaF9kZWwoc3RydWN0IHB0cF92Y2xvY2sgKnZjbG9jaylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmMtNDQtXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmM6NDU6c3RhdGljIGludCBwdHBfdmNsb2NrX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy00Ni17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTE2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92Y2xvY2tfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmMtMTY3LVx0Lm1heF9hZGpcdD0gNTAwMDAwMDAwLFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jOjE2ODpcdC5hZGpmaW5lXHQ9IHB0cF92Y2xvY2tfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy0xNjktXHQuYWRqdGltZVx0PSBwdHBfdmNsb2NrX2FkanRpbWUsXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0yNTQ9c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI4Ni1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjg3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBkZWx0YSlcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjg4LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTMxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92bWNsb2NrX2luZm8gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMjMtXHQucHBzXHRcdD0gMCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzI0Olx0LmFkamZpbmVcdD0gcHRwX3ZtY2xvY2tfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzI1LVx0LmFkanRpbWVcdD0gcHRwX3ZtY2xvY2tfYWRqdGltZSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm13LmM9Mzk9c3RhdGljIGludCBwdHBfdm13X2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jLTQzLVxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jOjQ0OnN0YXRpYyBpbnQgcHRwX3Ztd19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBkZWx0YSlcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy00NS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jPTcxPXN0YXRpYyBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX3Ztd19jbG9ja19pbmZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03NS1cdC5hZGp0aW1lXHQ9IHB0cF92bXdfYWRqdGltZSxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYzo3NjpcdC5hZGpmaW5lXHQ9IHB0cF92bXdfYWRqZmluZSxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03Ny1cdC5nZXR0aW1lNjRcdD0gcHRwX3Ztd19nZXR0aW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA3OQoJCQkJCQkJb3V0cHV0OiAyOTIKCQkJCQkJCXRob3VnaHRzOiAxNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKioKCkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIHRoaXMgY29kZSBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvdXBsZSBvZiBmaXhlcyBoZXJlLCBvbmUgaW4gdGhlIFBUUCBkcml2ZXIgYW5kIGFub3RoZXIgaW4gdGhlIEdWRSBSWCBwYXRoLiBNeSBjb25jZXJuLCBhcyBhbHdheXMgd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIHdoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guCgpGaXJzdCwgdGhlIFBUUCBjaGFuZ2UuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHB0cF9jbG9ja19hZGp0aW1lYC4gSXQgYXBwZWFycyB0aGF0IGlmIGBvcHMtJmd0O2FkamZpbmVgIGlzIE5VTEwsIHdoaWNoIGlzIHBvc3NpYmxlIGlmIHRoZSB1bmRlcmx5aW5nIFBUUCBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGFuZCB0aGF0IGlzIG5vdyBwcm9wZXJseSBoYW5kbGVkLCB3ZSBnZXQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBmaXgsIGBndmVfcHRwX2FkamZpbmVgLCBlc3NlbnRpYWxseSBwcm92aWRlcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIC1FT1BOT1RTVVBQLiBUaGlzIGlzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyB3aWxsIGNhdGNoIHRoaXMsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkIGhlcmUuCgpOb3csIGxldCYjMzk7cyBtb3ZlIHRvIHRoZSBHVkUgUlggcGF0aC4gVGhlIGNvcmUgaXNzdWUgaGVyZSBzZWVtcyB0byBiZSBoYW5kbGluZyBvZiB6ZXJvLWxlbmd0aCBidWZmZXJzLiBJZiBgYnVmX2xlbmAgaXMgemVybywgd2UmIzM5O3JlIGxpa2VseSBza2lwcGluZyB0aGUgd2hvbGUgcGF5bG9hZCwgYXMgaW50ZW5kZWQgd2l0aCB0aGlzIHBhdGNoLiBUaGlzIGlzIHVzZWQgaW4gZ3ZlX3J4X2Rxby4gVGhlIGZpeCBoZXJlIGNoZWNrcyBpZiBgYnVmX2xlbmAgaXMgMC4gSWYgaXQgaXMgMCwgdGhlIGJ1ZmZlciBpcyBmcmVlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHBhc3MgYSAwLWxlbmd0aCBmcmFnbWVudCB0byBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AuIEEgMC1sZW5ndGggZnJhZ21lbnQgaXMgcGVyZmVjdGx5IHZhbGlkLiBUaGUgc2tiIHdpbGwgdGhlbiBoYXZlIGEgZnJhZ21lbnQgb2YgbGVuZ3RoIDAuCgpTbywgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIDAtbGVuZ3RoIGZyYWdtZW50IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgZnJhZ21lbnQgKnBvaW50cyogdG8gYSBwYWdlLCBidXQgYmVjYXVzZSB0aGUgbGVuZ3RoIGlzIHplcm8sIG5vdGhpbmcgaXMgYWN0dWFsbHkgcmVhZCBmcm9tIHRoZSBwYWdlLiBJZiB0aGUgbmV0d29yayBzdGFjayBvciBhbiBYRFAgcHJvZ3JhbSAqdHJpZXMqIHRvIHJlYWQgZnJvbSBhIDAtbGVuZ3RoIGZyYWdtZW50LCBpdCYjMzk7cyBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIG5vdGhpbmcgYXQgYWxsLCB3aGljaCBpcyBhIGNyYXNoLiBLQVNBTiBpcyB0aGVyZSB0byBjYXRjaCBvdXQtb2YtYm91bmRzIHJlYWRzLiBLTVNBTiBkb2VzbiYjMzk7dCBhcHBseS4KClRoZSAwLWxlbmd0aCBmcmFnbWVudCYjMzk7cyBjb250cmlidXRpb24gdG8gYHNrYi0mZ3Q7bGVuYCBpcyAwIGJ5dGVzLiBTbyBpdCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIHBvc3NpYmxlIGV4ZWN1dGlvbiBmbG93czoKCjEuICAqKlplcm8tTGVuZ3RoIEZyYWdtZW50OioqIFRoZSBkYXRhIGJ1ZmZlciBoYXMgYGJ1Zl9sZW5gIG9mIDAuIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCBpcyBjYWxsZWQsIGFuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBTS0IuIFRoaXMgaXMgd2hlcmUgaXTigJlzIHRoZSBmcmFnbWVudCBpcyBhc3NpZ25lZCB0byBgYnVmX3N0YXRlLSZndDtwYWdlX2luZm8ucGFnZWAuCjIuICAqKk5ldHdvcmsgU3RhY2sgUmVhZDoqKiBJZiB0aGUgbmV0d29yayBzdGFjayB0cmllcyB0byByZWFkIGBza2ItJmd0O2xlbmAgYnl0ZXMgZnJvbSB0aGUgU0tCLCBhbmQgdGhlIGZyYWdtZW50IGlzIGFjY2Vzc2VkLCBpdCB3aWxsIHJlYWQgMCBieXRlcywgc28gdGhpcyBpcyBub3QgYSBwcm9ibGVtLiBFdmVuIGlmIHRoZSBjb2RlICppbmNvcnJlY3RseSogY2FsY3VsYXRlcyByZWFkIGxlbmd0aCBhbmQgdHJpZXMgdG8gcmVhZCBtb3JlLCB3ZSBzaG91bGQgZ2V0IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjYXVnaHQgYnkgS0FTQU4uCjMuICAqKlhEUCBQcm9ncmFtIFJlYWQ6KiogSWYgYW4gWERQIHByb2dyYW0gdHJpZXMgdG8gcmVhZCBmcm9tIHRoZSAwLWxlbmd0aCBmcmFnbWVudCwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBwYWdlIGFzc2lnbmVkIHRvIGl0IGFuZCBjb3VsZCBlaXRoZXIgc3VjY2VlZCBpZiBjb2RlIGlzIGNvcnJlY3QsIG9yIGZhaWwgd2l0aCBLQVNBTiBpZiBvdXQtb2YtYm91bmRzLgo0LiAgKipVc2Vyc3BhY2UgQ29weSAoZS5nLiwgQUZfUEFDS0VUKToqKiBJZiB0aGUgU0tCIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGBza2ItJmd0O2xlbmAgKHdoaWNoIGluY2x1ZGVzIDAgZnJvbSB0aGUgMC1sZW5ndGggZnJhZ21lbnQpIGJ5dGVzIHdpbGwgYmUgY29waWVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuCgpUaGVyZWZvcmUsIHRoZSBmaXggKnByZXZlbnRzKiBpc3N1ZXMgcmVsYXRlZCB0byB6ZXJvLWxlbmd0aCBidWZmZXJzLCBidXQgaXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gS0FTQU4gY292ZXJzIHRoZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIGFuZCB0aGVyZSYjMzk7cyBubyByZWFzb24gdG8gZmxhZyB0aGlzIGZvciBLTVNBTi4KCkluIHN1bW1hcnksIG15IGFzc2Vzc21lbnQgaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSW4gYGd2ZV9wdHAuY2AsIGl0IGFkZHMgYSBzdHViIGZvciBgYWRqZmluZWAgKGBndmVfcHRwX2FkamZpbmVgKSB3aGljaCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFBUUCBjb3JlIChgcHRwX2Nsb2NrX2FkanRpbWVgKSB3aGVuIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XG4xLiBJbiBgZ3ZlX3B0cC5jYCwgaXQgYWRkcyBhIHN0dWIgZm9yIGBhZGpmaW5lYCAoYGd2ZV9wdHBfYWRqZmluZWApIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUFRQIGNvcmUgKGBwdHBfY2xvY2tfYWRqdGltZWApIHdoZW4gYG9wcy1cdTAwM2VhZGpmaW5lYCBpcyBpbnZva2VkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi5cbjIuIEluIGBndmVfcnhfZHFvLmNgLCBpdCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIGVhcmx5IGFuZCBmcmVlIHRoZSBidWZmZXIgaWYgYGJ1Zl9sZW5gIGlzIDAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGRyaXZlciBjb3VsZCBhcHBlbmQgYSAwLWxlbmd0aCBmcmFnbWVudCB0byBhbiBza2Igb3IgcGFzcyBhIDAtbGVuZ3RoIGJ1ZmZlciB0byBhbiBYRFAgcHJvZ3JhbS4gQSAwLWxlbmd0aCBmcmFnbWVudCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgaXRzIGxlbmd0aCBpcyAwLCBtZWFuaW5nIG5vIGJ5dGVzIGZyb20gdGhlIGZyYWdtZW50IGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgYnkgdGhlIG5ldHdvcmsgc3RhY2suIEFueSBvdXQtb2YtYm91bmRzIHJlYWRzIGNhdXNlZCBieSBYRFAgcHJvZ3JhbXMgb3IgdGhlIG5ldHdvcmsgc3RhY2sgYXNzdW1pbmcgYSBtaW5pbXVtIGZyYWdtZW50IGxlbmd0aCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbk5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWdzIHRoaXMgcGF0Y2ggZml4ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI2OjQ2LjM5NTgwOTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MzE2ODA2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcHRwX2FkamZpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEluIGBndmVfcHRwLmNgLCBpdCBhZGRzIGEgc3R1YiBmb3IgYGFkamZpbmVgIChgZ3ZlX3B0cF9hZGpmaW5lYCkgd2hpY2ggcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBQVFAgY29yZSAoYHB0cF9jbG9ja19hZGp0aW1lYCkgd2hlbiBgb3BzLVxcdTAwM2VhZGpmaW5lYCBpcyBpbnZva2VkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi5cXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxcblxcbk5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWdzIHRoaXMgcGF0Y2ggZml4ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNjo0Ni4zOTU4MTQxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDcxODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkxNmM0MDI4NmU1ZTExY2NhZTg1MmRlN2NkMTFlYmIyNDBlM2VhNzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXFxuaW5kZXggMDZiMWNmNGE1ZWZjYy4uMWQ2YzU5ZjRlYWQzZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXFxuQEAgLTI2LDYgKzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBndmVfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZ3ZlX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG5AQCAtNjAsNiArNjUsNyBAQCBzdGF0aWMgbG9uZyBndmVfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbylcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7XFxuIFxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcImd2ZSBjbG9ja1xcXCIsXFxuK1xcdC5hZGpmaW5lXFx0PSBndmVfcHRwX2FkamZpbmUsXFxuIFxcdC5nZXR0aW1leDY0XFx0PSBndmVfcHRwX2dldHRpbWV4NjQsXFxuIFxcdC5zZXR0aW1lNjRcXHQ9IGd2ZV9wdHBfc2V0dGltZTY0LFxcbiBcXHQuZG9fYXV4X3dvcmtcXHQ9IGd2ZV9wdHBfZG9fYXV4X3dvcmssXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5pbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5AQCAtODg2LDYgKzg4NiwxMSBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbiBcXHRcXHRyeC1cXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICs9IHVuc3BsaXQ7XFxuIFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfYnl0ZXMgKz0gaGRyX2xlbjtcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbitcXG4rXFx0XFx0aWYgKCFidWZfbGVuKSB7XFxuK1xcdFxcdFxcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICghcngtXFx1MDAzZWN0eC5za2JfaGVhZCBcXHUwMDI2XFx1MDAyNiByeC1cXHUwMDNlZHFvLnBhZ2VfcG9vbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKSB7XFxuIFxcdFxcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNjo0Ny43NzczMTQ4NzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjI5MTg4OTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX3B0cF9hZGpmaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MTZjNDAyODZlNWUxMWNjYWU4NTJkZTdjZDExZWJiMjQwZTNlYTc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMzoyNjo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmNcbmluZGV4IDA2YjFjZjRhNWVmY2MuLjFkNmM1OWY0ZWFkM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmNcbkBAIC0yNiw2ICsyNiwxMSBAQCBpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGd2ZV9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBndmVfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbkBAIC02MCw2ICs2NSw3IEBAIHN0YXRpYyBsb25nIGd2ZV9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZ3ZlX3B0cF9jYXBzID0ge1xuIFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4gXHQubmFtZVx0XHQ9IFwiZ3ZlIGNsb2NrXCIsXG4rXHQuYWRqZmluZVx0PSBndmVfcHRwX2FkamZpbmUsXG4gXHQuZ2V0dGltZXg2NFx0PSBndmVfcHRwX2dldHRpbWV4NjQsXG4gXHQuc2V0dGltZTY0XHQ9IGd2ZV9wdHBfc2V0dGltZTY0LFxuIFx0LmRvX2F1eF93b3JrXHQ9IGd2ZV9wdHBfZG9fYXV4X3dvcmssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuaW5kZXggODI3MWY3MzFhOTFmYy4uMGVjZTJmNmZkZmZiNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuQEAgLTg4Niw2ICs4ODYsMTEgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiBcdFx0cngtXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0ICs9IHVuc3BsaXQ7XG4gXHRcdHJ4LVx1MDAzZXJ4X2hzcGxpdF9ieXRlcyArPSBoZHJfbGVuO1xuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeC1cdTAwM2VzdGF0c3MpO1xuK1xuK1x0XHRpZiAoIWJ1Zl9sZW4pIHtcbitcdFx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZCBcdTAwMjZcdTAwMjYgcngtXHUwMDNlZHFvLnBhZ2VfcG9vbCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgbmV0bWVtX2lzX25ldF9pb3YoYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKSB7XG4gXHRcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6MjY6NDcuNzc3MzE2Mjg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3ODg1ODY0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enphYmlsaXR5IG9mIGEgR1ZFIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZ3ZlX3B0cC5jYCBhbmQgYGd2ZV9yeF9kcW8uY2AuIFRoZSBgZ3ZlX3B0cGAgcGFydCBpcyBqdXN0IHJldHVybmluZyBgLUVPUE5PVFNVUFBgLCB3aGljaCBpc24ndCB2ZXJ5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIHRoYXQgYGd2ZV9yeF9kcW9gIG5vdyBoYXMgYSBjaGVjazogYGlmICghYnVmX2xlbikgeyAuLi4gfWAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0IGJlY2F1c2UgaXQncyBpbiB0aGUgUlggZmFzdCBwYXRoLlxuXG5Ob3csIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIgaXMgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIHdoaWNoIGlzIHdoZXJlIFN5emthbGxlciAqcnVucyogYnkgZGVmYXVsdC4gU28sIEdWRSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdXNlZC4gR29vZC4gQ2hlY2tpbmcgdGhlIEtjb25maWcgY29uZmlybXMgdGhlIGRyaXZlciBpcyBlbmFibGVkIChgQ09ORklHX0dWRWApLiBUaGUgcGF0Y2ggaXMgaW4gdGhlIGBndmVfcnhfZHFvYCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgdmlhIGBndmVfcnhfcG9sbF9kcW9gLlxuXG5UaGUgcXVlc3Rpb24gYmVjb21lczogSXMgdGhpcyBmdXp6YWJsZT8gSXQncyBuZXR3b3JrIGRyaXZlciBSWCwgYW5kIFN5emthbGxlciBpcyBkZXNpZ25lZCB0byBmdXp6IG5ldHdvcmsgcGFja2V0cywgc28gdGhlIGluaXRpYWwgaW1wdWxzZSBpcyB5ZXMuIEhvd2V2ZXIsIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBDYW4gU3l6a2FsbGVyIGRpcmVjdGx5IGZ1enogR1ZFPyBUaGUgR1ZFIGRyaXZlciByZWNlaXZlcyBwYWNrZXRzIGZyb20gdGhlIGh5cGVydmlzb3IuIFN5emthbGxlciBjYW4gc2VuZCBwYWNrZXRzLCBidXQgaXQgZG9lc24ndCAqY29udHJvbCogdGhlIEdWRSBkZXZpY2UgZGlyZWN0bHkuIFN5emthbGxlciBpcyBydW5uaW5nICp3aXRoaW4qIHRoZSBHQ0UgaW5zdGFuY2UsIHNvIGl0IGNhbid0IG1hbmlwdWxhdGUgdGhlIGh5cGVydmlzb3IncyB2aWV3IG9mIHRoZSBHVkUgaGFyZHdhcmUsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS5cblxuU3l6a2FsbGVyIGNhbiBmdXp6IHNvZnR3YXJlIGRldmljZXMgbGlrZSB0dW4vdGFwIG9yIHZldGguIEZvciBhIGhhcmR3YXJlIGRldmljZSwgaXQgdXN1YWxseSByZWxpZXMgb24gdGhlIG5ldHdvcmsgc2VuZGluZyBwYWNrZXRzIGJhY2sgdG8gaXRzZWxmIG9yIG9uIGJyb2FkY2FzdCBwYWNrZXRzIHRvIGNhdXNlIGFjdGl2aXR5LCBidXQgaXQgZG9lc24ndCBpbmplY3QgYXJiaXRyYXJ5IGhhcmR3YXJlIGRlc2NyaXB0b3JzLiBHVkUgKmlzKiBhIFBDSSBkZXZpY2UsIGJ1dCBTeXprYWxsZXIgKmRvZXNuJ3QqIGVtdWxhdGUgR1ZFLiBJdCdzIGp1c3QgKnVzaW5nKiBpdCB3aXRoaW4gR0NFLiBTeXprYWxsZXIncyBub3QgY29udHJvbGxpbmcgdGhlIGhhcmR3YXJlLiBJdCdzIGhhbmRsaW5nICpyZWFsKiBuZXR3b3JrIHRyYWZmaWMgKFNTSCwgZXRjLikuXG5cblNvLCBjb250cm9sbGluZyBzb21ldGhpbmcgbGlrZSBgYnVmX2xlbmAgaXMgZGlmZmljdWx0IGJlY2F1c2UgdGhhdCdzIGNvbnRyb2xsZWQgYnkgdGhlIGh5cGVydmlzb3IsIG5vdCB0aGUgZ3Vlc3QgT1Mgd2hlcmUgU3l6a2FsbGVyIGlzIHJ1bm5pbmcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjb250cm9sIHRoZSBjb250ZW50cyBvZiB0aGUgY29tcGxldGlvbiBkZXNjcmlwdG9yIGBjb21wbF9kZXNjYC4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhbiBlYXN5IHdheSB0byBtYW5pcHVsYXRlIHRoZSBkZXNjcmlwdG9yIGNvbnRlbnRzIGJlY2F1c2UgaXQncyBjb21pbmcgZnJvbSB0aGUgaHlwZXJ2aXNvciwgd2hpY2ggdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0gaGFzIG5vIGNvbnRyb2wgb3Zlci4gVGhlIGd1ZXN0IGlzIHRydXN0aW5nIHRoZSBoeXBlcnZpc29yIGhlcmUuXG5cblNvLCBpbiBzaG9ydCwgd2hpbGUgdGhlIHBhdGNoICpsb29rcyogaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGFuIFJYIHBhdGggYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gcGFja2V0IGZ1enppbmcsIHJlYWxpc3RpY2FsbHksIFN5emthbGxlcidzIGRpcmVjdCBjb250cm9sIG92ZXIgdGhlIEdWRSBkZXZpY2UncyBSWCBkZXNjcmlwdG9ycyBpcyBsaW1pdGVkLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBzb21lIGRlZXBlciBkaWdnaW5nIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgdmlhYmxlIGFuZ2xlIG9mIGF0dGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI3OjAwLjU2NTkwNTI4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1MDE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfcnhfZHFvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfR1ZFKSArPSBndmUub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvTWFrZWZpbGU6NDpndmUteSA6PSBndmVfbWFpbi5vIGd2ZV90eC5vIGd2ZV90eF9kcW8ubyBndmVfcngubyBndmVfcnhfZHFvLm8gZ3ZlX2V0aHRvb2wubyBndmVfYWRtaW5xLm8gZ3ZlX3V0aWxzLm8gZ3ZlX2Zsb3dfcnVsZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL01ha2VmaWxlLTUtXFx0ICAgIGd2ZV9idWZmZXJfbWdtdF9kcW8ub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NzkzPXN0YXRpYyB2b2lkIGd2ZV9kbWFfc3luYyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODE1OnN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODE2LVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBndmVfcnhfY29tcGxfZGVzY19kcW8gKmNvbXBsX2Rlc2MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz0xMDgwPWludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoxMTE5OlxcdFxcdGVyciA9IGd2ZV9yeF9kcW8obmFwaSwgcngsIGNvbXBsX2Rlc2MsIGNvbXBscS1cXHUwMDNlaGVhZCwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTIwLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI3OjAwLjYxMjk2MTgxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjEyODMyMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGltaXRhdGlvbnMgb2YgRnV6emluZyB0aGUgR1ZFIFJlY2VpdmUgRGVzY3JpcHRvciBRdWV1ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGd2ZV9yeF9kcW9gIGZ1bmN0aW9uLCBhbmQgaXQncyBoYW5kbGluZyBjb21wbGV0aW9uIGRlc2NyaXB0b3JzIGNvbWluZyBmcm9tIGVpdGhlciB0aGUgaGFyZHdhcmUgb3IgdGhlIGh5cGVydmlzb3IsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBzeXprYWxsZXIgaXMgcnVubmluZyBpbnNpZGUgdGhlIGd1ZXN0LCBpdCBjYW4ndCBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBoeXBlcnZpc29yIHRvIGluamVjdCBzb21ldGhpbmcgb2J2aW91c2x5IGJhZCBsaWtlIGEgemVyby1sZW5ndGggYnVmZmVyIChgYnVmX2xlbiA9PSAwYCkuIFNvLCB3aGlsZSB0aGlzIGNvZGUgcGF0aCAqZXhpc3RzKiwgaXQgc2VlbXMgcHJldHR5IHJlc2lzdGFudCB0byBtZWFuaW5nZnVsIGZ1enppbmcgdGhyb3VnaCBpbnB1dCBtdXRhdGlvbiwgYmVjYXVzZSB0aGUgKnJlYWwqIGlucHV0cyBjb21lIGZyb20gYSB0cnVzdGVkIGh5cGVydmlzb3IuXG5cbkJ1dCB0aGVuIEkgaGFkIGEgdGhvdWdodC4uLiBpcyB0aGVyZSAqYW55KiB3YXkgc3l6a2FsbGVyIGNvdWxkIGFjdHVhbGx5IGhpdCB0aGlzIGBidWZfbGVuID09IDBgIGNhc2U/IENvdWxkIGl0IGJlIGEgbGVnaXRpbWF0ZSBzdGF0ZSB1bmRlciAqbm9ybWFsKiBuZXR3b3JrIGNvbmRpdGlvbnM/IE1heWJlLCBpZiB0aGVyZSdzIGFuIGVtcHR5IHBhY2tldCBvciBhIGhlYWRlciBzcGxpdCBzY2VuYXJpbyB3aGVyZSB0aGUgcGF5bG9hZCBpdHNlbGYgaXMgZW1wdHkgKGxpa2UgYSBUQ1AgQUNLIHdpdGggbm8gZGF0YSkuIElmIHNvLCB3ZSBtaWdodCBhY3R1YWxseSBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBieSBjcmFmdGluZyBzcGVjaWZpYyBwYWNrZXRzISBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBvcGVucyB1cCBhIG5ldyBhdmVudWUuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGdvIHRha2UgYSBsb29rIGF0IGBndmVfcnhfZHFvLmNgIGFyb3VuZCBsaW5lIDg4Ni4gVGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTAsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjc6MzMuMjI1Nzk3MTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRwcmVmZXRjaChidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWdlKTtcXG4gODYxOlxcdFxcdH1cXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cXG4gODY0OlxcdFxcdGlmIChoc3BsaXQpIHtcXG4gODY1OlxcdFxcdFxcdGludCB1bnNwbGl0ID0gMDtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0XFx0aWYgKGhkcl9sZW4gXFx1MDAyNlxcdTAwMjYgIWhibykge1xcbiA4Njg6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHQoc2l6ZV90KWJ1ZmZlcl9pZCAqIHByaXYtXFx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcXG4gODcwOlxcdFxcbiA4NzE6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZCA9XFxuIDg3MjpcXHRcXHRcXHRcXHRcXHRndmVfcnhfY29weV9kYXRhKHByaXYtXFx1MDAzZWRldiwgbmFwaSxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCByeC1cXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgKyBvZmZzZXQsXFxuIDg3NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyX2xlbik7XFxuIDg3NTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQpKVxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gODc3OlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgPSByeC1cXHUwMDNlY3R4LnNrYl9oZWFkO1xcbiA4Nzg6XFx0XFxuIDg3OTpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZWRxby5wYWdlX3Bvb2wpXFxuIDg4MDpcXHRcXHRcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKTtcXG4gODgxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MjpcXHRcXHRcXHRcXHR1bnNwbGl0ID0gMTtcXG4gODgzOlxcdFxcdFxcdH1cXG4gODg0OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA4ODU6XFx0XFx0XFx0cngtXFx1MDAzZXJ4X2hzcGxpdF9wa3QrKztcXG4gODg2OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcXG4gODg3OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfYnl0ZXMgKz0gaGRyX2xlbjtcXG4gODg4OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeC1cXHUwMDNlc3RhdHNzKTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0XFx0aWYgKCFidWZfbGVuKSB7XFxuIDg5MTpcXHRcXHRcXHRcXHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XFxuIDg5MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH0gZWxzZSBpZiAoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQgXFx1MDAyNlxcdTAwMjYgcngtXFx1MDAzZWRxby5wYWdlX3Bvb2wgXFx1MDAyNlxcdTAwMjZcXG4gODk1OlxcdFxcdFxcdCAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcXG4gODk2OlxcdFxcdFxcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxcbiA4OTc6XFx0XFx0XFx0ICogYnVmZmVyLiBJZiB0aGUgcGFja2V0IGJ1ZmZlciBpcyBhIG5ldF9pb3YsIHRob3NlIGNhbid0IGJlXFxuIDg5ODpcXHRcXHRcXHQgKiBlYXNpbHkgbWFwcGVkIGludG8gdGhlIGtlcm5lbCBzcGFjZSB0byBhY2Nlc3MgdGhlIGhlYWRlclxcbiA4OTk6XFx0XFx0XFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxcbiA5MDA6XFx0XFx0XFx0ICovXFxuIDkwMTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MDI6XFx0XFx0fVxcbiA5MDM6XFx0XFxuIDkwNDpcXHRcXHQvKiBTeW5jIHRoZSBwb3J0aW9uIG9mIGRtYSBidWZmZXIgZm9yIENQVSB0byByZWFkLiAqL1xcbiA5MDU6XFx0XFx0Z3ZlX2RtYV9zeW5jKHByaXYsIHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cXG4gOTA4OlxcdFxcdGlmIChyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKSB7XFxuIDkwOTpcXHRcXHRcXHRpZiAodW5saWtlbHkoZ3ZlX3J4X2FwcGVuZF9mcmFncyhuYXBpLCBidWZfc3RhdGUsIGJ1Zl9sZW4sIHJ4LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNzozMy4yMjU5MDYyNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE1MjY2MTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGF5bG9hZCBCdWZmZXIgSGFuZGxpbmcgaW4gTmV0d29yayBDb2RlKipcblxuT2theSwgc28gYGJ1Zl9sZW5gIHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGRhdGEgcGF5bG9hZCBidWZmZXIuIEknbSBmb2N1c2luZyBvbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGBoc3BsaXRgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGhlYWRlciBpcyBoYW5kbGVkIHNlcGFyYXRlbHkuIElmIGBoc3BsaXRgIGlzIGVuYWJsZWQsIHRoZSBoZWFkZXIgZ2V0cyBjb3BpZWQgaW50byB0aGUgc29ja2V0IGJ1ZmZlci4gSWYgdGhlcmUncyBubyBhY3R1YWwgcGF5bG9hZCAoYCFidWZfbGVuYCksIGl0IGZyZWVzIHRoZSBidWZmZXIgYW5kIHJldHVybnMgMC4gVGhhdCBtYWtlcyBzZW5zZSwgaGFuZGxpbmcgYSBoZWFkZXItb25seSBwYWNrZXQgbGlrZSBhIHB1cmUgVENQIEFDSy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IGFuIGF1dG9tYXRlZCBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/XCIgSXQgc2VlbXMgbGlrZWx5LiBTeXprYWxsZXIgaXMgZGVmaW5pdGVseSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhvc2UgZW1wdHktcGF5bG9hZCBwYWNrZXRzLCBhbmQgaWYgaGVhZGVyIHNwbGl0IGlzIGVuYWJsZWQsIHRoYXQgY29kZSBwYXRoIHdvdWxkIGJlIGhpdC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBmb3IgcG90ZW50aWFsIGJ1Z3Mgb3IgdW5pbnRlbmRlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGhzcGxpdGAgaXMgc29tZXRoaW5nIHN5emthbGxlciBjYW4gZGlyZWN0bHkgY29udHJvbCBvciB0cmlnZ2VyIGluZGlyZWN0bHkuXG5cbk9oLCBhbmQgdGhlcmUgd2FzIGFsc28gdGhhdCBgZ3ZlX3B0cF9hZGpmaW5lYCBjaGFuZ2UgaW4gdGhlIHBhdGNoLiBJIG5lZWQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBhbmQgY2hlY2sgb3V0IGBndmVfcHRwLmNgIHRvIHNlZSBpZiB0aGF0J3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcyBvciBpcyBhIHNlcGFyYXRlIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyNzo0NC4zNzg1NzA0MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpXFxuICAgMjpcXHQvKiBHb29nbGUgdmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXJcXG4gICAzOlxcdCAqXFxuICAgNDpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQ1xcbiAgIDU6XFx0ICovXFxuICAgNjpcXHRcXG4gICA3OlxcdCNpbmNsdWRlIFxcXCJndmUuaFxcXCJcXG4gICA4OlxcdCNpbmNsdWRlIFxcXCJndmVfYWRtaW5xLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdC8qIEludGVydmFsIHRvIHNjaGVkdWxlIGEgbmljIHRpbWVzdGFtcCBjYWxpYnJhdGlvbiwgMjUwbXMuICovXFxuICAxMTpcXHQjZGVmaW5lIEdWRV9OSUNfVFNfU1lOQ19JTlRFUlZBTF9NUyAyNTBcXG4gIDEyOlxcdFxcbiAgMTM6XFx0LyogUmVhZCB0aGUgbmljIHRpbWVzdGFtcCBmcm9tIGhhcmR3YXJlIHZpYSB0aGUgYWRtaW4gcXVldWUuICovXFxuICAxNDpcXHRpbnQgZ3ZlX2Nsb2NrX25pY190c19yZWFkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG4gIDE1OlxcdHtcXG4gIDE2OlxcdFxcdHU2NCBuaWNfcmF3O1xcbiAgMTc6XFx0XFx0aW50IGVycjtcXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ZXJyID0gZ3ZlX2FkbWlucV9yZXBvcnRfbmljX3RzKHByaXYsIHByaXYtXFx1MDAzZW5pY190c19yZXBvcnRfYnVzKTtcXG4gIDIwOlxcdFxcdGlmIChlcnIpXFxuICAyMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHRuaWNfcmF3ID0gYmU2NF90b19jcHUocHJpdi1cXHUwMDNlbmljX3RzX3JlcG9ydC1cXHUwMDNlbmljX3RpbWVzdGFtcCk7XFxuICAyNDpcXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZWxhc3Rfc3luY19uaWNfY291bnRlciwgbmljX3Jhdyk7XFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdHJldHVybiAwO1xcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHRzdGF0aWMgaW50IGd2ZV9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbiAgMzA6XFx0e1xcbiAgMzE6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgMzI6XFx0fVxcbiAgMzM6XFx0XFxuICAzNDpcXHRzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuICAzNTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuICAzNjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4gIDM3OlxcdHtcXG4gIDM4OlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gIDM5OlxcdH1cXG4gIDQwOlxcdFxcbiAgNDE6XFx0c3RhdGljIGludCBndmVfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuICA0MjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0c3RhdGljIGxvbmcgZ3ZlX3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXFxuICA0ODpcXHR7XFxuICA0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgZ3ZlX3B0cCAqcHRwID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBndmVfcHRwLCBpbmZvKTtcXG4gIDUwOlxcdFxcdHN0cnVjdCBndmVfcHJpdiAqcHJpdiA9IHB0cC1cXHUwMDNlcHJpdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjc6NDQuMzc4NjM4NjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNzgwODM0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBEZWNpc2lvbjogR1ZFIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBHVkUgZHJpdmVyLCB3aGljaCBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZSBmb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cywgd2hlcmUgc3l6a2FsbGVyIGlzIHJ1bm5pbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgUFRQIGZ1bmN0aW9ucyBqdXN0IHJldHVybiBgLUVPUE5PVFNVUFBgLCBzbyB0aGF0IGlzIG5vdCBnb2luZyB0byBiZSB3b3J0aCBmdXp6aW5nLCB0aGF0IGRvZXMgbm90aGluZy4gVGhlIHJlYWwgY2hhbmdlIGlzIHRoaXMgc2ltcGxlIGFkZGl0aW9uIHRvIGBndmVfcnhfZHFvYDpcblxuYGBgY1xuXHRcdGlmICghYnVmX2xlbikge1xuXHRcdFx0Z3ZlX2ZyZWVfYnVmZmVyKHJ4LCBidWZfc3RhdGUpO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuYGBgXG5cblRoaXMgbG9va3MgbGlrZSBhIHNpbXBsZSBmaXgsIGxpa2VseSBmb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3Igc2ltaWxhciBpc3N1ZSB3aGVuIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHplcm8uIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZC4gR1ZFICppcyogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYW5kIHN5emthbGxlciBjYW4gZGVmaW5pdGVseSB0cmlnZ2VyIHRoaXMgY29kZSwgZm9yIGV4YW1wbGUsIGJ5IHNlbmRpbmcgYW4gZW1wdHkgcGFja2V0LiBTbywgaXQgKmlzKiByZWFjaGFibGUuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIHNob3VsZCBJIGxpc3QgYFdvcnRoRnV6emluZz10cnVlYD8gSSBjYW4uIFRoZSBpbnN0cnVjdGlvbnMgc2F5IEkgc2hvdWxkIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIGBGb2N1c1N5bWJvbHNgLiBPa2F5LCBgZ3ZlX3J4X2Rxb2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIE5BUEkgcG9sbCBSWCBmdW5jdGlvbiBmb3IgRFFPIHF1ZXVlcywgc28gSSBjYW4gbm90IGxpc3QgdGhpcywgYXMgdGhhdCBpcyBub3QgdXNlZnVsLiBTbywgbXkgc2Vjb25kIHRob3VnaHQgaXMgdG8gbGlzdCBgZ3ZlX3B0cF9hZGpmaW5lYCB3aGljaCBpcyBhIFBUUCBjbG9jayBvcGVyYXRpb24uIFN5emthbGxlciBjYW4gY2FsbCBgY2xvY2tfYWRqdGltZWAgb24gdGhlIFBUUCBjbG9jayBkZXZpY2UsIHdoaWNoIHdvdWxkIGNhbGwgYGd2ZV9wdHBfYWRqZmluZWAuXG5cblNvIGlzIGl0IHJlYWxseSB3b3J0aCBmdXp6aW5nPyBJdCdzIGp1c3QgYSBjaGVjayB0byBmcmVlIGEgYnVmZmVyIHdoZW4gdGhlIGJ1ZmZlciBsZW5ndGggaXMgMC4gQnV0IGl0ICpkb2VzKiBmaXggYSBidWcgLSBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBjcmFzaCwgYW5kIHN5emthbGxlciAqY2FuKiB0cmlnZ2VyIHRoaXMgYnkgc2VuZGluZyB6ZXJvLWxlbmd0aCBwYWNrZXRzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB3aGVuIHJldHVybmluZyBgV29ydGhGdXp6aW5nPXRydWVgLCBJICptdXN0KiBsaXN0IGBGb2N1c1N5bWJvbHNgLiBTbywgaWYgdGhlcmUgYXJlIG5vIG5vbi1ob3QtcGF0aCBmdW5jdGlvbnMsIEkgY2FuIGp1c3QgbGVhdmUgRm9jdXNTeW1ib2xzIGVtcHR5IG9yIGxpc3QgYGd2ZV9wdHBfYWRqZmluZWAuIEJ1dCBpcyB0aGF0IGV2ZW4gaGVscGZ1bD8gVGhpcyBpcyBzdWNoIGEgc2ltcGxlIHBhdGNoLi4uXG5cbldhaXQsIGlzIGhlYWRlciBzcGxpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gR1ZFPyBUaGF0IHdvdWxkIGFmZmVjdCBob3cgbGlrZWx5IHRoaXMgaXMgdG8gYmUgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjc6NTYuNzU2NzI0OTUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU5NDg5OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTI0Mj1zdHJ1Y3QgZ3ZlX3J4X3Jpbmcge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0zMTItXFx0dTY0IHJieXRlczsgLyogZnJlZS1ydW5uaW5nIGJ5dGVzIHJlY2VpdmVkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDozMTM6XFx0dTY0IHJ4X2hzcGxpdF9ieXRlczsgLyogZnJlZS1ydW5uaW5nIGhlYWRlciBieXRlcyByZWNlaXZlZCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE0LVxcdHU2NCBycGFja2V0czsgLyogZnJlZS1ydW5uaW5nIHBhY2tldHMgcmVjZWl2ZWQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMzE3LVxcdHUzMiBtYXNrOyAvKiBtYXNrcyB0aGUgY250IGFuZCBmaWxsX2NudCB0byB0aGUgc2l6ZSBvZiB0aGUgcmluZyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MzE4OlxcdHU2NCByeF9oc3BsaXRfcGt0OyAvKiBmcmVlLXJ1bm5pbmcgcGFja2V0cyB3aXRoIGhlYWRlcnMgc3BsaXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTMxOS1cXHR1NjQgcnhfY29weWJyZWFrX3BrdDsgLyogZnJlZS1ydW5uaW5nIGNvdW50IG9mIGNvcHlicmVhayBwYWNrZXRzICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTMyNC1cXHQvKiBmcmVlLXJ1bm5pbmcgY291bnQgb2YgdW5zcGxpdCBwYWNrZXRzIGR1ZSB0byBoZWFkZXIgYnVmZmVyIG92ZXJmbG93IG9yIGhkcl9sZW4gaXMgMCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MzI1OlxcdHU2NCByeF9oc3BsaXRfdW5zcGxpdF9wa3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0zMjYtXFx0dTY0IHJ4X2NvbnRfcGFja2V0X2NudDsgLyogZnJlZS1ydW5uaW5nIG11bHRpLWZyYWdtZW50IHBhY2tldHMgcmVjZWl2ZWQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTI2NT1pbnQgZ3ZlX3NldF9yeF9idWZfbGVuX2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiByeF9idWZfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjY3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBndmVfcnhfYWxsb2NfcmluZ3NfY2ZnICpyeF9hbGxvY19jZmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTI2ODppbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjY5LVxcdFxcdFxcdCAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9NDI9c3RhdGljIGNvbnN0IGNoYXIgZ3ZlX2dzdHJpbmdzX21haW5fc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo0MzpcXHRcXFwicnhfcGFja2V0c1xcXCIsIFxcXCJyeF9oc3BsaXRfcGt0XFxcIiwgXFxcInR4X3BhY2tldHNcXFwiLCBcXFwicnhfYnl0ZXNcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy00NC1cXHRcXFwidHhfYnl0ZXNcXFwiLCBcXFwicnhfZHJvcHBlZFxcXCIsIFxcXCJ0eF9kcm9wcGVkXFxcIiwgXFxcInR4X3RpbWVvdXRzXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtNDUtXFx0XFxcInJ4X3NrYl9hbGxvY19mYWlsXFxcIiwgXFxcInJ4X2J1Zl9hbGxvY19mYWlsXFxcIiwgXFxcInJ4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0XFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6NDY6XFx0XFxcInJ4X2hzcGxpdF91bnNwbGl0X3BrdFxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTQ3LVxcdFxcXCJpbnRlcmZhY2VfdXBfY250XFxcIiwgXFxcImludGVyZmFjZV9kb3duX2NudFxcXCIsIFxcXCJyZXNldF9jbnRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTUxPXN0YXRpYyBjb25zdCBjaGFyIGd2ZV9nc3RyaW5nc19yeF9zdGF0c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTUyLVxcdFxcXCJyeF9wb3N0ZWRfZGVzY1sldV1cXFwiLCBcXFwicnhfY29tcGxldGVkX2Rlc2NbJXVdXFxcIiwgXFxcInJ4X2NvbnN1bWVkX2Rlc2NbJXVdXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6NTM6XFx0XFxcInJ4X2J5dGVzWyV1XVxcXCIsIFxcXCJyeF9oc3BsaXRfYnl0ZXNbJXVdXFxcIiwgXFxcInJ4X2NvbnRfcGFja2V0X2NudFsldV1cXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy01NC1cXHRcXFwicnhfZnJhZ19mbGlwX2NudFsldV1cXFwiLCBcXFwicnhfZnJhZ19jb3B5X2NudFsldV1cXFwiLCBcXFwicnhfZnJhZ19hbGxvY19jbnRbJXVdXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz0xNDk9Z3ZlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTUyOlxcdHU2NCB0bXBfcnhfcGt0cywgdG1wX3J4X2hzcGxpdF9wa3QsIHRtcF9yeF9ieXRlcywgdG1wX3J4X2hzcGxpdF9ieXRlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTUzLVxcdFxcdHRtcF9yeF9za2JfYWxsb2NfZmFpbCwgdG1wX3J4X2J1Zl9hbGxvY19mYWlsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoxNTQ6XFx0XFx0dG1wX3J4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0LCB0bXBfcnhfaHNwbGl0X3Vuc3BsaXRfcGt0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0xNTUtXFx0XFx0dG1wX3R4X3BrdHMsIHRtcF90eF9ieXRlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMTU2LVxcdFxcdHRtcF94ZHBfdHhfZXJyb3JzLCB0bXBfeGRwX3JlZGlyZWN0X2Vycm9ycztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTU3OlxcdHU2NCByeF9idWZfYWxsb2NfZmFpbCwgcnhfZGVzY19lcnJfZHJvcHBlZF9wa3QsIHJ4X2hzcGxpdF91bnNwbGl0X3BrdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTU4OlxcdFxcdHJ4X3BrdHMsIHJ4X2hzcGxpdF9wa3QsIHJ4X3NrYl9hbGxvY19mYWlsLCByeF9ieXRlcywgdHhfcGt0cywgdHhfYnl0ZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE1OS1cXHRcXHR0eF9kcm9wcGVkLCB4ZHBfdHhfZXJyb3JzLCB4ZHBfcmVkaXJlY3RfZXJyb3JzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MTk4OlxcdGZvciAocnhfcGt0cyA9IDAsIHJ4X2J5dGVzID0gMCwgcnhfaHNwbGl0X3BrdCA9IDAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTE5OS1cXHQgICAgIHJ4X3NrYl9hbGxvY19mYWlsID0gMCwgcnhfYnVmX2FsbG9jX2ZhaWwgPSAwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMDA6XFx0ICAgICByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdCA9IDAsIHJ4X2hzcGxpdF91bnNwbGl0X3BrdCA9IDAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIwMS1cXHQgICAgIHhkcF90eF9lcnJvcnMgPSAwLCB4ZHBfcmVkaXJlY3RfZXJyb3JzID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTAtXFx0XFx0XFx0XFx0dG1wX3J4X3BrdHMgPSByeC1cXHUwMDNlcnBhY2tldHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjIxMTpcXHRcXHRcXHRcXHR0bXBfcnhfaHNwbGl0X3BrdCA9IHJ4LVxcdTAwM2VyeF9oc3BsaXRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTItXFx0XFx0XFx0XFx0dG1wX3J4X2J5dGVzID0gcngtXFx1MDAzZXJieXRlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTYtXFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZXJ4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzoyMTc6XFx0XFx0XFx0XFx0dG1wX3J4X2hzcGxpdF91bnNwbGl0X3BrdCA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjIxODpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcnhfaHNwbGl0X3Vuc3BsaXRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMTktXFx0XFx0XFx0XFx0dG1wX3hkcF90eF9lcnJvcnMgPSByeC1cXHUwMDNleGRwX3R4X2Vycm9ycztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMjQtXFx0XFx0XFx0cnhfcGt0cyArPSB0bXBfcnhfcGt0cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjI1OlxcdFxcdFxcdHJ4X2hzcGxpdF9wa3QgKz0gdG1wX3J4X2hzcGxpdF9wa3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTIyNi1cXHRcXHRcXHRyeF9ieXRlcyArPSB0bXBfcnhfYnl0ZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjI5LVxcdFxcdFxcdHJ4X2Rlc2NfZXJyX2Ryb3BwZWRfcGt0ICs9IHRtcF9yeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjMwOlxcdFxcdFxcdHJ4X2hzcGxpdF91bnNwbGl0X3BrdCArPSB0bXBfcnhfaHNwbGl0X3Vuc3BsaXRfcGt0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yMzEtXFx0XFx0XFx0eGRwX3R4X2Vycm9ycyArPSB0bXBfeGRwX3R4X2Vycm9ycztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0yNTItXFx0ZGF0YVtpKytdID0gcnhfcGt0cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjUzOlxcdGRhdGFbaSsrXSA9IHJ4X2hzcGxpdF9wa3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTI1NC1cXHRkYXRhW2krK10gPSB0eF9wa3RzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTI2NC1cXHRkYXRhW2krK10gPSByeF9kZXNjX2Vycl9kcm9wcGVkX3BrdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6MjY1OlxcdGRhdGFbaSsrXSA9IHJ4X2hzcGxpdF91bnNwbGl0X3BrdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMjY2LVxcdGRhdGFbaSsrXSA9IHByaXYtXFx1MDAzZWludGVyZmFjZV91cF9jbnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzMyLVxcdFxcdFxcdFxcdHRtcF9yeF9ieXRlcyA9IHJ4LVxcdTAwM2VyYnl0ZXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjMzMzpcXHRcXHRcXHRcXHR0bXBfcnhfaHNwbGl0X2J5dGVzID0gcngtXFx1MDAzZXJ4X2hzcGxpdF9ieXRlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzM0LVxcdFxcdFxcdFxcdHRtcF9yeF9za2JfYWxsb2NfZmFpbCA9IHJ4LVxcdTAwM2VyeF9za2JfYWxsb2NfZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy0zNDMtXFx0XFx0XFx0ZGF0YVtpKytdID0gdG1wX3J4X2J5dGVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzozNDQ6XFx0XFx0XFx0ZGF0YVtpKytdID0gdG1wX3J4X2hzcGxpdF9ieXRlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtMzQ1LVxcdFxcdFxcdGRhdGFbaSsrXSA9IHJ4LVxcdTAwM2VyeF9jb250X3BhY2tldF9jbnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9NjA2PXN0YXRpYyBpbnQgZ3ZlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy02MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjYyMzpcXHRlcnIgPSBndmVfc2V0X2hzcGxpdF9jb25maWcocHJpdiwga2VybmVsX2NtZC1cXHUwMDNldGNwX2RhdGFfc3BsaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTYyNC1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X2FsbG9jX2NmZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjExMT1pbnQgZ3ZlX3NldF9yeF9idWZfbGVuX2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiByeF9idWZfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIxNDM6aW50IGd2ZV9zZXRfaHNwbGl0X2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHU4IHRjcF9kYXRhX3NwbGl0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMTQ0LVxcdFxcdFxcdCAgc3RydWN0IGd2ZV9yeF9hbGxvY19yaW5nc19jZmcgKnJ4X2FsbG9jX2NmZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTgxNT1zdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtODIxLVxcdGNvbnN0IGJvb2wgZW9wID0gY29tcGxfZGVzYy1cXHUwMDNlZW5kX29mX3BhY2tldCAhPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjgyMjpcXHRjb25zdCBib29sIGhzcGxpdCA9IGNvbXBsX2Rlc2MtXFx1MDAzZXNwbGl0X2hlYWRlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MjMtXFx0c3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvICpidWZfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04NjMtXFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4NjQ6XFx0aWYgKGhzcGxpdCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTg2NS1cXHRcXHRpbnQgdW5zcGxpdCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04ODQtXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cngtXFx1MDAzZXN0YXRzcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODg1OlxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfcGt0Kys7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6ODg2OlxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4ODc6XFx0XFx0cngtXFx1MDAzZXJ4X2hzcGxpdF9ieXRlcyArPSBoZHJfbGVuO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTg4OC1cXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cngtXFx1MDAzZXN0YXRzcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI3OjU3LjgxNjIyMTcwOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTE1OTcwMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgR1ZFIERyaXZlciBIZWFkZXIgU3BsaXQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcG90ZW50aWFsIGJ1ZyByZWxhdGVkIHRvIGhlYWRlciBzcGxpdCBpbiB0aGUgR1ZFIGRyaXZlciwgYW5kIEkgbmVlZCB0byBkZWNpZGUgaWYgaXQncyB3b3J0aCBmdXp6aW5nIHdpdGggU3l6a2FsbGVyLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYGJ1Zl9sZW5gIGlzIHplcm8sIGFuZCBoZWFkZXIgc3BsaXQgaXMgZW5hYmxlZCwgYGd2ZV9yeF9kcW9gIGhhcyBhIHByb2JsZW0gd2hpY2ggaXMgZml4ZWQgYnkgYSByZWNlbnQgcGF0Y2guXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCBHVkUgKmlzKiByZWFjaGFibGUgc2luY2UgU3l6a2FsbGVyIHJ1bnMgb24gR0NFLCB3aGljaCB1c2VzIHRoZSBHVkUgZHJpdmVyIGFzIGl0cyBuZXR3b3JrIGludGVyZmFjZS4gQWxzbywgU3l6a2FsbGVyICpjYW4qIGVuYWJsZSBoZWFkZXIgc3BsaXQgdXNpbmcgYGV0aHRvb2xgIHRocm91Z2ggYGd2ZV9zZXRfcmluZ3BhcmFtYCAtXHUwMDNlIGBndmVfc2V0X2hzcGxpdF9jb25maWdgLiBUaGVuLCBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIGVtcHR5IHBheWxvYWQgcGFja2V0cyAoYSBsaWtlbHkgc2NlbmFyaW8sIGZvciBpbnN0YW5jZSwgYSBUQ1AgQUNLKS4gVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZmF1bHR5IGAhYnVmX2xlbmAgY2hlY2suXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBkcml2ZXIhIFllcywgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBUaGVyZSdzIGBndmVfcHRwX2FkamZpbmVgLCB3aGljaCBpcyBhIG5ldyBmdW5jdGlvbiBhbmQgYGd2ZV9yeF9kcW9gLiBJICp0aGluayogYGd2ZV9wdHBfYWRqZmluZWAganVzdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIE5vdCBleGFjdGx5IGEgaG90IHBhdGgsIGFuZCBwcm9iYWJseSBub3QgdGhhdCBmcnVpdGZ1bCBmb3IgZnV6emluZywgYnV0IGl0ICppcyogYSB2YWxpZCBzeW1ib2wuIEl0IGxvb2tzIGxpa2UgaXQgaXMgdGhlIG9ubHkgb3RoZXIgZnVuY3Rpb24gbW9kaWZpZWQuXG5cbkZvciBgRm9jdXNTeW1ib2xzYCwgSSdsbCBpbmNsdWRlIGBndmVfcHRwX2FkamZpbmVgLlxuXG5BcyBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBgQ09ORklHX0dWRWAgaXMgdGhlIEdWRSBkcml2ZXIgY29uZmlnLiBFdmVuIHRob3VnaCBzeXprYWxsZXIncyBHQ0UgY29uZmlnICpzaG91bGQqIGFscmVhZHkgaGF2ZSBgQ09ORklHX0dWRWAgZW5hYmxlZCwgSSBzaG91bGQgbGlzdCBpdCBhbnl3YXkgdG8gYmUgc2FmZSBhbmQgZXhwbGljaXQuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgZW5hYmxlZCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjA2LjMzMjE5NDk1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiR29vZ2xlIERldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTI6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxMzpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4gIDE0OlxcdFxcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX0dPT0dMRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgR1ZFXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAyNzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MDYuMzMyMzAxNjg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjYxNjg2MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBHVkUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgZXhwbG9pdGFibGUgY2hhbmdlcyB3aXRoaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLlxuXG5GaXJzdCwgSSBpZGVudGlmaWVkIGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgIGFzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgbWVudGlvbiBHQ0UgYW5kIFFFTVUgYXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTaW5jZSBzeXprYWxsZXIgKnByaW1hcmlseSogdGFyZ2V0cyBHQ0UsIGFuZCBHVkUgaXMgdGhlIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIEdDRSwgdGhlIGNvZGUgaXMgaW5kZWVkIHJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0LCB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmUgY2xlYXIgZXhjZXB0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNlZTpcblxuKiAgIFRoZSBhZGRpdGlvbiBvZiBgZ3ZlX3B0cF9hZGpmaW5lYCBpbiBgZ3ZlX3B0cC5jYCwgd2hpY2ggcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIHNlZW1zIHNpbXBsZSwgYnV0IGl0J3Mgbm93IGFuIGV4cG9zZWQgZnVuY3Rpb24gYW5kIGNvdWxkIGJlIGEgcG9pbnQgb2YgYXR0YWNrLlxuKiAgIEEgY2hlY2sgZm9yIGAhYnVmX2xlbmAgaW4gYGd2ZV9yeF9kcW9gIHdpdGhpbiBgZ3ZlX3J4X2Rxby5jYC4gVGhpcyBpcyBhIGJ1ZyBmaXggdGhhdCBwcmV2ZW50cyBwcm9jZXNzaW5nIG9mIGEgemVyby1sZW5ndGggcGFja2V0IGJ1ZmZlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjaGFuZ2VzIHdlcmUgdHJpdmlhbCBhbmQgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IHdhcyBzbWFsbC4gQnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJJ20gbm90IGxvb2tpbmcgYXQgKmltcGFjdCosIEknbSBsb29raW5nIGZvciBhIG1vZGlmY2F0aW9uIHRvIGtlcm5lbCBsb2dpYyBpbiBhIHJlYWNoYWJsZSBhcmVhLlxuXG5JIHJldmlld2VkIHRoZSBleGNsdXNpb25zIGxpc3QuIE5vbmUgb2YgdGhlIGV4Y2x1c2lvbnMgYXBwbHk6IG5vdCBkb2N1bWVudGF0aW9uLCBubyBjb25maWcgY2hhbmdlcywgbm8gZGVjb3JhdGl2ZSBjaGFuZ2VzLCBub3QgYSBQQ0kgZHJpdmVyIHJlbW92ZSwgaXQgaXMgY29yZSBrZXJuZWwgbG9naWMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgaXQgYXMgV29ydGhGdXp6aW5nPXRydWUuXG5cbk15IHByaW1hcnkgZm9jdXMgc3ltYm9sIHNob3VsZCBiZSBgZ3ZlX3B0cF9hZGpmaW5lYC4gV2hpbGUgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGAuYWRqZmluZWApIHdpdGhpbiBgZ3ZlX3B0cF9jYXBzYCwgbWVhbmluZyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEl0IGFjdHMgYXMgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIHRoZSBQVFAgc3Vic3lzdGVtLiBgZ3ZlX3J4X2Rxb2AgaXMgYSBob3QgcGF0aCBmdW5jdGlvbiBzbyBJJ20gc2tpcHBpbmcgaXQuXG5cblRoZSBjb25maWd1cmF0aW9ucyBJJ3ZlIGNvbmZpcm1lZCBhcmUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuIGBHVkVgIGRlcGVuZHMgb24gYFBDSV9NU0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGlzIGEgaGVscGVyLCBhbmQgYFBDSV9NU0lgIGlzIHN0YW5kYXJkLCBzbyB0aGVzZSBhcmUgbm90IG5lZWRlZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIFBUUCBjbG9jayBvcGVyYXRpb24sIGBndmVfcHRwX2FkamZpbmVgLCBhbmQgYSBjaGFuZ2UgaW4gUlggZmFzdCBwYXRoLCBgZ3ZlX3J4X2Rxb2AsIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIEdWRSBpcyBleHBsaWNpdGx5IHVzZWQgaW4gR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjkzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODoyMy45OTM5OTExODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIxMDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9HT09HTEVcIixcbiAgICBcIkdWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd2ZV9wdHBfYWRqZmluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgZHJpdmVyIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cy4gSXQgYWRkcyBhIG1pc3NpbmcgUFRQIGNsb2NrIG9wZXJhdGlvbiBgZ3ZlX3B0cF9hZGpmaW5lYCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIFJYIGZhc3QgcGF0aCAoYGd2ZV9yeF9kcW9gKSB3aGVuIGhhbmRsaW5nIHplcm8tbGVuZ3RoIHBheWxvYWQgYnVmZmVycyB3aXRoIGhlYWRlciBzcGxpdCBlbmFibGVkLiBTaW5jZSBHVkUgaXMgcmVhY2hhYmxlIGFuZCBhY3RpdmVseSB1c2VkIGluIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX3B0cF9hZGpmaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgdGhlIHByaW1hcnkgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzLiBJdCBhZGRzIGEgbWlzc2luZyBQVFAgY2xvY2sgb3BlcmF0aW9uIGBndmVfcHRwX2FkamZpbmVgIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgUlggZmFzdCBwYXRoIChgZ3ZlX3J4X2Rxb2ApIHdoZW4gaGFuZGxpbmcgemVyby1sZW5ndGggcGF5bG9hZCBidWZmZXJzIHdpdGggaGVhZGVyIHNwbGl0IGVuYWJsZWQuIFNpbmNlIEdWRSBpcyByZWFjaGFibGUgYW5kIGFjdGl2ZWx5IHVzZWQgaW4gR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODoyNC4wNjkyMDgxMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjQzMzk2NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MjQuMDY5NjcwNDgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NjQyOTI5MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJbiBgZ3ZlX3B0cC5jYCwgaXQgYWRkcyBhIHN0dWIgZm9yIGBhZGpmaW5lYCAoYGd2ZV9wdHBfYWRqZmluZWApIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUFRQIGNvcmUgKGBwdHBfY2xvY2tfYWRqdGltZWApIHdoZW4gYG9wcy1cXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXFxuMi4gSW4gYGd2ZV9yeF9kcW8uY2AsIGl0IGFkZHMgYSBjaGVjayB0byByZXR1cm4gZWFybHkgYW5kIGZyZWUgdGhlIGJ1ZmZlciBpZiBgYnVmX2xlbmAgaXMgMC4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgZHJpdmVyIGNvdWxkIGFwcGVuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IHRvIGFuIHNrYiBvciBwYXNzIGEgMC1sZW5ndGggYnVmZmVyIHRvIGFuIFhEUCBwcm9ncmFtLiBBIDAtbGVuZ3RoIGZyYWdtZW50IGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBpdHMgbGVuZ3RoIGlzIDAsIG1lYW5pbmcgbm8gYnl0ZXMgZnJvbSB0aGUgZnJhZ21lbnQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCBieSB0aGUgbmV0d29yayBzdGFjay4gQW55IG91dC1vZi1ib3VuZHMgcmVhZHMgY2F1c2VkIGJ5IFhEUCBwcm9ncmFtcyBvciB0aGUgbmV0d29yayBzdGFjayBhc3N1bWluZyBhIG1pbmltdW0gZnJhZ21lbnQgbGVuZ3RoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkxNmM0MDI4NmU1ZTExY2NhZTg1MmRlN2NkMTFlYmIyNDBlM2VhNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIzOjI2OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xuaW5kZXggMDZiMWNmNGE1ZWZjYy4uMWQ2YzU5ZjRlYWQzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9wdHAuY1xuQEAgLTI2LDYgKzI2LDExIEBAIGludCBndmVfY2xvY2tfbmljX3RzX3JlYWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZ3ZlX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbiBzdGF0aWMgaW50IGd2ZV9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4gXHRcdFx0ICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuQEAgLTYwLDYgKzY1LDcgQEAgc3RhdGljIGxvbmcgZ3ZlX3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBndmVfcHRwX2NhcHMgPSB7XG4gXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbiBcdC5uYW1lXHRcdD0gXCJndmUgY2xvY2tcIixcbitcdC5hZGpmaW5lXHQ9IGd2ZV9wdHBfYWRqZmluZSxcbiBcdC5nZXR0aW1leDY0XHQ9IGd2ZV9wdHBfZ2V0dGltZXg2NCxcbiBcdC5zZXR0aW1lNjRcdD0gZ3ZlX3B0cF9zZXR0aW1lNjQsXG4gXHQuZG9fYXV4X3dvcmtcdD0gZ3ZlX3B0cF9kb19hdXhfd29yayxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5pbmRleCA4MjcxZjczMWE5MWZjLi4wZWNlMmY2ZmRmZmI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5AQCAtODg2LDYgKzg4NiwxMSBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuIFx0XHRyeC1cdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcbiBcdFx0cngtXHUwMDNlcnhfaHNwbGl0X2J5dGVzICs9IGhkcl9sZW47XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4LVx1MDAzZXN0YXRzcyk7XG4rXG4rXHRcdGlmICghYnVmX2xlbikge1xuK1x0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fSBlbHNlIGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkIFx1MDAyNlx1MDAyNiByeC1cdTAwM2VkcW8ucGFnZV9wb29sIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBuZXRtZW1faXNfbmV0X2lvdihidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcbiBcdFx0Lyogd2hlbiBoZWFkZXIgc3BsaXQgaXMgZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2VudCB0byB0aGUgcGFja2V0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODoyNC4wNjk2NzE0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyNDA5NjM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIuIEl0J3MgdG91Y2hpbmcgYGd2ZV9wdHAuY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBUaGUgYGd2ZV9wdHAuY2AgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgYGd2ZV9wdHBfYWRqZmluZWAgZnVuY3Rpb24gdGhhdCBqdXN0IHJldHVybnMgYC1FT1BOT1RTVVBQYCBhbmQgcmVnaXN0ZXJpbmcgaXQuIE5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGp1c3QgYSBwbGFjZWhvbGRlciBvciBzdHViLCBpdCBzZWVtcy5cblxuVGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCBpcyBpbiBgZ3ZlX3J4X2Rxby5jYC4gSSBzZWUgdGhlIGBndmVfcnhfZHFvYCBmdW5jdGlvbiBiZWluZyBtb2RpZmllZC4gVGhlcmUncyB0aGlzIG5ldyBjaGVjayBhZGRlZDogYGlmICghYnVmX2xlbilgLiBJdCdzIGEgY29uZGl0aW9uYWwgYWZ0ZXIgc29tZSBzdGF0aXN0aWNzIHVwZGF0ZXMsIGFuZCwgaWYgYGJ1Zl9sZW5gIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IGZyZWVzIHRoZSBidWZmZXIgdXNpbmcgYGd2ZV9mcmVlX2J1ZmZlcmAgYW5kIHJldHVybnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGhhcyB0byBiZSBmaXhpbmcgYSBidWcuIEEgemVybyBgYnVmX2xlbmAgbGlrZWx5IGluZGljYXRlcyBzb21ldGhpbmcgd2VudCB3cm9uZyBlYXJsaWVyIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgcGVyaGFwcy4gSXQncyBhIGNsYXNzaWMgc2NlbmFyaW86IHRoZSBjb2RlIG1pZ2h0IGhhdmUgYmVlbiBwcm9jZWVkaW5nIGFzIGlmIHRoZXJlIHdhcyBhIHZhbGlkIGRhdGEgYnVmZmVyIHdoZW4gdGhlcmUgd2FzIG5vbmUuIFRoaXMgY291bGQgbWFuaWZlc3QgaW4gdmFyaW91cyB3YXlzIGRvd24gdGhlIGxpbmU6IGNyZWF0aW5nIGFuIGVtcHR5IFNLQiBmcmFnbWVudCwgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgZGFuZ2Vyb3VzIG91dC1vZi1ib3VuZHMgcmVhZCwgb3Igd3JpdGUuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqb3IgZXhwb3NlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IElmIGBidWZfbGVuYCBpcyAwLCBpdCBtZWFucyB0aGUgYnVmZmVyIGNvbnRlbnQgaXMgbm90IHZhbGlkLCBhbmQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucyBvbiBpdCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV2ZW4gdHJpZ2dlciBhIGNyYXNoIG9yIGNvcnJ1cHRpb24uIEJlZm9yZSwgaXQgd2FzIHBvdGVudGlhbGx5IHBhc3NpbmcgYSBidWZmZXIgb2YgbGVuZ3RoIHplcm8gdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGlzIHBhdGNoIHdvdWxkIGhhdmUgcHJldmVudGVkIGl0IG5vdy5cblxuSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gdGhpcyBhIGJpdCBkZWVwZXIuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGd2ZV9yeF9kcW8uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4ODYsIHRvIHVuZGVyc3RhbmQgKndoeSogYGJ1Zl9sZW5gIG1pZ2h0IGJlIHplcm8gaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCBjb3VsZCBoYXZlIGJlZW4gaGFwcGVuaW5nIHdpdGggdGhhdCB6ZXJvLWxlbmd0aCBidWZmZXIgYmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHJvb3QgY2F1c2UgaXMgY3J1Y2lhbCB0byBlbnN1cmluZyB0aGlzIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMuIEl0IGZlZWxzIGxpa2UgYSBnb29kIGNhdGNoLCBwb3RlbnRpYWxseSBwcmV2ZW50aW5nIGEgY2xhc3Mgb2YgYnVmZmVyLXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzEuMjkzNzcxMTM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzk1NDM2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX3J4X2Rxb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz03OTM9c3RhdGljIHZvaWQgZ3ZlX2RtYV9zeW5jKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTgxNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo4MTU6c3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy04MTYtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGd2ZV9yeF9jb21wbF9kZXNjX2RxbyAqY29tcGxfZGVzYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwODA9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExMTk6XFx0XFx0ZXJyID0gZ3ZlX3J4X2RxbyhuYXBpLCByeCwgY29tcGxfZGVzYywgY29tcGxxLVxcdTAwM2VoZWFkLCByeC1cXHUwMDNlcV9udW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTExMjAtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzEuNjMzMzI3OTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjI0NzA4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGd2ZV9yeF9kcW8uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZ3ZlX3J4X2Rxby5jYCBmaWxlLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgODg2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBsaWtlbHkgaG91c2VzIHRoZSBjb2RlIEknbSBpbnRlcmVzdGVkIGluLCBnaXZlbiBteSBjdXJyZW50IG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGFueSByZWxhdGVkIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgbGFzdCB0aW1lIEkgbG9va2VkIGludG8gdGhpcyBtb2R1bGUgLSB3aGVyZSBkaWQgSSBsZWF2ZSBvZmY/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBiZWZvcmUgZGl2aW5nIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzQuMzU1ODAxMzc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdGlmIChidWZfc3RhdGUtXFx1MDAzZXhza19idWZmKVxcbiA4NTE6XFx0XFx0XFx0cmV0dXJuIGd2ZV9yeF94c2tfZHFvKG5hcGksIHJ4LCBjb21wbF9kZXNjLCBidWZfc3RhdGUsIHhwcm9nKTtcXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0LyogUGFnZSBtaWdodCBoYXZlIG5vdCBiZWVuIHVzZWQgZm9yIGF3aGlsZSBhbmQgd2FzIGxpa2VseSBsYXN0IHdyaXR0ZW5cXG4gODU0OlxcdFxcdCAqIGJ5IGEgZGlmZmVyZW50IHRocmVhZC5cXG4gODU1OlxcdFxcdCAqL1xcbiA4NTY6XFx0XFx0aWYgKHJ4LVxcdTAwM2VkcW8ucGFnZV9wb29sKSB7XFxuIDg1NzpcXHRcXHRcXHRpZiAoIW5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpXFxuIDg1ODpcXHRcXHRcXHRcXHRwcmVmZXRjaChuZXRtZW1fdG9fcGFnZShidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5uZXRtZW0pKTtcXG4gODU5OlxcdFxcdH0gZWxzZSB7XFxuIDg2MDpcXHRcXHRcXHRwcmVmZXRjaChidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWdlKTtcXG4gODYxOlxcdFxcdH1cXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0LyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYiBpbiB0aGUgY2FzZSBvZiBoZWFkZXIgc3BsaXQgKi9cXG4gODY0OlxcdFxcdGlmIChoc3BsaXQpIHtcXG4gODY1OlxcdFxcdFxcdGludCB1bnNwbGl0ID0gMDtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0XFx0aWYgKGhkcl9sZW4gXFx1MDAyNlxcdTAwMjYgIWhibykge1xcbiA4Njg6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHQoc2l6ZV90KWJ1ZmZlcl9pZCAqIHByaXYtXFx1MDAzZWhlYWRlcl9idWZfc2l6ZTtcXG4gODcwOlxcdFxcbiA4NzE6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZCA9XFxuIDg3MjpcXHRcXHRcXHRcXHRcXHRndmVfcnhfY29weV9kYXRhKHByaXYtXFx1MDAzZWRldiwgbmFwaSxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCByeC1cXHUwMDNlZHFvLmhkcl9idWZzLmRhdGEgKyBvZmZzZXQsXFxuIDg3NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyX2xlbik7XFxuIDg3NTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQpKVxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gODc3OlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgPSByeC1cXHUwMDNlY3R4LnNrYl9oZWFkO1xcbiA4Nzg6XFx0XFxuIDg3OTpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZWRxby5wYWdlX3Bvb2wpXFxuIDg4MDpcXHRcXHRcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKTtcXG4gODgxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MjpcXHRcXHRcXHRcXHR1bnNwbGl0ID0gMTtcXG4gODgzOlxcdFxcdFxcdH1cXG4gODg0OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA4ODU6XFx0XFx0XFx0cngtXFx1MDAzZXJ4X2hzcGxpdF9wa3QrKztcXG4gODg2OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfdW5zcGxpdF9wa3QgKz0gdW5zcGxpdDtcXG4gODg3OlxcdFxcdFxcdHJ4LVxcdTAwM2VyeF9oc3BsaXRfYnl0ZXMgKz0gaGRyX2xlbjtcXG4gODg4OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeC1cXHUwMDNlc3RhdHNzKTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0XFx0aWYgKCFidWZfbGVuKSB7XFxuIDg5MTpcXHRcXHRcXHRcXHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XFxuIDg5MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH0gZWxzZSBpZiAoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQgXFx1MDAyNlxcdTAwMjYgcngtXFx1MDAzZWRxby5wYWdlX3Bvb2wgXFx1MDAyNlxcdTAwMjZcXG4gODk1OlxcdFxcdFxcdCAgIG5ldG1lbV9pc19uZXRfaW92KGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLm5ldG1lbSkpIHtcXG4gODk2OlxcdFxcdFxcdC8qIHdoZW4gaGVhZGVyIHNwbGl0IGlzIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdlbnQgdG8gdGhlIHBhY2tldFxcbiA4OTc6XFx0XFx0XFx0ICogYnVmZmVyLiBJZiB0aGUgcGFja2V0IGJ1ZmZlciBpcyBhIG5ldF9pb3YsIHRob3NlIGNhbid0IGJlXFxuIDg5ODpcXHRcXHRcXHQgKiBlYXNpbHkgbWFwcGVkIGludG8gdGhlIGtlcm5lbCBzcGFjZSB0byBhY2Nlc3MgdGhlIGhlYWRlclxcbiA4OTk6XFx0XFx0XFx0ICogcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxcbiA5MDA6XFx0XFx0XFx0ICovXFxuIDkwMTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MDI6XFx0XFx0fVxcbiA5MDM6XFx0XFxuIDkwNDpcXHRcXHQvKiBTeW5jIHRoZSBwb3J0aW9uIG9mIGRtYSBidWZmZXIgZm9yIENQVSB0byByZWFkLiAqL1xcbiA5MDU6XFx0XFx0Z3ZlX2RtYV9zeW5jKHByaXYsIHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHQvKiBBcHBlbmQgdG8gY3VycmVudCBza2IgaWYgb25lIGV4aXN0cy4gKi9cXG4gOTA4OlxcdFxcdGlmIChyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKSB7XFxuIDkwOTpcXHRcXHRcXHRpZiAodW5saWtlbHkoZ3ZlX3J4X2FwcGVuZF9mcmFncyhuYXBpLCBidWZfc3RhdGUsIGJ1Zl9sZW4sIHJ4LFxcbiA5MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHByaXYpKSAhPSAwKSB7XFxuIDkxMTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MTI6XFx0XFx0XFx0fVxcbiA5MTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDkxNDpcXHRcXHR9XFxuIDkxNTpcXHRcXG4gOTE2OlxcdFxcdGlmICh4cHJvZykge1xcbiA5MTc6XFx0XFx0XFx0c3RydWN0IGd2ZV94ZHBfYnVmZiBndmVfeGRwO1xcbiA5MTg6XFx0XFx0XFx0dm9pZCAqb2xkX2RhdGE7XFxuIDkxOTpcXHRcXHRcXHRpbnQgeGRwX2FjdDtcXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0XFx0eGRwX2luaXRfYnVmZihcXHUwMDI2Z3ZlX3hkcC54ZHAsIGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplLFxcbiA5MjI6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnJ4LVxcdTAwM2V4ZHBfcnhxKTtcXG4gOTIzOlxcdFxcdFxcdHhkcF9wcmVwYXJlX2J1ZmYoXFx1MDAyNmd2ZV94ZHAueGRwLFxcbiA5MjQ6XFx0XFx0XFx0XFx0XFx0IGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLnBhZ2VfYWRkcmVzcyArXFxuIDkyNTpcXHRcXHRcXHRcXHRcXHQgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFnZV9vZmZzZXQsXFxuIDkyNjpcXHRcXHRcXHRcXHRcXHQgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFkLFxcbiA5Mjc6XFx0XFx0XFx0XFx0XFx0IGJ1Zl9sZW4sIGZhbHNlKTtcXG4gOTI4OlxcdFxcdFxcdGd2ZV94ZHAuZ3ZlID0gcHJpdjtcXG4gOTI5OlxcdFxcdFxcdGd2ZV94ZHAuY29tcGxfZGVzYyA9IGNvbXBsX2Rlc2M7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdFxcdG9sZF9kYXRhID0gZ3ZlX3hkcC54ZHAuZGF0YTtcXG4gOTMyOlxcdFxcdFxcdHhkcF9hY3QgPSBicGZfcHJvZ19ydW5feGRwKHhwcm9nLCBcXHUwMDI2Z3ZlX3hkcC54ZHApO1xcbiA5MzM6XFx0XFx0XFx0YnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFkICs9IGd2ZV94ZHAueGRwLmRhdGEgLSBvbGRfZGF0YTtcXG4gOTM0OlxcdFxcdFxcdGJ1Zl9sZW4gPSBndmVfeGRwLnhkcC5kYXRhX2VuZCAtIGd2ZV94ZHAueGRwLmRhdGE7XFxuIDkzNTpcXHRcXHRcXHRpZiAoeGRwX2FjdCAhPSBYRFBfUEFTUykge1xcbiA5MzY6XFx0XFx0XFx0XFx0Z3ZlX3hkcF9kb25lX2Rxbyhwcml2LCByeCwgXFx1MDAyNmd2ZV94ZHAueGRwLCB4cHJvZywgeGRwX2FjdCxcXG4gOTM3OlxcdFxcdFxcdFxcdFxcdFxcdCBidWZfc3RhdGUpO1xcbiA5Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDkzOTpcXHRcXHRcXHR9XFxuIDk0MDpcXHRcXG4gOTQxOlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA5NDI6XFx0XFx0XFx0cngtXFx1MDAzZXhkcF9hY3Rpb25zW1hEUF9QQVNTXSsrO1xcbiA5NDM6XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4LVxcdTAwM2VzdGF0c3MpO1xcbiA5NDQ6XFx0XFx0fVxcbiA5NDU6XFx0XFxuIDk0NjpcXHRcXHRpZiAoZW9wIFxcdTAwMjZcXHUwMDI2IGJ1Zl9sZW4gXFx1MDAzYz0gcHJpdi1cXHUwMDNlcnhfY29weWJyZWFrIFxcdTAwMjZcXHUwMDI2XFxuIDk0NzpcXHRcXHQgICAgIShyeC1cXHUwMDNlZHFvLnBhZ2VfcG9vbCBcXHUwMDI2XFx1MDAyNlxcbiA5NDg6XFx0XFx0ICAgICAgbmV0bWVtX2lzX25ldF9pb3YoYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ubmV0bWVtKSkpIHtcXG4gOTQ5OlxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX2hlYWQgPSBndmVfcnhfY29weShwcml2LVxcdTAwM2VkZXYsIG5hcGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjM0LjM1NTk2NjQ4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI0NTE0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGBndmVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUlggcGF0aC4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGhhbmRsaW5nIGEgYGJ1Zl9sZW5gIG9mIHplcm8sIHdoaWNoIHNlZW1zIHRvIGluZGljYXRlIGFuIGVtcHR5IGJ1ZmZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd2Fzbid0IGdyYWNlZnVsbHkgaGFuZGxpbmcgdGhpcyBlZGdlIGNhc2UuXG5cbkxvb2tpbmcgYXQgdGhlIGFkZGVkIGNvZGUsIHRoZSBjcnVjaWFsIGxpbmUgaXMgYGlmICghYnVmX2xlbikgeyBndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7IHJldHVybiAwOyB9YC4gIFRoaXMgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIGEgc2hvcnQtY2lyY3VpdC4gSWYgYGJ1Zl9sZW5gIGlzIHplcm8sIG1lYW5pbmcgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgd2UgZnJlZSBpdCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZXJlJ3Mgbm8gZGF0YSB0byBwcm9jZXNzLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY29udGludWUgZG93biB0aGUgcGF0aC5cblxuQmVmb3JlIHRoaXMgZml4LCBob3dldmVyLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB0aGUgY29kZSB3b3VsZCBwcm9jZWVkIGV2ZW4gd2hlbiBgYnVmX2xlbmAgd2FzIHplcm8uIEl0IHdvdWxkIGNhbGwgYGd2ZV9kbWFfc3luYyhwcml2LCByeCwgYnVmX3N0YXRlLCBidWZfbGVuKWAuICBUZWNobmljYWxseSwgc3luY2luZyB6ZXJvIGJ5dGVzIHNob3VsZG4ndCBiZSAqaGFybWZ1bCogcGVyIHNlLCBidXQgaXQncyBjbGVhcmx5IHVubmVjZXNzYXJ5IG92ZXJoZWFkLiBJdCdzIGEgd2FzdGUgb2YgY3ljbGVzLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBoaWdoLXRocm91Z2hwdXQgbmV0d29yayB0cmFmZmljLiBUaGVuIHRoZSBjb2RlIHdvdWxkIG1vdmUgdG8gYGd2ZV9yeF9hcHBlbmRfZnJhZ3MobmFwaSwgYnVmX3N0YXRlLCBidWZfbGVuLCByeCwgcHJpdilgLiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBTaW5jZSB0aGUgcHJldmlvdXMgY2FsbCBoYXBwZW5lZCB3aGVuIGBidWZfbGVuYCB3YXMgemVybywgSSdtIG5vdyBjdXJpb3VzOiB3aGF0IGRvZXMgYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgIGFjdHVhbGx5ICpkbyogd2l0aCBhIHplcm8tbGVuZ3RoIGJ1ZmZlcj8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIGdyYWNlZnVsIGhhbmRsaW5nIGZvciBhbiBlbXB0eSBidWZmZXIgb3IgaWYgaXQgd291bGQgY2F1c2UgaXNzdWVzIGRvd25zdHJlYW0uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgb3JpZ2luYWwgcHJvYmxlbSBhbmQgdGhlIHBhdGNoJ3MgaW1wcm92ZW1lbnQ6IGlzIHRoZSBwYXRjaCBqdXN0IGEgbWljcm8tb3B0aW1pemF0aW9uIG9yIGlzIGl0IGZpeGluZyBhIHN1YnRsZSBidWc/IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg0MiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjM5LjU4MDQ4Mzc2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MjQ3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX3J4X2FwcGVuZF9mcmFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz01ODM9c3RhdGljIHZvaWQgZ3ZlX3NrYl9hZGRfcnhfZnJhZyhzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjA0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjYwNTpzdGF0aWMgaW50IGd2ZV9yeF9hcHBlbmRfZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTYwNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvICpidWZfc3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz04MTU9c3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkwOC1cXHRpZiAocngtXFx1MDAzZWN0eC5za2JfaGVhZCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkwOTpcXHRcXHRpZiAodW5saWtlbHkoZ3ZlX3J4X2FwcGVuZF9mcmFncyhuYXBpLCBidWZfc3RhdGUsIGJ1Zl9sZW4sIHJ4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkxMC1cXHRcXHRcXHRcXHRcXHRcXHQgcHJpdikpICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjg6MzkuNjI1MDExMTgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzExMjQ1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2A6XG5cbioqRGlzc2VjdGluZyBgZ3ZlX3J4X2FwcGVuZF9mcmFnc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBCYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YSBmcmFnbWVudHMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdWRSBkcml2ZXIuIFByb2JhYmx5IGhhbmRsaW5nIHJlYXNzZW1ibHkgb3IgYnVmZmVyIG1hbmFnZW1lbnQgb2Ygc29tZSBraW5kLiBHaXZlbiBpdCdzIGFwcGVuZGluZyBmcmFnbWVudHMsIG15IGluaXRpYWwgZ3Vlc3MgaXMgaXQncyBvcGVyYXRpbmcgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcmVjZWl2ZSBwYXRoLCBhZnRlciBzb21lIGluaXRpYWwgcGFja2V0IHByb2Nlc3NpbmcsIHBlcmhhcHMuIEknbGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgdG8gYmUgY2VydGFpbiwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0byBncmFzcCB0aGUgbWVtb3J5IG1vZGVsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyB3YW50IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIHRvIGFzc2VzcyBwb3RlbnRpYWwgaXNzdWVzIGFuZCBvcHRpbWl6YXRpb25zLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIERNQSBvciBpcyB1c2luZyBzaGFyZWQgbWVtb3J5IGJ1ZmZlcnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI4OjQzLjY1NjEzODgwOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA1OlxcdHN0YXRpYyBpbnQgZ3ZlX3J4X2FwcGVuZF9mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIDYwNjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvICpidWZfc3RhdGUsXFxuIDYwNzpcXHRcXHRcXHRcXHQgICAgICAgdTE2IGJ1Zl9sZW4sIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuIDYwODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbiA2MDk6XFx0e1xcbiA2MTA6XFx0XFx0aW50IG51bV9mcmFncyA9IHNrYl9zaGluZm8ocngtXFx1MDAzZWN0eC5za2JfdGFpbCktXFx1MDAzZW5yX2ZyYWdzO1xcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHRpZiAodW5saWtlbHkobnVtX2ZyYWdzID09IE1BWF9TS0JfRlJBR1MpKSB7XFxuIDYxMzpcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2MTQ6XFx0XFxuIDYxNTpcXHRcXHRcXHRza2IgPSBuYXBpX2FsbG9jX3NrYihuYXBpLCAwKTtcXG4gNjE2OlxcdFxcdFxcdGlmICghc2tiKVxcbiA2MTc6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRcXHRpZiAocngtXFx1MDAzZWRxby5wYWdlX3Bvb2wpXFxuIDYyMDpcXHRcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRcXHRpZiAocngtXFx1MDAzZWN0eC5za2JfdGFpbCA9PSByeC1cXHUwMDNlY3R4LnNrYl9oZWFkKVxcbiA2MjM6XFx0XFx0XFx0XFx0c2tiX3NoaW5mbyhyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKS1cXHUwMDNlZnJhZ19saXN0ID0gc2tiO1xcbiA2MjQ6XFx0XFx0XFx0ZWxzZVxcbiA2MjU6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfdGFpbC1cXHUwMDNlbmV4dCA9IHNrYjtcXG4gNjI2OlxcdFxcdFxcdHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgPSBza2I7XFxuIDYyNzpcXHRcXHRcXHRudW1fZnJhZ3MgPSAwO1xcbiA2Mjg6XFx0XFx0fVxcbiA2Mjk6XFx0XFx0aWYgKHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwgIT0gcngtXFx1MDAzZWN0eC5za2JfaGVhZCkge1xcbiA2MzA6XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZC1cXHUwMDNlbGVuICs9IGJ1Zl9sZW47XFxuIDYzMTpcXHRcXHRcXHRyeC1cXHUwMDNlY3R4LnNrYl9oZWFkLVxcdTAwM2VkYXRhX2xlbiArPSBidWZfbGVuO1xcbiA2MzI6XFx0XFx0XFx0cngtXFx1MDAzZWN0eC5za2JfaGVhZC1cXHUwMDNldHJ1ZXNpemUgKz0gYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8uYnVmX3NpemU7XFxuIDYzMzpcXHRcXHR9XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdC8qIFRyaWdnZXIgb25kZW1hbmQgcGFnZSBhbGxvY2F0aW9uIGlmIHdlIGFyZSBydW5uaW5nIGxvdyBvbiBidWZmZXJzICovXFxuIDYzNjpcXHRcXHRpZiAoZ3ZlX3J4X3Nob3VsZF90cmlnZ2VyX2NvcHlfb25kZW1hbmQocngpKVxcbiA2Mzc6XFx0XFx0XFx0cmV0dXJuIGd2ZV9yeF9jb3B5X29uZGVtYW5kKHJ4LCBidWZfc3RhdGUsIGJ1Zl9sZW4pO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRndmVfc2tiX2FkZF9yeF9mcmFnKHJ4LCBidWZfc3RhdGUsIG51bV9mcmFncywgYnVmX2xlbik7XFxuIDY0MDpcXHRcXHRndmVfcmV1c2VfYnVmZmVyKHJ4LCBidWZfc3RhdGUpO1xcbiA2NDE6XFx0XFx0cmV0dXJuIDA7XFxuIDY0MjpcXHR9XFxuIDY0MzpcXHRcXG4gNjQ0OlxcdHN0YXRpYyBpbnQgZ3ZlX3hkcF90eF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbiA2NDU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4gNjQ2OlxcdHtcXG4gNjQ3OlxcdFxcdHN0cnVjdCBndmVfdHhfcmluZyAqdHg7XFxuIDY0ODpcXHRcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xcbiA2NDk6XFx0XFx0dTMyIHR4X3FpZDtcXG4gNjUwOlxcdFxcdGludCBlcnI7XFxuIDY1MTpcXHRcXG4gNjUyOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuIDY1MzpcXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuIDY1NDpcXHRcXHRcXHRpZiAocngtXFx1MDAzZXhza19wb29sKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODo0My42NTYyNjU2OTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMjUxMjc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIFplcm8tTGVuZ3RoIEZyYWdtZW50IFNjZW5hcmlvIGluIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY2FzZSB3aGVyZSBgYnVmX2xlbmAgaXMgemVybyB3aXRoaW4gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW1wbGljYXRpb24gb2YgYWRkaW5nIGEgemVyby1sZW5ndGggZnJhZ21lbnQuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYWRkIGEgemVyby1sZW5ndGggZnJhZ21lbnQgd2hlbiBgYnVmX2xlbmAgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvci5cblxuT2theSwgbGV0IG1lIGNsYXJpZnk6IGBndmVfcnhfYXBwZW5kX2ZyYWdzYCAqZG9lcyogY2FsbCBgZ3ZlX3NrYl9hZGRfcnhfZnJhZyhyeCwgYnVmX3N0YXRlLCBudW1fZnJhZ3MsIDApYCBpZiBgYnVmX2xlbmAgaXMgemVyby4gVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyBgZ3ZlX3NrYl9hZGRfcnhfZnJhZ2AgaGFuZGxlcyB0aGF0IHplcm8gbGVuZ3RoLiBJJ3ZlIGdvdCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIHRvIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiBpdCBnZXRzIGEgemVybyBsZW5ndGggdmFsdWUuIFRoYXQncyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODo0Ny40NTg3ODE3MTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MzpcXHRzdGF0aWMgdm9pZCBndmVfc2tiX2FkZF9yeF9mcmFnKHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuIDU4NDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ3ZlX3J4X2J1Zl9zdGF0ZV9kcW8gKmJ1Zl9zdGF0ZSxcXG4gNTg1OlxcdFxcdFxcdFxcdFxcdGludCBudW1fZnJhZ3MsIHUxNiBidWZfbGVuKVxcbiA1ODY6XFx0e1xcbiA1ODc6XFx0XFx0aWYgKHJ4LVxcdTAwM2VkcW8ucGFnZV9wb29sKSB7XFxuIDU4ODpcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWdfbmV0bWVtKHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwsIG51bV9mcmFncyxcXG4gNTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5uZXRtZW0sXFxuIDU5MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFnZV9vZmZzZXQgK1xcbiA1OTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLnBhZCwgYnVmX2xlbixcXG4gNTkyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5idWZfc2l6ZSk7XFxuIDU5MzpcXHRcXHR9IGVsc2Uge1xcbiA1OTQ6XFx0XFx0XFx0c2tiX2FkZF9yeF9mcmFnKHJ4LVxcdTAwM2VjdHguc2tiX3RhaWwsIG51bV9mcmFncyxcXG4gNTk1OlxcdFxcdFxcdFxcdFxcdGJ1Zl9zdGF0ZS1cXHUwMDNlcGFnZV9pbmZvLnBhZ2UsXFxuIDU5NjpcXHRcXHRcXHRcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWdlX29mZnNldCArXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWQsIGJ1Zl9sZW4sXFxuIDU5ODpcXHRcXHRcXHRcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5idWZfc2l6ZSk7XFxuIDU5OTpcXHRcXHR9XFxuIDYwMDpcXHR9XFxuIDYwMTpcXHRcXG4gNjAyOlxcdC8qIENoYWlucyBtdWx0aSBza2JzIGZvciBzaW5nbGUgcnggcGFja2V0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyODo0Ny40NTg5MTM3NjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2OTk5MzM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJc3N1ZXMgd2l0aCBaZXJvLUxlbmd0aCBCdWZmZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgaXQgaGFuZGxlcyBgYnVmX2xlbiA9IDBgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgemVyby1sZW5ndGggZnJhZ21lbnQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgc2luY2Ugbm8gZGF0YSBpcyBjb3BpZWQsIHRoYXQncyBub3QgYSBjb25jZXJuLiBIb3dldmVyLCBpZiBgYnVmX2xlbmAgaXMgemVybyBidXQgc29tZWhvdyBjb250cmlidXRlcyB0byB0aGUgY2FsY3VsYXRpb24gb2YgYHRydWVzaXplYCBsYXRlciwgdGhhdCB3b3VsZCBiZSBhbiBpbnRlcmVzdGluZyB0aGluZyB0byBpbnZlc3RpZ2F0ZSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24uXG5cblRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYSB6ZXJvLWxlbmd0aCBmcmFnbWVudCAqY291bGQqIHdyZWFrIGhhdm9jIG9uIHRoZSBuZXR3b3JrIHN0YWNrIGluIGEgbW9yZSBnZW5lcmFsIHNlbnNlLCBsZWFkaW5nIHRvIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3JzLCBvdXQtb2YtYm91bmRzIHJlYWRzLCBvciBvdGhlciBpc3N1ZXMgaWYgdGhlIGNvZGUgYXNzdW1lcyBhbGwgZnJhZ21lbnRzIGhhdmUgYSBsZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIE5vdCBuZWNlc3NhcmlseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgYnV0IGEgYnVnIG5vbmV0aGVsZXNzLlxuXG5Pa2F5LCBsZXQncyBsb29rIGNsb3NlbHkgYXQgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyBpZiBgaHNwbGl0YCBpcyB0cnVlLCBhbmQgYGJ1Zl9sZW5gIGlzIHplcm8sIGBndmVfZnJlZV9idWZmZXJgIGlzIGNhbGxlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgSWYgYGhzcGxpdGAgaXMgc2V0LCBpdCBtZWFucyBhIGhlYWRlciBzcGxpdCBoYXMgb2NjdXJyZWQsIGFuZCB0aGUgaGVhZGVyIGhhcyBiZWVuIGNvcGllZCBpbnRvIGByeC1cdTAwM2VjdHguc2tiX2hlYWRgLiBUaGUgZmFjdCB0aGF0IHdlIHJldHVybiAwIGVhcmx5IGlmIGBidWZfbGVuYCBpcyB6ZXJvIG1lYW5zIHRoZXJlIGlzIG5vIGRhdGEgcGF5bG9hZCBpbiB0aGlzIGJ1ZmZlci4gSWYgd2UgKmRpZG4ndCogcmV0dXJuLCB0aGUgY29kZSB3b3VsZCBzeW5jIHRoZSBETUEgYnVmZmVyLCBhbmQgdGhlbiwgaWYgYHJ4LVx1MDAzZWN0eC5za2JfaGVhZGAgZXhpc3RzLCBhcHBlbmQgYSB6ZXJvLWxlbmd0aCBmcmFnbWVudC4gSG1tLCB3aGF0IGlmIGBoZHJfbGVuIFx1MDAyNlx1MDAyNiAhaGJvYCBpcyBmYWxzZT8gIFRoZW4gYHJ4LVx1MDAzZWN0eC5za2JfaGVhZGAgKm1pZ2h0KiBiZSBOVUxMIGFuZCB0aGUgYGlmIChyeC1cdTAwM2VjdHguc2tiX2hlYWQpYCB3b3VsZCBiZSBza2lwcGVkLlxuXG5JZiB3ZSAqc2tpcCogdGhlIGFwcGVuZGluZywgaXQgd291bGQgdGhlbiBqdW1wIHRvIHRoZSB4ZHAgY29kZS4gVGhlIGNvbmNlcm4gaXM6IGlmIGBidWZfbGVuYCBpcyAwLCB0aGVuIHRoZSBgeGRwX3ByZXBhcmVfYnVmZmAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYGJ1Zl9sZW4gPSAwYC4gIFRoaXMgbWVhbnMgdGhlIEJQRiBwcm9ncmFtIG1pZ2h0IHRoZW4gcnVuIG9uIGEgemVyby1sZW5ndGggYnVmZmVyISBUaGF0IHNvdW5kcyByaXNreSwgYXMgdGhlIEJQRiBjb2RlIG1pZ2h0IGFzc3VtZSBhIG1pbmltdW0gcGFja2V0IGxlbmd0aCwgbGlrZSBmb3IgdGhlIEV0aGVybmV0IGhlYWRlciwgd2hpY2ggd291bGQgdHJpZ2dlciBvdXQtb2YtYm91bmRzIHJlYWRzLiBLQVNBTiAqc2hvdWxkKiBjYXRjaCB0aGlzLCBidXQgdGhhdCdzIHNvbWV0aGluZyB0byB2ZXJpZnkuXG5cblRoZXJlJ3MgYWxzbyB0aGUgYGVvcGAgY2FzZSwgYW5kIGlmIGBidWZfbGVuYCBpcyAwLCB0aGUgYGd2ZV9yeF9jb3B5YCBpcyBjYWxsZWQgd2l0aCBgYnVmX2xlbiA9IDBgLiBUaGlzIGFsbG9jYXRlcyBhbiBza2IgYW5kIGNvcGllcyAwIGJ5dGVzLCB0aGVuIHJldHVybnMuIEFnYWluLCBubyBtZW1vcnkgaXNzdWUuXG5cbk5vdywgd2FpdC4uLiBldmVuIGlmIGBidWZfbGVuYCBpcyAwLCBpcyB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQ/ICBBZ2Fpbiwgbm8gYnl0ZXMgYXJlIGNvcGllZCwgc28gbm8gcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkZpbmFsbHksIEkgbm90aWNlIHRoZSBpbmNsdXNpb24gb2YgYGd2ZV9wdHBfYWRqZmluZWAuIFRoaXMgc2VlbXMgdG8gYmUgYSBtaXNzaW5nIGZ1bmN0aW9uIHBvaW50ZXIuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gaXQgYW5kIGl0J3MgbnVsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMzoyOTowMy4xNTg4NTAzNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQ1NDcyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRqZmluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmM9MTIyPXN0YXRpYyBpbnQgcHRwX2Nsb2NrX2FkanRpbWUoc3RydWN0IHBvc2l4X2Nsb2NrICpwYywgc3RydWN0IF9fa2VybmVsX3RpbWV4ICp0eClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2NC1cXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2suYzoxNjU6XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VhZGpmaW5lKG9wcywgdHgtXFx1MDAzZWZyZXEpO1xcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTE2Ni1cXHRcXHRpZiAoIWVycilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTM2PW1vZHVsZV9wYXJhbShmaXJtd2FyZSwgY2hhcnAsIDApO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtNDAtXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6NDE6c3RhdGljIGludCBfaWR0Y21fYWRqZmluZShzdHJ1Y3QgaWR0Y21fY2hhbm5lbCAqY2hhbm5lbCwgbG9uZyBzY2FsZWRfcHBtKTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy00Mi1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTE1MDc9c3RhdGljIGludCBpZHRjbV9zdG9wX3BoYXNlX3B1bGxfaW4oc3RydWN0IGlkdGNtX2NoYW5uZWwgKmNoYW5uZWwpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xNTEwLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE1MTE6XFx0ZXJyID0gX2lkdGNtX2FkamZpbmUoY2hhbm5lbCwgY2hhbm5lbC1cXHUwMDNlY3VycmVudF9mcmVxX3NjYWxlZF9wcG0pO1xcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE1MTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTE1NTM9c3RhdGljIGludCBkb19waGFzZV9wdWxsX2luX3N3KHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4MS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxNTgyOlxcdGVyciA9IF9pZHRjbV9hZGpmaW5lKGNoYW5uZWwsIGRlbHRhX3BwbSk7XFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTU4My1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTE3MDE9c3RhdGljIGludCBfaWR0Y21fYWRqcGhhc2Uoc3RydWN0IGlkdGNtX2NoYW5uZWwgKmNoYW5uZWwsIHMzMiBkZWx0YV9ucylcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE3MjctXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MTcyODpzdGF0aWMgaW50IF9pZHRjbV9hZGpmaW5lKHN0cnVjdCBpZHRjbV9jaGFubmVsICpjaGFubmVsLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTcyOS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xNzQ5LVxcdCAqXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM6MTc1MDpcXHQgKiBhZGpmaW5lOlxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE3NTEtXFx0ICogICAgICAgcHBtXzE2ICogNV4xMlxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmM9MTg3Nz1zdGF0aWMgaW50IGlkdGNtX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzMzIgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0xODkzLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jOjE4OTQ6c3RhdGljIGludCBpZHRjbV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCAgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE4OTUte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMTkwNi1cXHRtdXRleF9sb2NrKGlkdGNtLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoxOTA3OlxcdGVyciA9IF9pZHRjbV9hZGpmaW5lKGNoYW5uZWwsIHNjYWxlZF9wcG0pO1xcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jLTE5MDgtXFx0bXV0ZXhfdW5sb2NrKGlkdGNtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrbWF0cml4LmMtMjAzNi1cXHQuZ2V0bWF4cGhhc2VcXHQ9IFxcdTAwMjZpZHRjbV9nZXRtYXhwaGFzZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoyMDM3OlxcdC5hZGpmaW5lXFx0PSBcXHUwMDI2aWR0Y21fYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDM4LVxcdC5hZGp0aW1lXFx0PSBcXHUwMDI2aWR0Y21fYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9ja21hdHJpeC5jPTIwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpZHRjbV9jYXBzX2RlcHJlY2F0ZWQgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDU0LVxcdC5nZXRtYXhwaGFzZSAgICA9IFxcdTAwMjZpZHRjbV9nZXRtYXhwaGFzZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYzoyMDU1OlxcdC5hZGpmaW5lXFx0PSBcXHUwMDI2aWR0Y21fYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2ttYXRyaXguYy0yMDU2LVxcdC5hZGp0aW1lXFx0PSBcXHUwMDI2aWR0Y21fYWRqdGltZV9kZXByZWNhdGVkLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYz0yNzA9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkZmxfdG9kX2Nsb2NrX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9kZmxfdG9kLmMtMjczLVxcdC5tYXhfYWRqID0gVE9EX01BWF9BREosXFxuZHJpdmVycy9wdHAvcHRwX2RmbF90b2QuYzoyNzQ6XFx0LmFkamZpbmUgPSBkZmxfdG9kX2FkanVzdF9maW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9kZmxfdG9kLmMtMjc1LVxcdC5hZGp0aW1lID0gZGZsX3RvZF9hZGp1c3RfdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYz0xMTQ9c3RhdGljIHM2NCBkdGVfcmVhZF9uY29fd2l0aF9vdmYoc3RydWN0IHB0cF9kdGUgKnB0cF9kdGUpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMTM1LVxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYzoxMzY6c3RhdGljIGludCBwdHBfZHRlX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMTM3LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYz0yMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfZHRlX2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfZHRlLmMtMjIxLVxcdC5wcHNcXHRcXHQ9IDAsXFxuZHJpdmVycy9wdHAvcHRwX2R0ZS5jOjIyMjpcXHQuYWRqZmluZVxcdD0gcHRwX2R0ZV9hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9kdGUuYy0yMjMtXFx0LmFkanRpbWVcXHQ9IHB0cF9kdGVfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYz00Nzk9c3RhdGljIGludCBpZHRmYzNfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHMzMiBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy00OTAtXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjQ5MTpzdGF0aWMgaW50IF9pZHRmYzNfYWRqZmluZShzdHJ1Y3QgaWR0ZmMzICppZHRmYzMsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNDkyLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MDgtXFx0ICpcXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmM6NTA5OlxcdCAqIGFkamZpbmU6XFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jLTUxMC1cXHQgKiAgICAgICBwcG1fMTYgKiAyXjI4XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTIxLVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYzo1MjI6c3RhdGljIGludCBpZHRmYzNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01MjMte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jLTUyNy1cXHRtdXRleF9sb2NrKGlkdGZjMy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjUyODpcXHRlcnIgPSBfaWR0ZmMzX2FkamZpbmUoaWR0ZmMzLCBzY2FsZWRfcHBtKTtcXG5kcml2ZXJzL3B0cC9wdHBfZmMzLmMtNTI5LVxcdG11dGV4X3VubG9jayhpZHRmYzMtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jPTU5MD1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIGlkdGZjM19jYXBzID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jLTU5Ni1cXHQuYWRqcGhhc2VcXHQ9IFxcdTAwMjZpZHRmYzNfYWRqcGhhc2UsXFxuZHJpdmVycy9wdHAvcHRwX2ZjMy5jOjU5NzpcXHQuYWRqZmluZVxcdD0gXFx1MDAyNmlkdGZjM19hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9mYzMuYy01OTgtXFx0LmFkanRpbWVcXHQ9IFxcdTAwMjZpZHRmYzNfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTUxMD1zdGF0aWMgdm9pZCBpZHQ4MnAzM19hZGp0aW1lX3dvcmthcm91bmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNTIyLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjUyMzpzdGF0aWMgaW50IF9pZHQ4MnAzM19hZGpmaW5lKHN0cnVjdCBpZHQ4MnAzM19jaGFubmVsICpjaGFubmVsLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtNTI0LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTUzNy1cXHQgKlxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjUzODpcXHQgKiBhZGpmaW5lOlxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTUzOS1cXHQgKiAgICAgICBzY2FsZWRfcHBtICogNV4xMiAqIDEwXjVcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU3OT1zdGF0aWMgaW50IGlkdDgycDMzX3N0b3BfZGRjbyhzdHJ1Y3QgaWR0ODJwMzNfY2hhbm5lbCAqY2hhbm5lbClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTU4Mi1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo1ODM6XFx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCwgY2hhbm5lbC1cXHUwMDNlY3VycmVudF9mcmVxKTtcXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy01ODQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTU5Mj1zdGF0aWMgaW50IGlkdDgycDMzX3N0YXJ0X2RkY28oc3RydWN0IGlkdDgycDMzX2NoYW5uZWwgKmNoYW5uZWwsIHMzMiBkZWx0YV9ucylcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jLTYxMi1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYzo2MTM6XFx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCxcXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy02MTQtXFx0XFx0XFx0XFx0aWR0ODJwMzNfZGRjb19zY2FsZWRfcHBtKGN1cnJlbnRfcHBtLCBwcGIpKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTk3ND1zdGF0aWMgaW50IGlkdDgycDMzX2FkandyaXRlcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHMzMiBvZmZzZXRfbnMpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy0xMDA5LVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjEwMTA6c3RhdGljIGludCBpZHQ4MnAzM19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAxMS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfaWR0ODJwMzMuYy0xMDIzLVxcdG11dGV4X2xvY2soaWR0ODJwMzMtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjEwMjQ6XFx0ZXJyID0gX2lkdDgycDMzX2FkamZpbmUoY2hhbm5lbCwgc2NhbGVkX3BwbSk7XFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTAyNS1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jPTExNTM9c3RhdGljIHZvaWQgaWR0ODJwMzNfY2Fwc19pbml0KHUzMiBpbmRleCwgc3RydWN0IHB0cF9jbG9ja19pbmZvICpjYXBzLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTE2NS1cXHRjYXBzLVxcdTAwM2VnZXRtYXhwaGFzZSA9IGlkdDgycDMzX2dldG1heHBoYXNlO1xcbmRyaXZlcnMvcHRwL3B0cF9pZHQ4MnAzMy5jOjExNjY6XFx0Y2Fwcy1cXHUwMDNlYWRqZmluZSA9IGlkdDgycDMzX2FkamZpbmU7XFxuZHJpdmVycy9wdHAvcHRwX2lkdDgycDMzLmMtMTE2Ny1cXHRjYXBzLVxcdTAwM2VhZGp0aW1lID0gaWR0ODJwMzNfYWRqdGltZTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM9NTg9c3RhdGljIGludCBwdHBfa3ZtX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy02OC1cXG5kcml2ZXJzL3B0cC9wdHBfa3ZtX2NvbW1vbi5jOjY5OnN0YXRpYyBpbnQgcHRwX2t2bV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIGRlbHRhKVxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmMtNzAte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfa3ZtX2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfa3ZtX2NvbW1vbi5jLTExNy1cXHQucHBzXFx0XFx0PSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9rdm1fY29tbW9uLmM6MTE4OlxcdC5hZGpmaW5lXFx0PSBwdHBfa3ZtX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX2t2bV9jb21tb24uYy0xMTktXFx0LmFkanRpbWVcXHQ9IHB0cF9rdm1fYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM9NDQ9c3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX21vY2suYy00OC1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjQ5OnN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTUwLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM9MTE4PXN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmMtMTMyLVxcdFxcdC5tYXhfYWRqXFx0PSBNT0NLX1BIQ19NQVhfQURKX1BQQixcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjEzMzpcXHRcXHQuYWRqZmluZVxcdD0gbW9ja19waGNfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTEzNC1cXHRcXHQuYWRqdGltZVxcdD0gbW9ja19waGNfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmM9NjM2PXN0YXRpYyB2b2lkIG5ldGNfdGltZXJfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgdTY0IHBlcmlvZClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmMtNjU4LVxcbmRyaXZlcnMvcHRwL3B0cF9uZXRjLmM6NjU5OnN0YXRpYyBpbnQgbmV0Y190aW1lcl9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy02NjAte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYz03MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBuZXRjX3RpbWVyX3B0cF9jYXBzID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYy03NDYtXFx0XFx0XFx0XFx0IFBUUF9TVFJJQ1RfRkxBR1MsXFxuZHJpdmVycy9wdHAvcHRwX25ldGMuYzo3NDc6XFx0LmFkamZpbmVcXHQ9IG5ldGNfdGltZXJfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jLTc0OC1cXHQuYWRqdGltZVxcdD0gbmV0Y190aW1lcl9hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTE2MTM9c3RhdGljIGludFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxNjE0OnB0cF9vY3BfbnVsbF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTYxNS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTczND1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9vY3BfY2xvY2tfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQwLVxcdC5hZGp0aW1lXFx0PSBwdHBfb2NwX2FkanRpbWUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE3NDE6XFx0LmFkamZpbmVcXHQ9IHB0cF9vY3BfbnVsbF9hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNzQyLVxcdC5hZGpwaGFzZVxcdD0gcHRwX29jcF9udWxsX2FkanBoYXNlLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3BjaC5jPTI5NT1zdGF0aWMgaXJxcmV0dXJuX3QgaXNyKGludCBpcnEsIHZvaWQgKnByaXYpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtMzM5LVxcbmRyaXZlcnMvcHRwL3B0cF9wY2guYzozNDA6c3RhdGljIGludCBwdHBfcGNoX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtMzQxLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9wY2guYz00MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfcGNoX2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfcGNoLmMtNDMyLVxcdC5wcHNcXHRcXHQ9IDAsXFxuZHJpdmVycy9wdHAvcHRwX3BjaC5jOjQzMzpcXHQuYWRqZmluZVxcdD0gcHRwX3BjaF9hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF9wY2guYy00MzQtXFx0LmFkanRpbWVcXHQ9IHB0cF9wY2hfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jPTE5Nj1FWFBPUlRfU1lNQk9MX0dQTChwdHBfcW9yaXFfaXNyKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTIwMS1cXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYzoyMDI6aW50IHB0cF9xb3JpcV9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMjAzLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTIzMC19XFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmM6MjMxOkVYUE9SVF9TWU1CT0xfR1BMKHB0cF9xb3JpcV9hZGpmaW5lKTtcXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYy0yMzItXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfcW9yaXEuYz0zNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfcW9yaXFfY2FwcyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jLTM1Ny1cXHQucHBzXFx0XFx0PSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9xb3JpcS5jOjM1ODpcXHQuYWRqZmluZVxcdD0gcHRwX3FvcmlxX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX3FvcmlxLmMtMzU5LVxcdC5hZGp0aW1lXFx0PSBwdHBfcW9yaXFfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM9MTE9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9zdGNrZV9jbG9jaywgKnB0cF9xcHRfY2xvY2s7XFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy0xMi1cXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jOjEzOnN0YXRpYyBpbnQgcHRwX3MzOTBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtMTQte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYz04Mz1zdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9zMzkwX3N0Y2tlX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jLTg2LVxcdC5tYXhfYWRqXFx0PSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM6ODc6XFx0LmFkamZpbmVcXHQ9IHB0cF9zMzkwX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYy04OC1cXHQuYWRqdGltZVxcdD0gcHRwX3MzOTBfYWRqdGltZSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmM9OTQ9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfczM5MF9xcHRfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9zMzkwLmMtOTctXFx0Lm1heF9hZGpcXHQ9IDAsXFxuZHJpdmVycy9wdHAvcHRwX3MzOTAuYzo5ODpcXHQuYWRqZmluZVxcdD0gcHRwX3MzOTBfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfczM5MC5jLTk5LVxcdC5hZGp0aW1lXFx0PSBwdHBfczM5MF9hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTM0PXN0YXRpYyB2b2lkIHB0cF92Y2xvY2tfaGFzaF9kZWwoc3RydWN0IHB0cF92Y2xvY2sgKnZjbG9jaylcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy00NC1cXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmM6NDU6c3RhdGljIGludCBwdHBfdmNsb2NrX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmMtNDYte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jPTE2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92Y2xvY2tfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92Y2xvY2suYy0xNjctXFx0Lm1heF9hZGpcXHQ9IDUwMDAwMDAwMCxcXG5kcml2ZXJzL3B0cC9wdHBfdmNsb2NrLmM6MTY4OlxcdC5hZGpmaW5lXFx0PSBwdHBfdmNsb2NrX2FkamZpbmUsXFxuZHJpdmVycy9wdHAvcHRwX3ZjbG9jay5jLTE2OS1cXHQuYWRqdGltZVxcdD0gcHRwX3ZjbG9ja19hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0yNTQ9c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjg2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjg3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBkZWx0YSlcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI4OC17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTMxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92bWNsb2NrX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMyMy1cXHQucHBzXFx0XFx0PSAwLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzI0OlxcdC5hZGpmaW5lXFx0PSBwdHBfdm1jbG9ja19hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzI1LVxcdC5hZGp0aW1lXFx0PSBwdHBfdm1jbG9ja19hZGp0aW1lLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jPTM5PXN0YXRpYyBpbnQgcHRwX3Ztd19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jLTQzLVxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYzo0NDpzdGF0aWMgaW50IHB0cF92bXdfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgZGVsdGEpXFxuZHJpdmVycy9wdHAvcHRwX3Ztdy5jLTQ1LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYz03MT1zdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF92bXdfY2xvY2tfaW5mbyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03NS1cXHQuYWRqdGltZVxcdD0gcHRwX3Ztd19hZGp0aW1lLFxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYzo3NjpcXHQuYWRqZmluZVxcdD0gcHRwX3Ztd19hZGpmaW5lLFxcbmRyaXZlcnMvcHRwL3B0cF92bXcuYy03Ny1cXHQuZ2V0dGltZTY0XFx0PSBwdHBfdm13X2dldHRpbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIzOjI5OjA0LjE5MzQwNDkyN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODUxOTE3MDU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSW50cm9kdWNlZCoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIHRoaXMgY29kZSBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXZSdyZSBsb29raW5nIGF0IGEgY291cGxlIG9mIGZpeGVzIGhlcmUsIG9uZSBpbiB0aGUgUFRQIGRyaXZlciBhbmQgYW5vdGhlciBpbiB0aGUgR1ZFIFJYIHBhdGguIE15IGNvbmNlcm4sIGFzIGFsd2F5cyB3aXRoIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3Mgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuRmlyc3QsIHRoZSBQVFAgY2hhbmdlLiBXZSdyZSBkZWFsaW5nIHdpdGggYHB0cF9jbG9ja19hZGp0aW1lYC4gSXQgYXBwZWFycyB0aGF0IGlmIGBvcHMtXHUwMDNlYWRqZmluZWAgaXMgTlVMTCwgd2hpY2ggaXMgcG9zc2libGUgaWYgdGhlIHVuZGVybHlpbmcgUFRQIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBmcmVxdWVuY3kgYWRqdXN0bWVudCBhbmQgdGhhdCBpcyBub3cgcHJvcGVybHkgaGFuZGxlZCwgd2UgZ2V0IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgZml4LCBgZ3ZlX3B0cF9hZGpmaW5lYCwgZXNzZW50aWFsbHkgcHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyAtRU9QTk9UU1VQUC4gVGhpcyBpcyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbi4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgcHJvdGVjdGlvbnMgd2lsbCBjYXRjaCB0aGlzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkIG9yIGxlYWtlZCBoZXJlLlxuXG5Ob3csIGxldCdzIG1vdmUgdG8gdGhlIEdWRSBSWCBwYXRoLiBUaGUgY29yZSBpc3N1ZSBoZXJlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIG9mIHplcm8tbGVuZ3RoIGJ1ZmZlcnMuIElmIGBidWZfbGVuYCBpcyB6ZXJvLCB3ZSdyZSBsaWtlbHkgc2tpcHBpbmcgdGhlIHdob2xlIHBheWxvYWQsIGFzIGludGVuZGVkIHdpdGggdGhpcyBwYXRjaC4gVGhpcyBpcyB1c2VkIGluIGd2ZV9yeF9kcW8uIFRoZSBmaXggaGVyZSBjaGVja3MgaWYgYGJ1Zl9sZW5gIGlzIDAuIElmIGl0IGlzIDAsIHRoZSBidWZmZXIgaXMgZnJlZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlYXJseS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSBjb3VsZCBwYXNzIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYGd2ZV9yeF9hcHBlbmRfZnJhZ3NgLiBBIDAtbGVuZ3RoIGZyYWdtZW50IGlzIHBlcmZlY3RseSB2YWxpZC4gVGhlIHNrYiB3aWxsIHRoZW4gaGF2ZSBhIGZyYWdtZW50IG9mIGxlbmd0aCAwLlxuXG5TbywgaGVyZSdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgMC1sZW5ndGggZnJhZ21lbnQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBmcmFnbWVudCAqcG9pbnRzKiB0byBhIHBhZ2UsIGJ1dCBiZWNhdXNlIHRoZSBsZW5ndGggaXMgemVybywgbm90aGluZyBpcyBhY3R1YWxseSByZWFkIGZyb20gdGhlIHBhZ2UuIElmIHRoZSBuZXR3b3JrIHN0YWNrIG9yIGFuIFhEUCBwcm9ncmFtICp0cmllcyogdG8gcmVhZCBmcm9tIGEgMC1sZW5ndGggZnJhZ21lbnQsIGl0J3MgZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBub3RoaW5nIGF0IGFsbCwgd2hpY2ggaXMgYSBjcmFzaC4gS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcy4gS01TQU4gZG9lc24ndCBhcHBseS5cblxuVGhlIDAtbGVuZ3RoIGZyYWdtZW50J3MgY29udHJpYnV0aW9uIHRvIGBza2ItXHUwMDNlbGVuYCBpcyAwIGJ5dGVzLiBTbyBpdCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS5cblxuT2theSwgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBwb3NzaWJsZSBleGVjdXRpb24gZmxvd3M6XG5cbjEuICAqKlplcm8tTGVuZ3RoIEZyYWdtZW50OioqIFRoZSBkYXRhIGJ1ZmZlciBoYXMgYGJ1Zl9sZW5gIG9mIDAuIGBndmVfcnhfYXBwZW5kX2ZyYWdzYCBpcyBjYWxsZWQsIGFuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBTS0IuIFRoaXMgaXMgd2hlcmUgaXTigJlzIHRoZSBmcmFnbWVudCBpcyBhc3NpZ25lZCB0byBgYnVmX3N0YXRlLVx1MDAzZXBhZ2VfaW5mby5wYWdlYC5cbjIuICAqKk5ldHdvcmsgU3RhY2sgUmVhZDoqKiBJZiB0aGUgbmV0d29yayBzdGFjayB0cmllcyB0byByZWFkIGBza2ItXHUwMDNlbGVuYCBieXRlcyBmcm9tIHRoZSBTS0IsIGFuZCB0aGUgZnJhZ21lbnQgaXMgYWNjZXNzZWQsIGl0IHdpbGwgcmVhZCAwIGJ5dGVzLCBzbyB0aGlzIGlzIG5vdCBhIHByb2JsZW0uIEV2ZW4gaWYgdGhlIGNvZGUgKmluY29ycmVjdGx5KiBjYWxjdWxhdGVzIHJlYWQgbGVuZ3RoIGFuZCB0cmllcyB0byByZWFkIG1vcmUsIHdlIHNob3VsZCBnZXQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGNhdWdodCBieSBLQVNBTi5cbjMuICAqKlhEUCBQcm9ncmFtIFJlYWQ6KiogSWYgYW4gWERQIHByb2dyYW0gdHJpZXMgdG8gcmVhZCBmcm9tIHRoZSAwLWxlbmd0aCBmcmFnbWVudCwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBwYWdlIGFzc2lnbmVkIHRvIGl0IGFuZCBjb3VsZCBlaXRoZXIgc3VjY2VlZCBpZiBjb2RlIGlzIGNvcnJlY3QsIG9yIGZhaWwgd2l0aCBLQVNBTiBpZiBvdXQtb2YtYm91bmRzLlxuNC4gICoqVXNlcnNwYWNlIENvcHkgKGUuZy4sIEFGX1BBQ0tFVCk6KiogSWYgdGhlIFNLQiBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBgc2tiLVx1MDAzZWxlbmAgKHdoaWNoIGluY2x1ZGVzIDAgZnJvbSB0aGUgMC1sZW5ndGggZnJhZ21lbnQpIGJ5dGVzIHdpbGwgYmUgY29waWVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuXG5cblRoZXJlZm9yZSwgdGhlIGZpeCAqcHJldmVudHMqIGlzc3VlcyByZWxhdGVkIHRvIHplcm8tbGVuZ3RoIGJ1ZmZlcnMsIGJ1dCBpdCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBLQVNBTiBjb3ZlcnMgdGhlIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlcywgYW5kIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBmb3IgS01TQU4uXG5cbkluIHN1bW1hcnksIG15IGFzc2Vzc21lbnQgaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc5LCJPdXRwdXRUb2tlbnMiOjI5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjM6Mjk6MjIuNzEyNTc4NTEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJbiBgZ3ZlX3B0cC5jYCwgaXQgYWRkcyBhIHN0dWIgZm9yIGBhZGpmaW5lYCAoYGd2ZV9wdHBfYWRqZmluZWApIHdoaWNoIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUFRQIGNvcmUgKGBwdHBfY2xvY2tfYWRqdGltZWApIHdoZW4gYG9wcy1cXHUwMDNlYWRqZmluZWAgaXMgaW52b2tlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwcm90ZWN0aW9ucyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uXFxuMi4gSW4gYGd2ZV9yeF9kcW8uY2AsIGl0IGFkZHMgYSBjaGVjayB0byByZXR1cm4gZWFybHkgYW5kIGZyZWUgdGhlIGJ1ZmZlciBpZiBgYnVmX2xlbmAgaXMgMC4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgZHJpdmVyIGNvdWxkIGFwcGVuZCBhIDAtbGVuZ3RoIGZyYWdtZW50IHRvIGFuIHNrYiBvciBwYXNzIGEgMC1sZW5ndGggYnVmZmVyIHRvIGFuIFhEUCBwcm9ncmFtLiBBIDAtbGVuZ3RoIGZyYWdtZW50IGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBpdHMgbGVuZ3RoIGlzIDAsIG1lYW5pbmcgbm8gYnl0ZXMgZnJvbSB0aGUgZnJhZ21lbnQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCBieSB0aGUgbmV0d29yayBzdGFjay4gQW55IG91dC1vZi1ib3VuZHMgcmVhZHMgY2F1c2VkIGJ5IFhEUCBwcm9ncmFtcyBvciB0aGUgbmV0d29yayBzdGFjayBhc3N1bWluZyBhIG1pbmltdW0gZnJhZ21lbnQgbGVuZ3RoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5OZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVncyB0aGlzIHBhdGNoIGZpeGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEluIGBndmVfcHRwLmNgLCBpdCBhZGRzIGEgc3R1YiBmb3IgYGFkamZpbmVgIChgZ3ZlX3B0cF9hZGpmaW5lYCkgd2hpY2ggcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBQVFAgY29yZSAoYHB0cF9jbG9ja19hZGp0aW1lYCkgd2hlbiBgb3BzLVxcdTAwM2VhZGpmaW5lYCBpcyBpbnZva2VkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi5cXG4yLiBJbiBgZ3ZlX3J4X2Rxby5jYCwgaXQgYWRkcyBhIGNoZWNrIHRvIHJldHVybiBlYXJseSBhbmQgZnJlZSB0aGUgYnVmZmVyIGlmIGBidWZfbGVuYCBpcyAwLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBkcml2ZXIgY291bGQgYXBwZW5kIGEgMC1sZW5ndGggZnJhZ21lbnQgdG8gYW4gc2tiIG9yIHBhc3MgYSAwLWxlbmd0aCBidWZmZXIgdG8gYW4gWERQIHByb2dyYW0uIEEgMC1sZW5ndGggZnJhZ21lbnQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIGl0cyBsZW5ndGggaXMgMCwgbWVhbmluZyBubyBieXRlcyBmcm9tIHRoZSBmcmFnbWVudCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrLiBBbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBjYXVzZWQgYnkgWERQIHByb2dyYW1zIG9yIHRoZSBuZXR3b3JrIHN0YWNrIGFzc3VtaW5nIGEgbWluaW11bSBmcmFnbWVudCBsZW5ndGggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxcblxcbk5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWdzIHRoaXMgcGF0Y2ggZml4ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[1] Phase: Succeeded StartedAt: 2026-08-07 23:29:33 +0000 UTC FinishedAt: 2026-08-07 23:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 23:29:33 +0000 UTC FinishedAt: 2026-08-07 23:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2] Phase: Succeeded StartedAt: 2026-08-07 23:29:33 +0000 UTC FinishedAt: 2026-08-08 01:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 23:29:33 +0000 UTC FinishedAt: 2026-08-08 01:03:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 23:29:33 +0000 UTC FinishedAt: 2026-08-07 23:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 23:29:33 +0000 UTC FinishedAt: 2026-08-07 23:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowzxw4v/series-workflowzxw4v-convert-artifact-3019621042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 23:29:43 +0000 UTC FinishedAt: 2026-08-07 23:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 23:29:43 +0000 UTC FinishedAt: 2026-08-07 23:46:16 +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:*bf5081ac-a82c-404d-9603-664f6aa3e153,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-workflowzxw4v/series-workflowzxw4v-convert-artifact-3019621042/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": "c7c02ef2-f66c-47f4-bd1c-0de143cba564", "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-workflowzxw4v/series-workflowzxw4v-build-action-1199051824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 23:29:43 +0000 UTC FinishedAt: 2026-08-07 23:46:06 +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:*bf5081ac-a82c-404d-9603-664f6aa3e153,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-workflowzxw4v/series-workflowzxw4v-convert-artifact-3019621042/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": "c7c02ef2-f66c-47f4-bd1c-0de143cba564", "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-workflowzxw4v/series-workflowzxw4v-build-action-1199051824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 23:46:16 +0000 UTC FinishedAt: 2026-08-07 23:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 23:46:16 +0000 UTC FinishedAt: 2026-08-07 23:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 23:46:16 +0000 UTC FinishedAt: 2026-08-07 23:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 23:46:16 +0000 UTC FinishedAt: 2026-08-07 23:46:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowzxw4v/series-workflowzxw4v-convert-artifact-2572073421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 23:46:26 +0000 UTC FinishedAt: 2026-08-07 23:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 23:46:26 +0000 UTC FinishedAt: 2026-08-07 23:48:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c7c02ef2-f66c-47f4-bd1c-0de143cba564,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-workflowzxw4v/series-workflowzxw4v-build-action-1199051824/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-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 23:48:24 +0000 UTC FinishedAt: 2026-08-07 23:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 23:48:24 +0000 UTC FinishedAt: 2026-08-07 23:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 23:48:24 +0000 UTC FinishedAt: 2026-08-08 00:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 23:48:24 +0000 UTC FinishedAt: 2026-08-08 00:04:50 +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:*bf5081ac-a82c-404d-9603-664f6aa3e153,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-workflowzxw4v/series-workflowzxw4v-convert-artifact-2572073421/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": "cc4e8f03-02b9-4680-8b66-0eeb8748c5ab", "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-workflowzxw4v/series-workflowzxw4v-build-action-2724587433/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 23:48:24 +0000 UTC FinishedAt: 2026-08-08 00:04:40 +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:*bf5081ac-a82c-404d-9603-664f6aa3e153,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-workflowzxw4v/series-workflowzxw4v-convert-artifact-2572073421/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": "cc4e8f03-02b9-4680-8b66-0eeb8748c5ab", "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-workflowzxw4v/series-workflowzxw4v-build-action-2724587433/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 00:04:50 +0000 UTC FinishedAt: 2026-08-08 00:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 00:04:50 +0000 UTC FinishedAt: 2026-08-08 00:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 00:04:50 +0000 UTC FinishedAt: 2026-08-08 00:06:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 00:04:50 +0000 UTC FinishedAt: 2026-08-08 00:06:29 +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:*cc4e8f03-02b9-4680-8b66-0eeb8748c5ab,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-workflowzxw4v/series-workflowzxw4v-build-action-2724587433/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-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 01:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 01:03:32 +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":["gve_ptp_adjfine"],"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:*c7c02ef2-f66c-47f4-bd1c-0de143cba564,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc4e8f03-02b9-4680-8b66-0eeb8748c5ab,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-workflowzxw4v/series-workflowzxw4v-build-action-1199051824/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-workflowzxw4v/series-workflowzxw4v-build-action-2724587433/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 00:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 00:06:44 +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":["gve_ptp_adjfine"],"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-workflowzxw4v/series-workflowzxw4v-convert-artifact-381406898/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 00:06:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 00:06:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 00:06:39 +0000 UTC FinishedAt: 2026-08-08 00:06:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 00:06:49 +0000 UTC FinishedAt: 2026-08-08 01:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxw4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_ptp_adjfine"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"d879a52c-ece2-4ed5-ab17-8a415e4fa3e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 00:06:49 +0000 UTC FinishedAt: 2026-08-08 01:03:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c7c02ef2-f66c-47f4-bd1c-0de143cba564,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc4e8f03-02b9-4680-8b66-0eeb8748c5ab,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-workflowzxw4v/series-workflowzxw4v-build-action-1199051824/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-workflowzxw4v/series-workflowzxw4v-build-action-2724587433/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-workflowzxw4v/series-workflowzxw4v-convert-artifact-381406898/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,}