Name: series-workflowslrzb Phase: Succeeded StartedAt: 2026-09-05 23:54:33 +0000 UTC FinishedAt: 2026-09-06 03:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[0] Phase: Succeeded StartedAt: 2026-09-05 23:54:33 +0000 UTC FinishedAt: 2026-09-06 00:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 23:54:33 +0000 UTC FinishedAt: 2026-09-06 00:14:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "f5ec3f50-9c0b-4e30-9779-e11d2206533d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "hwsim_mcast_config_msg", "hwsim_mcast_new_radio", "hwsim_mcast_del_radio", "mac80211_hwsim_new_radio", "mac80211_hwsim_del_radio", "hwsim_new_radio_nl", "hwsim_del_radio_nl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fbWNhc3RfY29uZmlnX21zZyYjMzQ7LAogICAgJiMzNDtod3NpbV9tY2FzdF9uZXdfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbWNhc3RfZGVsX3JhZGlvJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX25ld19yYWRpbyYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbmV3X3JhZGlvX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX2RlbF9yYWRpb19ubCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbWFjODAyMTFfaHdzaW0gdG8gdXNlIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgaW5zdGVhZCBvZiBnZW5sbXNnX211bHRpY2FzdCgpIHdoZW4gYnJvYWRjYXN0aW5nIG5ldy9kZWxldGVkIHJhZGlvIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZ2VubF9pbmZvLCBwYXNzaW5nIHRoZSB0YXJnZXQgbmV0bnMgZnJvbSB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhbHRlciBkYXRhIHNlcmlhbGl6YXRpb24sIG1vZGlmeSBidWZmZXIgYm91bmRzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbyYjMzk7cyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MTI6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uZDc3ZjU0ZGFlZmM1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTQzOTYsMTUgJiM0Mzs0Mzk2LDE1IEBAIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zIHtcbiBcdGJvb2wgYmFja2dyb3VuZF9yYWRhcjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYixcbiYjNDM7c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvKVxuIFx0XHRnZW5sX25vdGlmeShcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxuIFx0XHRcdCAgICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuIFx0ZWxzZVxuLVx0XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCAwLFxuLVx0XHRcdFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0Z2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxuJiM0MztcdFx0XHRcdFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcbiB9XG4gXG4gc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbkBAIC00NDg4LDcgJiM0Mzs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYjtcbkBAIC00NTA4LDcgJiM0Mzs0NTA5LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcbiBcdGdlbmxtc2dfZW5kKG1jYXN0X3NrYiwgZGF0YSk7XG4gXG4tXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgaW5mbyk7XG4mIzQzO1x0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XG4gXHRyZXR1cm47XG4gXG4gb3V0X2VycjpcbkBAIC02MTkwLDcgJiM0Mzs2MTkxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdGh3c2ltX3JhZGlvc19nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xuIFxuLVx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgaW5mbywgcGFyYW0pO1xuJiM0MztcdGh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xuIFxuIFx0cmV0dXJuIGlkeDtcbiBcbkBAIC02MjA4LDcgJiM0Mzs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHR2b2lkICpkYXRhO1xuQEAgLTYyMzQsNyAmIzQzOzYyMzUsNyBAQCBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXG4gXG4gXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xuIFxuLVx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIGluZm8pO1xuJiM0MztcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuIFxuIFx0cmV0dXJuO1xuIFxuQEAgLTYyNDYsNyAmIzQzOzYyNDcsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4gXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmh3bmFtZSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4tXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cdTAwM2VpZHgsIGh3bmFtZSwgaW5mbyk7XG4mIzQzO1x0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbyk7XG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cdTAwM2VkZWJ1Z2ZzKTtcbiBcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXHUwMDNlaHcpO1xuIFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h3c2ltX21jYXN0X2NvbmZpZ19tc2cmIzM0OywKICAgICYjMzQ7aHdzaW1fbWNhc3RfbmV3X3JhZGlvJiMzNDssCiAgICAmIzM0O2h3c2ltX21jYXN0X2RlbF9yYWRpbyYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8mIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvJiMzNDssCiAgICAmIzM0O2h3c2ltX25ld19yYWRpb19ubCYjMzQ7LAogICAgJiMzNDtod3NpbV9kZWxfcmFkaW9fbmwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGljYXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBsb2dpYyBkdXJpbmcgcmFkaW8gY3JlYXRpb24gYW5kIGRlbGV0aW9uIGluIG1hYzgwMjExX2h3c2ltIHRvIHRhcmdldCB0aGUgcmFkaW8mIzM5O3Mgd2lwaHkgbmV0d29yayBuYW1lc3BhY2UgdmlhIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgd2hlbiBnZW5sX2luZm8gaXMgTlVMTC4gbWFjODAyMTFfaHdzaW0gaXMgYSBzb2Z0d2FyZS1zaW11bGF0ZWQgd2lyZWxlc3MgZHJpdmVyIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIG5ldGxpbmsgKGh3c2ltL25sODAyMTEpIGFuZCBuZXRucyBsaWZlY3ljbGUgb3BlcmF0aW9ucy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlcmFjdGlvbnMgYW5kIG11bHRpY2FzdCBoYW5kbGluZyBkdXJpbmcgY29uY3VycmVudCByYWRpbyBjcmVhdGlvbiwgZGVsZXRpb24sIGFuZCBuYW1lc3BhY2UgZXhpdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmZDBhZTUyMGJjMzE1NzFkZjBiYmY0NGRkYjgyZTgwYmU3ZThiMTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAwOjEyOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwppbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwpAQCAtNDM5NiwxNSAmIzQzOzQzOTYsMTUgQEAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgewogCWJvb2wgYmFja2dyb3VuZF9yYWRhcjsKIH07CiAKLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwKJiM0MztzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCWlmIChpbmZvKQogCQlnZW5sX25vdGlmeSgmYW1wO2h3c2ltX2dlbmxfZmFtaWx5LCBtY2FzdF9za2IsIGluZm8sCiAJCQkgICAgSFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTsKIAllbHNlCi0JCWdlbmxtc2dfbXVsdGljYXN0KCZhbXA7aHdzaW1fZ2VubF9mYW1pbHksIG1jYXN0X3NrYiwgMCwKLQkJCQkgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7CiYjNDM7CQlnZW5sbXNnX211bHRpY2FzdF9uZXRucygmYW1wO2h3c2ltX2dlbmxfZmFtaWx5LCBuZXQsIG1jYXN0X3NrYiwgMCwKJiM0MzsJCQkJCUhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsCkBAIC00NDg4LDcgJiM0Mzs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MztzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCSAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zICpwYXJhbSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiOwpAQCAtNDUwOCw3ICYjNDM7NDUwOSw3IEBAIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAKIAlnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpOwogCi0JaHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIGluZm8pOwomIzQzOwlod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTsKIAlyZXR1cm47CiAKIG91dF9lcnI6CkBAIC02MTkwLDcgJiM0Mzs2MTkxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIAlod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtod3NpbV9yYWRpb19sb2NrKTsKIAotCWh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIGluZm8sIHBhcmFtKTsKJiM0MzsJaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtJmd0O2h3LSZndDt3aXBoeSksIGluZm8sIHBhcmFtKTsKIAogCXJldHVybiBpZHg7CiAKQEAgLTYyMDgsNyAmIzQzOzYyMDksNyBAQCBzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogfQogCiBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsCi0JCQkJICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzOwkJCQkgIHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXZvaWQgKmRhdGE7CkBAIC02MjM0LDcgJiM0Mzs2MjM1LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLAogCiAJZ2VubG1zZ19lbmQoc2tiLCBkYXRhKTsKIAotCWh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBpbmZvKTsKJiM0MzsJaHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIG5ldCwgaW5mbyk7CiAKIAlyZXR1cm47CiAKQEAgLTYyNDYsNyAmIzQzOzYyNDcsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsCiAJCQkJICAgICBjb25zdCBjaGFyICpod25hbWUsCiAJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCWh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLSZndDtpZHgsIGh3bmFtZSwgaW5mbyk7CiYjNDM7CWh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLSZndDtpZHgsIGh3bmFtZSwgd2lwaHlfbmV0KGRhdGEtJmd0O2h3LSZndDt3aXBoeSksIGluZm8pOwogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLSZndDtkZWJ1Z2ZzKTsKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLSZndDtodyk7CiAJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtJmd0O2Rldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXJnZXQgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgdGhlIGBtYWM4MDIxMV9od3NpbWAgZHJpdmVyIOKAkyB0aGUgc2ltdWxhdGVkIFdpRmkgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGl0c2VsZi4gQSBnb29kIGNob2ljZSBmb3IgZnV6emluZywgSSYjMzk7ZCBzYXksIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IGl04oCZcyBmcmVxdWVudGx5IHRhcmdldGVkIGJ5IHN5emthbGxlciB0aHJvdWdoIG5sODAyMTEgYW5kIHRoZSBod3NpbSBuZXRsaW5rIGludGVyZmFjZSAodGhhdCYjMzk7cyB0aGUgYG1hYzgwMjExX2h3c2ltYCBnZW5sIGZhbWlseSkuIE5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuIFRpbWUgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIGNoYW5nZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgYW5kIGFsc28gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgYW5kIHdoeSwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGUtMi1tYWM4MDIxMV9od3NpbS1vYmpzXHRcdCYjNDM7PSBtYWM4MDIxMV9od3NpbV9tYWluLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDo5OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MTA6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjE3PXN0cnVjdCBod3NpbV90eF9yYXRlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjMwLSAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjMxOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzI6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDogQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBpcyByZXF1aXJlZC5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzMtICpcdFRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzQ6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTogVXNlIHNob3J0IHByZWFtYmxlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTOiBIVCByYXRlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUzogVkhUIE1DUyByYXRlLCBpbiB0aGlzIGNhc2UgdGhlIGlkeCBmaWVsZCBpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTIzNy0gKlx0c3BsaXQgaW50byBhIGhpZ2hlciA0IGJpdHMgKE5zcykgYW5kIGxvd2VyIDQgYml0cyAoTUNTIG51bWJlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzg6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzktICpcdGluIEdyZWVuZmllbGQgbW9kZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDA6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0MS0gKlx0NDAgTUh6LlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0MjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgODAgTUh6IHRyYW5zbWlzc2lvblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0MzogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSDogSW5kaWNhdGVzIDE2MCBNSHogdHJhbnNtaXNzaW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ0LSAqXHQoODAmIzQzOzgwIGlzbiYjMzk7dCBzdXBwb3J0ZWQgeWV0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0Ni0gKlx0dGhlIGFkamFjZW50IDIwIE1IeiBjaGFubmVscywgaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCB0eXBlIGlzXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ3LSAqXHROTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDg6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJOiBTaG9ydCBHdWFyZCBpbnRlcnZhbCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlx0cmF0ZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjUxPWVudW0gaHdzaW1fdHhfcmF0ZV9mbGFncyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjUyOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1JUU19DVFNcdFx0PSBCSVQoMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjUzOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUXHRcdD0gQklUKDEpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NDpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRVx0PSBCSVQoMiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1Ni1cdC8qIHJhdGUgaW5kZXggaXMgYW4gSFQvVkhUIE1DUyBpbnN0ZWFkIG9mIGFuIGluZGV4ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU3Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTXHRcdFx0PSBCSVQoMyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU4Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTERcdFx0PSBCSVQoNCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU5Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIXHRcdD0gQklUKDUpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MDpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX0RVUF9EQVRBXHRcdD0gQklUKDYpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MTpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJXHRcdD0gQklUKDcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MjpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1NcdFx0XHQ9IEJJVCg4KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjM6XHRNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEhcdFx0PSBCSVQoOSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY0Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSFx0XHQ9IEJJVCgxMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjY1LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTMyOD1lbnVtIGh3c2ltX3JhdGVfaW5mb19hdHRyaWJ1dGVzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMzQ3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjM0ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9IICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjEwOiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjExOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oPTE2NT12b2lkIGllZWU4MDIxMV9od3NpbV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjE2ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9JX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTI9c3RhdGljIHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGNvbnN0IHU4ICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNzovKiBNQUM4MDIxMV9IV1NJTSBuZXRsaW5rIGZhbWlseSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHdzaW1fbWNncnBzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI4Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgcG9saWN5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo5MDI6LyogTUFDODAyMTFfSFdTSU0gdmlydGlvIHF1ZXVlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAzLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpod3NpbV92cXNbSFdTSU1fTlVNX1ZRU107XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MTU3NT1zdGF0aWMgaW5saW5lIHUxNiB0cmFuc190eF9yYXRlX2ZsYWdzX2llZWUyaHdzaW0oc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1NzktXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MjpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODMtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg1LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4Ny1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg4Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTEQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkwOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkyOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTkzLVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19TSE9SVF9HSTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTUtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1ZIVF9NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTctXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzgwX01IWl9XSURUSClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTg6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTk5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTYwMDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNjAxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM0ODQ9c3RhdGljIGNvbnN0IGNoYXIgbWFjODAyMTFfaHdzaW1fZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM0OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNDk1OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fU1NUQVRTX0xFTiBBUlJBWV9TSVpFKG1hYzgwMjExX2h3c2ltX2dzdHJpbmdzX3N0YXRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzQ5Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0zNTA2PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3NzZXRfY291bnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUwOS1cdGlmIChzc2V0ID09IEVUSF9TU19TVEFUUylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MTA6XHRcdHJldHVybiBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MTQ9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNTMwOlx0V0FSTl9PTihpICE9IE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUzMS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NTY0OD1zdGF0aWMgY29uc3QgdTggaWZ0eXBlc19leHRfY2FwYV9hcFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjU3OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTXHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY1OC1cdEZJRUxEX1BSRVBfQ09OU1QoSUVFRTgwMjExX01MRF9DQVBfT1BfVElEX1RPX0xJTktfTUFQX05FR19TVVBQLCBcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjM9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjcwLVx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjcxOlx0XHQubWxkX2NhcGFfYW5kX29wcyA9IE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzItXHR9LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNDg9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBod3NpbV9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTQ5Olx0Lm5hbWUgPSBcJiMzNDtNQUM4MDIxMV9IV1NJTVwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNTAtXHQudmVyc2lvbiA9IDEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzQ2OD1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0NzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NDc3Oi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBkZXZpY2UgaWQgdGFibGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0Nzgtc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NDc5Olx0eyBWSVJUSU9fSURfTUFDODAyMTFfSFdTSU0sIFZJUlRJT19ERVZfQU5ZX0lEIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NDgwLVx0eyAwIH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTc4PXN0YXRpYyB1NjQgaHdzaW1fbmFuX2dldF9tYXN0ZXJfcmFuayhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo4MzpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODQtXHRcdG1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0yMTY9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0yNzMtXHRpZiAoKHNsb3QgIT0gU0xPVF8yNEdIWl9EVyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6Mjc0Olx0ICAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMjc1LVx0ICAgIHJ4X3N0YXR1cy5mcmVxICE9IDI0MzcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzYtXHRcdCAgICAoY2cgPT0gb3duX2NnIFx1MDAyNlx1MDAyNiBmcmFtZV9hbXIgXHUwMDNlIGN1cnJfYW1yKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Mzc6XHRcdCAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzgtXHRcdFx0LyogQXZvaWQgYSBzdGF0ZSB0cmFuc2l0aW9uICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00NjgtXHRcdFx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjQ2OTpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDcwLVx0XHRcdGRhdGEtXHUwMDNlbmFuLnJhbmRvbV9mYWN0b3JfdmFsaWRfZHdzdCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz02MTI9bWFjODAyMTFfaHdzaW1fbmFuX2V4ZWNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjUtXHRpZiAoZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNjIDMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNjpcdFx0ZGF0YS1cdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI3Olx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyOC1cdFx0IGRhdGEtXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFx1MDAzZT0gMylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI5Olx0XHRkYXRhLVx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMwOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzEtXHRcdCBkYXRhLVx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNlPSAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzI6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMzOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjM0LVx0XHQgZGF0YS1cdTAwM2VuYW4uc3luY190cmFuc2l0aW9uX3Njb3JlIFx1MDAzYyAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzU6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDEtXHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjQyOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDMtXHQgICAgIWhydGltZXJfYWN0aXZlKFx1MDAyNmRhdGEtXHUwMDNlbmFuLmRpc2NvdmVyeV9iZWFjb25fdGltZXIpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTQ6XHRcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTU6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NTYtXHRcdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gTkFOX1dBUk1VUF9EV1NUO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjU5LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NjA6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY2MS1cdFx0XHRkYXRhLVx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Njk1PW1hYzgwMjExX2h3c2ltX25hbl90eF9iZWFjb24oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTAtXHRuYW5fYXR0ci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YobWFzdGVyX2luZGljYXRpb24pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NzUxOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTItXHRcdG1hc3Rlcl9pbmRpY2F0aW9uLm1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03NzQ9bWFjODAyMTFfaHdzaW1fbmFuX3Nsb3RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODA3LVx0XHR0eF9zeW5jX2JlYWNvbiA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwODpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA5Olx0XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgxMC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTg2Nz1tYWM4MDIxMV9od3NpbV9uYW5fZGlzY292ZXJ5X2JlYWNvbl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04NzktXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNmRhdGEtXHUwMDNlbmFuLnN0YXRlX2xvY2spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgwOlx0XHRpZiAoZGF0YS1cdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgxOlx0XHQgICAgZGF0YS1cdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg4Mi1cdFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz05MDk9aW50IG1hYzgwMjExX2h3c2ltX25hbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyNi1cdFx0LyogU3RhcnQgaW4gdGhlIFwmIzM0O3NjYW5cJiMzNDsgcGhhc2UgYW5kIHN0YXkgdGhlcmUgZm9yIGEgbGl0dGxlIGJpdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5Mjc6XHRcdGRhdGEtXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU47XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyOC1cdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMC1cdFx0ZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWYgPSBjb25mLVx1MDAzZW1hc3Rlcl9wcmVmO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5MzE6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMi1cdFx0bWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNlbmFuLmN1cnJlbnRfYW1pLCAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9MTIyNj1ib29sIG1hYzgwMjExX2h3c2ltX25hbl9yZWNlaXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6MTIzNjpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNy1cdFx0cmV0dXJuIGNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXEgPT0gMjQzNztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjc6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjg6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTEwPWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3BoYXNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTE6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTI6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMzpcdE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmgtMTQtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTE2PWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3JvbGUge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxNzpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTg6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxOTpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0yMC19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9OTk9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fbG9jYWxfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTEwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTAyOiNlbmRpZiAvKiBfX01BQzgwMjExX0hXU0lNX05BTl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzA4CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IHNjcnV0aW5pemUgdGhpcyBwYXRjaC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZywgc28gbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBzaW5jZSBJJiMzOTt2ZSB3b3JrZWQgaW4gdGhpcyBhcmVhIGJlZm9yZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhvc2UgbGluZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2lsbCBiZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhvc2UgY2hhbmdlcyB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzkwOlx0XHR1MzIgaWZ0eXBlcztcbjQzOTE6XHRcdHUzMiAqY2lwaGVycztcbjQzOTI6XHRcdHU4IG5fY2lwaGVycztcbjQzOTM6XHRcdGJvb2wgbWxvO1xuNDM5NDpcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpwbXNyX2NhcGE7XG40Mzk1Olx0XHRib29sIG5hbl9kZXZpY2U7XG40Mzk2Olx0XHRib29sIGJhY2tncm91bmRfcmFkYXI7XG40Mzk3Olx0fTtcbjQzOTg6XHRcbjQzOTk6XHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcbjQ0MDA6XHRcdFx0XHRcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG40NDAxOlx0e1xuNDQwMjpcdFx0aWYgKGluZm8pXG40NDAzOlx0XHRcdGdlbmxfbm90aWZ5KFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCBtY2FzdF9za2IsIGluZm8sXG40NDA0Olx0XHRcdFx0ICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XG40NDA1Olx0XHRlbHNlXG40NDA2Olx0XHRcdGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCBuZXQsIG1jYXN0X3NrYiwgMCxcbjQ0MDc6XHRcdFx0XHRcdFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcbjQ0MDg6XHR9XG40NDA5Olx0XG40NDEwOlx0c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbjQ0MTE6XHRcdFx0XHQgICAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxuNDQxMjpcdHtcbjQ0MTM6XHRcdGludCByZXQ7XG40NDE0Olx0XG40NDE1Olx0XHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcbjQ0MTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDE3Olx0XHRcdHJldHVybiByZXQ7XG40NDE4Olx0XG40NDE5Olx0XHRpZiAocGFyYW0tXHUwMDNlY2hhbm5lbHMpIHtcbjQ0MjA6XHRcdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX0NIQU5ORUxTLCBwYXJhbS1cdTAwM2VjaGFubmVscyk7XG40NDIxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDIyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjQ0MjM6XHRcdH1cbjQ0MjQ6XHRcbjQ0MjU6XHRcdGlmIChwYXJhbS1cdTAwM2VyZWdfYWxwaGEyKSB7XG40NDI2Olx0XHRcdHJldCA9IG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1JFR19ISU5UX0FMUEhBMiwgMixcbjQ0Mjc6XHRcdFx0XHQgICAgICBwYXJhbS1cdTAwM2VyZWdfYWxwaGEyKTtcbjQ0Mjg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0Mjk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuNDQzMDpcdFx0fVxuNDQzMTpcdFxuNDQzMjpcdFx0aWYgKHBhcmFtLVx1MDAzZXJlZ2QpIHtcbjQ0MzM6XHRcdFx0aW50IGk7XG40NDM0Olx0XG40NDM1Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkmIzQzOyYjNDM7KSB7XG40NDM2Olx0XHRcdFx0aWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tXHUwMDNlcmVnZClcbjQ0Mzc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNDQzODpcdFxuNDQzOTpcdFx0XHRcdHJldCA9IG5sYV9wdXRfdTMyKHNrYiwgSFdTSU1fQVRUUl9SRUdfQ1VTVE9NX1JFRywgaSk7XG40NDQwOlx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0NDE6XHRcdFx0XHRcdHJldHVybiByZXQ7XG40NDQyOlx0XHRcdFx0YnJlYWs7XG40NDQzOlx0XHRcdH1cbjQ0NDQ6XHRcdH1cbjQ0NDU6XHRcbjQ0NDY6XHRcdGlmIChwYXJhbS1cdTAwM2VyZWdfc3RyaWN0KSB7XG40NDQ3Olx0XHRcdHJldCA9IG5sYV9wdXRfZmxhZyhza2IsIEhXU0lNX0FUVFJfUkVHX1NUUklDVF9SRUcpO1xuNDQ0ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDQ0OTpcdFx0XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzcGVjaWZpZWQgc2VjdGlvbnMgb2YgYG1hYzgwMjExX2h3c2ltX21haW4uY2A6CgoqKkRpdmluZyBpbnRvIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGZvciBzb21lIHRhcmdldGVkIGludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSB3YW50IHRvIGdldCBhIG1vcmUgZ3JhbnVsYXIgbG9vayBhdCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBtYWM4MDIxMV9od3NpbWAgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBzcGVjaWZpYyBhc3BlY3RzIG9mIGl0cyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0NTAwLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGNvZGUsIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIGNvZGUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBsb29rIGF0IHNvbWUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBwZXJoYXBzIGEgY3JpdGljYWwgZnVuY3Rpb24gY2FsbCB0aGF0JiMzOTtzIGNhdXNpbmcgbWUgaXNzdWVzLiBUaGVuLCBJIG5lZWQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygc29tZSByZWxhdGVkIGludGVyYWN0aW9ucyBhbmQgZmxvd3Mgc28gSSB3aWxsIGNoZWNrIG91dCBhcm91bmQgbGluZSA2MTgwIHRocm91Z2ggNjI2MC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZyBnaXZlbiBteSBleGlzdGluZyBleHBlcmllbmNlIHdpdGggcmVsYXRlZCBkcml2ZXJzLiBXaXRoIGEgY2xvc2VyIGxvb2sgYXQgdGhlc2Ugc2VjdGlvbnMsIEkgc2hvdWxkIGdhaW4gdGhlIGNsYXJpdHkgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDg1Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDg2Olx0XHRcdFx0cmV0dXJuIHJldDtcbjQ0ODc6XHRcdH1cbjQ0ODg6XHRcdHJldHVybiAwO1xuNDQ4OTpcdH1cbjQ0OTA6XHRcbjQ0OTE6XHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXG40NDkyOlx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG40NDkzOlx0XHRcdFx0XHQgIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zICpwYXJhbSlcbjQ0OTQ6XHR7XG40NDk1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiO1xuNDQ5NjpcdFx0dm9pZCAqZGF0YTtcbjQ0OTc6XHRcbjQ0OTg6XHRcdG1jYXN0X3NrYiA9IGdlbmxtc2dfbmV3KEdFTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbjQ0OTk6XHRcdGlmICghbWNhc3Rfc2tiKVxuNDUwMDpcdFx0XHRyZXR1cm47XG40NTAxOlx0XG40NTAyOlx0XHRkYXRhID0gZ2VubG1zZ19wdXQobWNhc3Rfc2tiLCAwLCAwLCBcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgMCxcbjQ1MDM6XHRcdFx0XHQgICBIV1NJTV9DTURfTkVXX1JBRElPKTtcbjQ1MDQ6XHRcdGlmICghZGF0YSlcbjQ1MDU6XHRcdFx0Z290byBvdXRfZXJyO1xuNDUwNjpcdFxuNDUwNzpcdFx0aWYgKGFwcGVuZF9yYWRpb19tc2cobWNhc3Rfc2tiLCBpZCwgcGFyYW0pIFx1MDAzYyAwKVxuNDUwODpcdFx0XHRnb3RvIG91dF9lcnI7XG40NTA5Olx0XG40NTEwOlx0XHRnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpO1xuNDUxMTpcdFxuNDUxMjpcdFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XG40NTEzOlx0XHRyZXR1cm47XG40NTE0Olx0XG40NTE1Olx0b3V0X2VycjpcbjQ1MTY6XHRcdG5sbXNnX2ZyZWUobWNhc3Rfc2tiKTtcbjQ1MTc6XHR9XG40NTE4Olx0XG40NTE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc2JhbmRfaWZ0eXBlX2RhdGEgc2JhbmRfY2FwYV8yZ2h6W10gPSB7XG40NTIwOlx0XHR7XG40NTIxOlx0XHRcdC50eXBlc19tYXNrID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHxcbjQ1MjI6XHRcdFx0XHQgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCksXG40NTIzOlx0XHRcdC5oZV9jYXAgPSB7XG40NTI0Olx0XHRcdFx0Lmhhc19oZSA9IHRydWUsXG40NTI1Olx0XHRcdFx0LmhlX2NhcF9lbGVtID0ge1xuNDUyNjpcdFx0XHRcdFx0Lm1hY19jYXBfaW5mb1swXSA9XG40NTI3Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMF9IVENfSEUsXG40NTI4Olx0XHRcdFx0XHQubWFjX2NhcF9pbmZvWzFdID1cbjQ1Mjk6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAxX1RGX01BQ19QQURfRFVSXzE2VVMgfFxuNDUzMDpcdFx0XHRcdFx0XHRJRUVFODAyMTFfSEVfTUFDX0NBUDFfTVVMVElfVElEX0FHR19SWF9RT1NfOCxcbjQ1MzE6XHRcdFx0XHRcdC5tYWNfY2FwX2luZm9bMl0gPVxuNDUzMjpcdFx0XHRcdFx0XHRJRUVFODAyMTFfSEVfTUFDX0NBUDJfQlNSIHxcbjQ1MzM6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAyX01VX0NBU0NBRElORyB8XG40NTM0Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMl9BQ0tfRU4sXG40NTM1Olx0XHRcdFx0XHQubWFjX2NhcF9pbmZvWzNdID1cbjQ1MzY6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAzX09NSV9DT05UUk9MIHxcbjQ1Mzc6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAzX01BWF9BTVBEVV9MRU5fRVhQX0VYVF8zLFxuNDUzODpcdFx0XHRcdFx0Lm1hY19jYXBfaW5mb1s0XSA9IElFRUU4MDIxMV9IRV9NQUNfQ0FQNF9BTVNEVV9JTl9BTVBEVSxcbjQ1Mzk6XHRcdFx0XHRcdC5waHlfY2FwX2luZm9bMF0gPVxuNDU0MDpcdFx0XHRcdFx0XHRJRUVFODAyMTFfSEVfUEhZX0NBUDBfQ0hBTk5FTF9XSURUSF9TRVRfNDBNSFpfSU5fMkcsXG40NTQxOlx0XHRcdFx0XHQucGh5X2NhcF9pbmZvWzFdID1cbjQ1NDI6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX1BIWV9DQVAxX1BSRUFNQkxFX1BVTkNfUlhfTUFTSyB8XG40NTQzOlx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9QSFlfQ0FQMV9ERVZJQ0VfQ0xBU1NfQSB8XG40NTQ0Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9QSFlfQ0FQMV9MRFBDX0NPRElOR19JTl9QQVlMT0FEIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBpbXBsaWVkIHRob3VnaHRzLCBwcmVzZW50ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKlN0cmF0ZWdpYyBSZWFkaW5nIEZvY3VzKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbi4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbnZlcnNhdGlvbiAod2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIFsqKmluc2VydCB5b3VyIGFzc3VtZWQgZmllbGQgaGVyZSwgZS5nLiwgcmVzZWFyY2gsIGFuYWx5c2lzLCBwcm9qZWN0IG1hbmFnZW1lbnQqKl0pLCBhIHNwZWNpZmljIHNlY3Rpb24gd2FycmFudHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgZm9jdXNpbmcgb24gdGhlIHJhbmdlIG9mIHBhZ2VzIG9yIGRhdGEgcG9pbnRzIGJldHdlZW4gNjE4MCBhbmQgNjI2MCBpcyBjcnVjaWFsLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBhcmd1bWVudHMsIG9yIGtleSBkYXRhLCBvciBjcnVjaWFsIHByb2NlZHVyYWwgc3RlcHMgYXJlIGNlbnRlcmVkLiBUaGlzIGZvY3VzIHdpbGwgYWxsb3cgZm9yIGFuIGVmZmljaWVudCBhbmQgdGFyZ2V0ZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWF0ZXJpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYxODA6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjYxODE6XHRcdFx0aWYgKGluZm8pIHtcbjYxODI6XHRcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O3Blcm0gYWRkciBhbHJlYWR5IHByZXNlbnRcJiMzNDspO1xuNjE4MzpcdFx0XHRcdE5MX1NFVF9CQURfQVRUUihpbmZvLVx1MDAzZWV4dGFjayxcbjYxODQ6XHRcdFx0XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1BFUk1fQUREUl0pO1xuNjE4NTpcdFx0XHR9XG42MTg2Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xuNjE4NzpcdFx0XHRnb3RvIGZhaWxlZF9maW5hbF9pbnNlcnQ7XG42MTg4Olx0XHR9XG42MTg5Olx0XG42MTkwOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRhdGEtXHUwMDNlbGlzdCwgXHUwMDI2aHdzaW1fcmFkaW9zKTtcbjYxOTE6XHRcdGh3c2ltX3JhZGlvc19nZW5lcmF0aW9uJiM0MzsmIzQzOztcbjYxOTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xuNjE5MzpcdFxuNjE5NDpcdFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtXHUwMDNlaHctXHUwMDNld2lwaHkpLCBpbmZvLCBwYXJhbSk7XG42MTk1Olx0XG42MTk2Olx0XHRyZXR1cm4gaWR4O1xuNjE5NzpcdFxuNjE5ODpcdGZhaWxlZF9maW5hbF9pbnNlcnQ6XG42MTk5Olx0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cdTAwM2VkZWJ1Z2ZzKTtcbjYyMDA6XHRcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXHUwMDNlaHcpO1xuNjIwMTpcdGZhaWxlZF9odzpcbjYyMDI6XHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG42MjAzOlx0ZmFpbGVkX2JpbmQ6XG42MjA0Olx0XHRkZXZpY2VfdW5yZWdpc3RlcihkYXRhLVx1MDAzZWRldik7XG42MjA1Olx0ZmFpbGVkX2RydmRhdGE6XG42MjA2Olx0XHRpZWVlODAyMTFfZnJlZV9odyhodyk7XG42MjA3Olx0ZmFpbGVkOlxuNjIwODpcdFx0cmV0dXJuIGVycjtcbjYyMDk6XHR9XG42MjEwOlx0XG42MjExOlx0c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuNjIxMjpcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42MjEzOlx0e1xuNjIxNDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjYyMTU6XHRcdHZvaWQgKmRhdGE7XG42MjE2Olx0XHRpbnQgcmV0O1xuNjIxNzpcdFxuNjIxODpcdFx0c2tiID0gZ2VubG1zZ19uZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuNjIxOTpcdFx0aWYgKCFza2IpXG42MjIwOlx0XHRcdHJldHVybjtcbjYyMjE6XHRcbjYyMjI6XHRcdGRhdGEgPSBnZW5sbXNnX3B1dChza2IsIDAsIDAsIFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCAwLFxuNjIyMzpcdFx0XHRcdCAgIEhXU0lNX0NNRF9ERUxfUkFESU8pO1xuNjIyNDpcdFx0aWYgKCFkYXRhKVxuNjIyNTpcdFx0XHRnb3RvIGVycm9yO1xuNjIyNjpcdFxuNjIyNzpcdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JBRElPX0lELCBpZCk7XG42MjI4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNjIyOTpcdFx0XHRnb3RvIGVycm9yO1xuNjIzMDpcdFxuNjIzMTpcdFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkFESU9fTkFNRSwgc3RybGVuKGh3bmFtZSksXG42MjMyOlx0XHRcdCAgICAgIGh3bmFtZSk7XG42MjMzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNjIzNDpcdFx0XHRnb3RvIGVycm9yO1xuNjIzNTpcdFxuNjIzNjpcdFx0Z2VubG1zZ19lbmQoc2tiLCBkYXRhKTtcbjYyMzc6XHRcbjYyMzg6XHRcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuNjIzOTpcdFxuNjI0MDpcdFx0cmV0dXJuO1xuNjI0MTpcdFxuNjI0MjpcdGVycm9yOlxuNjI0MzpcdFx0bmxtc2dfZnJlZShza2IpO1xuNjI0NDpcdH1cbjYyNDU6XHRcbjYyNDY6XHRzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG42MjQ3Olx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmh3bmFtZSxcbjYyNDg6XHRcdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjYyNDk6XHR7XG42MjUwOlx0XHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cdTAwM2VpZHgsIGh3bmFtZSwgd2lwaHlfbmV0KGRhdGEtXHUwMDNlaHctXHUwMDNld2lwaHkpLCBpbmZvKTtcbjYyNTE6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVx1MDAzZWRlYnVnZnMpO1xuNjI1MjpcdFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cdTAwM2Vodyk7XG42MjUzOlx0XHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGF0YS1cdTAwM2VkZXYpO1xuNjI1NDpcdFx0ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VkZXYpO1xuNjI1NTpcdFx0aWVlZTgwMjExX2ZyZWVfaHcoZGF0YS1cdTAwM2Vodyk7XG42MjU2Olx0fVxuNjI1NzpcdFxuNjI1ODpcdHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fZ2V0X3JhZGlvKHN0cnVjdCBza19idWZmICpza2IsXG42MjU5Olx0XHRcdFx0XHQgICAgc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUFDODAyMTEgSFdTSU0gTXVsdGljYXN0IEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIG11bHRpY2FzdCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYGh3c2ltX21jYXN0X2RlbF9yYWRpb2AsIGFuZCBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AsIGFyZSBiZWluZyB1dGlsaXplZCB3aXRoaW4gYG1hYzgwMjExX2h3c2ltX21haW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZWlyIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIG11bHRpY2FzdCBvcGVyYXRpb24uIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZG8gdGhhdCBpcyBhIGdvb2Qgb2xkIGZhc2hpb25lZCBncmVwIHNlYXJjaCB3aXRoaW4gdGhlIGZpbGUuIEkgd2FudCB0byBzZWUgKmV4YWN0bHkqIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiB0aGUgY29kZSBmbG93IGFuZCB1c2FnZSBwYXR0ZXJucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3NpbV9tY2FzdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00Mzc4PXN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00Mzk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDM5OTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0MDAtXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQ0MTA9c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NDkwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDQ5MTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NDkyLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ1MTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo0NTEyOlx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTEzLVx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NzU9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjE5NDpcdGh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjE5NS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjIxMTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEyLVx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyMzg6XHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjI0Nj1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI0OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjUwOlx0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjUxLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDgyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlcyBpbiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBod3NpbWAgbW9kdWxlLiBQcmV2aW91c2x5LCB0aGUgZnVuY3Rpb24gdG9vayBhIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIGEgYHN0cnVjdCBnZW5sX2luZm9gIGFzIGFyZ3VtZW50cy4gTm93LCBpdCBoYXMgYSBgc3RydWN0IG5ldCAqbmV0YCBhcmd1bWVudCBhcyB3ZWxsLiBUaGUga2V5IGRpZmZlcmVuY2Ugc2VlbXMgdG8gYmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljOiBpZiBgaW5mb2AgaXMgbm90IE5VTEwsIHRoZW4gYSBzdHJhaWdodGZvcndhcmQgYGdlbmxfbm90aWZ5YCBjYWxsIGlzIG1hZGUuIEhvd2V2ZXIsIGlmIGBpbmZvYCAqaXMqIE5VTEwsIHRoZSBmdW5jdGlvbiBub3cgY2FsbHMgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYC4KClRoZSBvcmlnaW5hbCB2ZXJzaW9uIHVzZWQgYGdlbmxtc2dfbXVsdGljYXN0YCB3aGVuIGBpbmZvYCB3YXMgTlVMTC4gVGhlIHVwZGF0ZSBpbmNvcnBvcmF0ZXMgYF9uZXRuc2AgbWVhbmluZyB0aGVyZSYjMzk7cyBub3cgYW4gZXhwbGljaXQgYG5ldGAgbmFtZXNwYWNlIHByb3ZpZGVkIHRvIHRoZSBgZ2VubG1zZ19tdWx0aWNhc3RgIGNhbGwuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoZSBuZXQgbmFtZXNwYWNlIHByb3ZpZGVzIGlzb2xhdGlvbiBhbmQgc2VnbWVudGF0aW9uIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyB0aGlzIGluZGljYXRlcyB0aGF0IHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBtZXNzYWdlcyBtaWdodCBiZSB0YXJnZXRlZCB0byBzcGVjaWZpYyBuZXR3b3JrIG5hbWVzcGFjZXMgbm93LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsICp3aGVuKiBpcyBgaW5mb2AgTlVMTD8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBjb250ZXh0LiBJdCBkaWN0YXRlcyB0aGUgYmVoYXZpb3IgYW5kIGltcGxpY2F0aW9uIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyB0aW1lIHRvIGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgaXMgYmVpbmcgaW52b2tlZCwgc3BlY2lmaWNhbGx5IGZyb20gYG1hYzgwMjExX2h3c2ltX25ld19yYWRpb2AgYW5kIGBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9gLiBLbm93aW5nIHdoZW4gYGluZm9gIGlzIE5VTEwgaW4gdGhvc2UgY2FsbHMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIHdpbGwgdGVsbCBtZSBpZiB0aGUgaW50ZW50IG9mIGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBpcyB0byBzZW5kIG1lc3NhZ2VzIHdpdGhpbiBhIHNwZWNpZmljIG5ldHdvcmsgbmFtZXNwYWNlLCBvciBwb3RlbnRpYWxseSB0byBhbGwuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIGluc2lnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hYzgwMjExX2h3c2ltX25ld19yYWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjM9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01Njc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY3NTpzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY3Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjgwNj1zdGF0aWMgaW50IGh3c2ltX25ld19yYWRpb19ubChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTY5NTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2OTU4Olx0cmV0ID0gbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKGluZm8sIFx1MDAyNnBhcmFtKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTY5NTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxMT1zdGF0aWMgaW50IF9faW5pdCBpbml0X21hYzgwMjExX2h3c2ltKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzYyNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjc2MjU6XHRcdGVyciA9IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhOVUxMLCBcdTAwMjZwYXJhbSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NjI2LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBDb250ZXh0IG9mIGBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGljaCBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgYG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb2AuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBwYXJhbW91bnQ7IGl0IHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB3aGF0IGl0cyByb2xlIGlzIHdpdGhpbiB0aGUgYnJvYWRlciBtYWM4MDIxMS1od3NpbSBmcmFtZXdvcmsuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIGl0cyBjb3JyZWN0IGJlaGF2aW9yLCBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3Vlcywgb3IgZXZlbiByZWZhY3RvcmluZyB0aGUgY29kZS4gQnkgZXhhbWluaW5nIHRoZSBjYWxsIHNpdGVzLCBJIGNhbiBnZXQgYSBtdWNoIGJldHRlciBoYW5kbGUgb24gYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MjExPXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjI0NjpzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjQ3LVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjMwNT1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9mcmVlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjMxNi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MzE3Olx0XHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZGF0YSwgd2lwaHlfbmFtZShkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYzMTgtXHRcdFx0XHRcdCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02OTY2PXN0YXRpYyBpbnQgaHdzaW1fZGVsX3JhZGlvX25sKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzAwMS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MDAyOlx0XHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZGF0YSwgd2lwaHlfbmFtZShkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcwMDMtXHRcdFx0XHRcdCBpbmZvKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTYyPXN0YXRpYyB2b2lkIHJlbW92ZV91c2VyX3JhZGlvcyh1MzIgcG9ydGlkLCBpbnQgbmV0Z3JvdXApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4MC1cdFx0bGlzdF9kZWwoXHUwMDI2ZW50cnktXHUwMDNlbGlzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTgxOlx0XHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZW50cnksIHdpcGh5X25hbWUoZW50cnktXHUwMDNlaHctXHUwMDNld2lwaHkpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4Mi1cdFx0XHRcdFx0IE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcyMzg9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBod3NpbV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI2MC1cdFx0bGlzdF9kZWwoXHUwMDI2ZGF0YS1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcyNjE6XHRcdG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhkYXRhLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI2Mi1cdFx0XHRcdFx0IHdpcGh5X25hbWUoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBod3NpbV9leGl0X25ldGAgYW5kIGByZW1vdmVfdXNlcl9yYWRpb3NgIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgcmVjZW50IGNoYW5nZXMsIGFuZCBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyByZWdhcmRpbmcgYGh3c2ltX2V4aXRfbmV0YCBhbmQgYHJlbW92ZV91c2VyX3JhZGlvc2AuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgaG93IG11bHRpY2FzdCBtZXNzYWdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZXMgKG5ldG5zKSBleGl0IG9yIHdoZW4gcmFkaW9zIGFyZSByZW1vdmVkLiBQcmV2aW91c2x5LCBpZiB0aGUgYGluZm9gIHBvaW50ZXIgd2FzIGBOVUxMYCAod2hpY2ggaGFwcGVucyBpbiB0aGVzZSBzaXR1YXRpb25zKSwgYGdlbmxtc2dfbXVsdGljYXN0YCB3b3VsZCBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgcHJlc3VtYWJseSBgaW5pdF9uZXRgLiBOb3csIGl0JiMzOTtzIGNvcnJlY3RseSB1c2luZyBgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnNgIHdpdGggdGhlIG5ldG5zIG9mIHRoZSBgd2lwaHlgIQoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXR5IGFuZCB0aGVyZWZvcmUgd29ydGggZnV6emluZy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCByZWFjaGFiaWxpdHkuIElzIGBtYWM4MDIxMV9od3NpbWAgZXZlbiByZWxldmFudD8gQWJzb2x1dGVseS4gYG1hYzgwMjExX2h3c2ltYCBpcyBhIHdlbGwta25vd24gc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgdXNlZCBleHRlbnNpdmVseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCwgY3J1Y2lhbGx5LCBpdCYjMzk7cyBhbHJlYWR5IHN1cHBvcnRlZCBieSBzeXprYWxsZXIuIEFueSB1c2VyIHByb2dyYW0sIGdpdmVuIHRoZSByaWdodCBjYXBhYmlsaXRpZXMgb3IgdGhyb3VnaCBuZXRsaW5rL25ldG5zIG1hbmlwdWxhdGlvbiwgY2FuIGNyZWF0ZSBvciBkZWxldGUgdGhlc2Ugc2ltdWxhdGVkIHJhZGlvcywgc2VuZCBOZXRsaW5rIG1lc3NhZ2VzIHZpYSBjb21tYW5kcyBsaWtlIGBIV1NJTV9DTURfTkVXX1JBRElPYCBhbmQgYEhXU0lNX0NNRF9ERUxfUkFESU9gLCBhbmQgdHJpZ2dlciBuZXRucyBjcmVhdGlvbi9kZXN0cnVjdGlvbi4gU29ja2V0IGNsb3NpbmcgKGByZW1vdmVfdXNlcl9yYWRpb3NgKSBpcyBhbHNvIGFuIGVudHJ5IHBvaW50LiBUaGlzIGNvbmZpcm1zIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcy4KCk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBJdCB0b3VjaGVzIGV4ZWN1dGFibGUgY29kZSBpbiBhIHZpcnR1YWwgZHJpdmVyIGFuZCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBtdWx0aWNhc3QgbWVzc2FnZSBub3RpZmljYXRpb24gYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcyB3aGVuIHJhZGlvcyBhcmUgY3JlYXRlZCBvciBkZXN0cm95ZWQuIFRoaXMgY2hhbmdlIGluIG11bHRpY2FzdCBoYW5kbGluZyBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGluY29ycmVjdCBuYW1lc3BhY2UgY29udGV4dC4gVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIFllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgdG8gc2V0IHVwIG15IGZ1enppbmcgdGFyZ2V0LiBMb29raW5nIGF0IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcywgYE1BQzgwMjExX0hXU0lNYCBzaW1wbHkgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCB3aGljaCBtYWtlcyB0aGluZ3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGJ1aWxkLCB3aGljaCBsaWtlbHkgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3RhbmRhcmQgYG1hYzgwMjExYCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLCBzdGFydGluZyByaWdodCBhdCB0aGUgdG9wLCBhcm91bmQgbGluZSAxLiBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0byBzZWUgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNQUM4MDIxMSB3aXJlbGVzcyBzdGFjay4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgTGludXgmIzM5O3Mgd2lyZWxlc3MgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBhbmQgYnVpbGQgb3B0aW9ucyBoZXJlLiBXZSBhcmUgZ29pbmcgdG8gZmluZCB0aGUgbWFzdGVyIGtub2JzIGZvciBjb250cm9sbGluZyB0aGUgZmVhdHVyZSBzZXQgb2YgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCB3aWxsIGluZm9ybSB0aGUgc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBuYXZpZ2F0ZSBhIHBvdGVudGlhbGx5IGNvbXBsZXggd2ViIG9mIGRlcGVuZGVuY2llcyBhcyBpdCBpcyBsaWtlbHkgdGhhdCBkaWZmZXJlbnQgd2lyZWxlc3MgcHJvdG9jb2xzIG9yIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBnb2luZyB0byBiZSBtdXR1YWxseSBleGNsdXNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgZ2l2ZW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMqKjogSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGBDRkc4MDIxMWAuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGRyaXZlcnMsIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZSB0b2dnbGVzPwoqICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB2YXJpb3VzIHdpcmVsZXNzIG1vZHVsZXMgKGUuZy4sIHNwZWNpZmljIHJhZGlvIGZpcm13YXJlIHN1cHBvcnQpIHJlbHkgb24gdGhpcyBmb3VuZGF0aW9uYWwgbGF5ZXIuIEEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBlc3NlbnRpYWwuCiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBob3cgdGhlc2UgZGVwZW5kZW5jaWVzIGFmZmVjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZnJvbSBjb21waWxhdGlvbiB0aW1lIHRvIGltYWdlIHNpemUuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS4KKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIQoKVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTFcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2lyZWxlc3Mgb3B0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIGRyaXZlcnMuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNSB0aHJvdWdoIDMwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgZ2VuZXJhbCB3aXJlbGVzcyBmZWF0dXJlcyBhcmUgbG9jYXRlZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGUgY2hvaWNlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBDRkc4MDIxMVxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAyMDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IENSQzMyXG4gIDIyOlx0XHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcbiAgMjM6XHRcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbiYjMzk7dFxuICAyNDpcdFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxuICAyNTpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXG4gIDI4Olx0XHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxuICAzMTpcdFxuICAzMjpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcbiAgMzM6XHRcbiAgMzQ6XHRcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNjcKCQkJCQkJCW91dHB1dDogMjc1CgkJCQkJCQl0aG91Z2h0czogMTEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNdWx0aWNhc3QgTm90aWZpY2F0aW9uIEhhbmRsaW5nIGluIG1hYzgwMjExX2h3c2ltKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdDogaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBNQUM4MDIxMV9IV1NJTWAsIGBNQUM4MDIxMWAsIGFuZCBgQ0ZHODAyMTFgIGNvbmZpZ3VyYXRpb25zLiBTdGFuZGFyZCBuZXR3b3JraW5nIHN0dWZmIGxpa2UgYE5FVGAgYW5kIGBORVRMSU5LYCBzaG91bGQgYmUgaW4gcGxheSB0b28sIGJ1dCB0aG9zZSBhcmUgZXhwZWN0ZWQuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgc2VlbXMgdG8gYmUgZnVuY3Rpb25zIHdpdGhpbiBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkOiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AsIGBod3NpbV9tY2FzdF9uZXdfcmFkaW9gLCBgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvYCwgYGh3c2ltX21jYXN0X2RlbF9yYWRpb2AsIGBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9gLCBgaHdzaW1fbmV3X3JhZGlvX25sYCwgYGh3c2ltX2RlbF9yYWRpb19ubGAsIGBod3NpbV9leGl0X25ldGAsIGFuZCBgcmVtb3ZlX3VzZXJfcmFkaW9zYC4gSSYjMzk7dmUgY2hlY2tlZCBhbmQgY29uZmlybWVkIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3ltYm9scywgbm90IHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZDsgdGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoYXQgaW1wYWN0cyB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIG1vZGlmaWNhdGlvbi4KCmBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGlzIGNhbGxlZCBieSBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGluaXRfbWFjODAyMTFfaHdzaW1gLiBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCBpcyBjYWxsZWQgYnkgYG1hYzgwMjExX2h3c2ltX2ZyZWVgLCBgaHdzaW1fZGVsX3JhZGlvX25sYCwgYHJlbW92ZV91c2VyX3JhZGlvc2AsIGFuZCBgaHdzaW1fZXhpdF9uZXRgLiBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGh3c2ltX2RlbF9yYWRpb19ubGAgYXJlIG5ldGxpbmsgY2FsbGJhY2tzLCBzbyB0aG9zZSBhcmUga2V5IGVudHJ5IHBvaW50cy4gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGFyZSBzdGF0aWMgaGVscGVycy4KCkkmIzM5O3ZlIGFsc28gZXhhbWluZWQgdGhlIGNoYW5nZXMgd2l0aGluIHRob3NlIGZ1bmN0aW9uczogYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIG5vdyBwYXNzZXMgYG5ldGAgdG8gYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYC4gYGh3c2ltX21jYXN0X25ld19yYWRpb2AgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIG5vdyByZWNlaXZlIGFuZCB1c2UgYG5ldGAgdG8gcGFzcyB0byBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AuIGBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGFuZCBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCBwYXNzIGB3aXBoeV9uZXQoLi4uKWAgdG8gdGhlaXIgcmVzcGVjdGl2ZSBoZWxwZXIgZnVuY3Rpb25zLiBGaW5hbGx5LCB3ZSBoYXZlIHRoZSBuZXRsaW5rIGhhbmRsZXJzIGBod3NpbV9uZXdfcmFkaW9fbmxgIGFuZCBgaHdzaW1fZGVsX3JhZGlvX25sYC4KClRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGRlYWxpbmcgd2l0aCBhbnl0aGluZyBsaWtlIGBrbWFsbG9jYCBvciBtdXRleCBsb2Nrcywgd2hpY2ggYXJlIHViaXF1aXRvdXMgYW5kIGNhbiBjYXVzZSBwcm9ibGVtcyBpbiBhbnkgc2l0dWF0aW9uOyB0aGV5JiMzOTtyZSBhbGwgKnNwZWNpZmljKiB0byB0aGUgYG1hYzgwMjExX2h3c2ltYCB2aXJ0dWFsIGRyaXZlci4gVGhhdOKAmXMgZ29vZCBmcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLgoKU28sIHRoZSBwYXRjaCBpcyB1cGRhdGluZyBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIGhhbmRsaW5nIGluIGBtYWM4MDIxMV9od3NpbWAuIFdoZW4gcmFkaW9zIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQgd2l0aG91dCBhIHNwZWNpZmljIGdlbmxfaW5mbyBjb250ZXh0LCBpdCYjMzk7cyBub3cgdXNpbmcgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYCB3aXRoIHRoZSB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIGBnZW5sbXNnX211bHRpY2FzdGAuCgpJdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpczogYG1hYzgwMjExX2h3c2ltYCBpcyBhIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyIHRoYXQmIzM5O3MgZWFzaWx5IGFjY2Vzc2libGUgYW5kIHRlc3RlZCB0aHJvdWdoIG5ldGxpbmssIGVzcGVjaWFsbHkgd2l0aGluIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBjYW4gaGVscCB1cyB2ZXJpZnkgdGhhdCBtdWx0aWNhc3QgbWVzc2FnaW5nIGFuZCBsaWZlY3ljbGUgaW50ZXJhY3Rpb25zIGFyZSBjb3JyZWN0IGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMgZHVyaW5nIHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5ldG5zIHRlYXJkb3duLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gZmxhZywgbGV0JiMzOTtzIHByb2NlZWQuCgpJ4oCZbSBjb25maWRlbnQgd2l0aCB0aGVzZSBmaW5kaW5ncy4gTGV0JiMzOTtzIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtod3NpbV9tY2FzdF9jb25maWdfbXNnJiMzNDssCiAgICAmIzM0O2h3c2ltX21jYXN0X25ld19yYWRpbyYjMzQ7LAogICAgJiMzNDtod3NpbV9tY2FzdF9kZWxfcmFkaW8mIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyYjMzQ7LAogICAgJiMzNDtod3NpbV9uZXdfcmFkaW9fbmwmIzM0OywKICAgICYjMzQ7aHdzaW1fZGVsX3JhZGlvX25sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG11bHRpY2FzdCBldmVudCBub3RpZmljYXRpb24gbG9naWMgZHVyaW5nIHJhZGlvIGNyZWF0aW9uIGFuZCBkZWxldGlvbiBpbiBtYWM4MDIxMV9od3NpbSB0byB0YXJnZXQgdGhlIHJhZGlvJiMzOTtzIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIHZpYSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIHdoZW4gZ2VubF9pbmZvIGlzIE5VTEwuIG1hYzgwMjExX2h3c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChod3NpbS9ubDgwMjExKSBhbmQgbmV0bnMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmFtZXNwYWNlIGV4aXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fbWNhc3RfY29uZmlnX21zZyYjMzQ7LAogICAgJiMzNDtod3NpbV9tY2FzdF9uZXdfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbWNhc3RfZGVsX3JhZGlvJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX25ld19yYWRpbyYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbmV3X3JhZGlvX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX2RlbF9yYWRpb19ubCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbyYjMzk7cyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBtYWM4MDIxMV9od3NpbSB0byB1c2UgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSBpbnN0ZWFkIG9mIGdlbmxtc2dfbXVsdGljYXN0KCkgd2hlbiBicm9hZGNhc3RpbmcgbmV3L2RlbGV0ZWQgcmFkaW8gbmV0bGluayBub3RpZmljYXRpb25zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBnZW5sX2luZm8sIHBhc3NpbmcgdGhlIHRhcmdldCBuZXRucyBmcm9tIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGFsdGVyIGRhdGEgc2VyaWFsaXphdGlvbiwgbW9kaWZ5IGJ1ZmZlciBib3VuZHMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuIEJlY2F1c2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmQwYWU1MjBiYzMxNTcxZGYwYmJmNDRkZGI4MmU4MGJlN2U4YjEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMDoxMjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKaW5kZXggMDJiNmQ4MWNjY2QxMS4uZDc3ZjU0ZGFlZmM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKQEAgLTQzOTYsMTUgJiM0Mzs0Mzk2LDE1IEBAIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zIHsKIAlib29sIGJhY2tncm91bmRfcmFkYXI7CiB9OwogCi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsCiYjNDM7c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlpZiAoaW5mbykKIAkJZ2VubF9ub3RpZnkoJmFtcDtod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLAogCQkJICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7CiAJZWxzZQotCQlnZW5sbXNnX211bHRpY2FzdCgmYW1wO2h3c2ltX2dlbmxfZmFtaWx5LCBtY2FzdF9za2IsIDAsCi0JCQkJICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpOwomIzQzOwkJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoJmFtcDtod3NpbV9nZW5sX2ZhbWlseSwgbmV0LCBtY2FzdF9za2IsIDAsCiYjNDM7CQkJCQlIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLApAQCAtNDQ4OCw3ICYjNDM7NDQ4OCw4IEBAIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiYjNDM7c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LAomIzQzOwkJCQkgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCQkJICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYjsKQEAgLTQ1MDgsNyAmIzQzOzQ1MDksNyBAQCBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogCiAJZ2VubG1zZ19lbmQobWNhc3Rfc2tiLCBkYXRhKTsKIAotCWh3c2ltX21jYXN0X2NvbmZpZ19tc2cobWNhc3Rfc2tiLCBpbmZvKTsKJiM0MzsJaHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7CiAJcmV0dXJuOwogCiBvdXRfZXJyOgpAQCAtNjE5MCw3ICYjNDM7NjE5MSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJaHdzaW1fcmFkaW9zX2dlbmVyYXRpb24mIzQzOyYjNDM7OwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHdzaW1fcmFkaW9fbG9jayk7CiAKLQlod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCBpbmZvLCBwYXJhbSk7CiYjNDM7CWh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIHdpcGh5X25ldChkYXRhLSZndDtody0mZ3Q7d2lwaHkpLCBpbmZvLCBwYXJhbSk7CiAKIAlyZXR1cm4gaWR4OwogCkBAIC02MjA4LDcgJiM0Mzs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIH0KIAogc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLAotCQkJCSAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl2b2lkICpkYXRhOwpAQCAtNjIzNCw3ICYjNDM7NjIzNSw3IEBAIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSwKIAogCWdlbmxtc2dfZW5kKHNrYiwgZGF0YSk7CiAKLQlod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgaW5mbyk7CiYjNDM7CWh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pOwogCiAJcmV0dXJuOwogCkBAIC02MjQ2LDcgJiM0Mzs2MjQ3LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLAogCQkJCSAgICAgY29uc3QgY2hhciAqaHduYW1lLAogCQkJCSAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS0mZ3Q7aWR4LCBod25hbWUsIGluZm8pOwomIzQzOwlod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS0mZ3Q7aWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLSZndDtody0mZ3Q7d2lwaHkpLCBpbmZvKTsKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS0mZ3Q7ZGVidWdmcyk7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS0mZ3Q7aHcpOwogCWRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLSZndDtkZXYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1OQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gbWVzc2FnaW5nIHdpdGhpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlci4gVGhlIGBkaWZmYCBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGZ1bmN0aW9uLiBUaGUgY2hhbmdlIGlzIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBzbyBsZXQmIzM5O3MgcGFyc2UgdGhpcyBjYXJlZnVsbHkuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHNpZ25hdHVyZSB3YXM6CgpgYGBjCnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwKCQkJCSAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCmBgYAoKQW5kIGl0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIHRvOgoKYGBgYwpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCwKCQkJCSAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCmBgYAoKVGhlIGFkZGl0aW9uIG9mIHRoZSBgc3RydWN0IG5ldCAqbmV0YCBhcmd1bWVudCBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIG1lc3NhZ2luZyBpcyBiZWNvbWluZyBuZXQgbmFtZXNwYWNlIGF3YXJlLiBOb3csIHRoZSBmdW5jdGlvbiBhY2NlcHRzIGEgYHN0cnVjdCBuZXRgIHBvaW50ZXIuIFRoaXMgaXMgbGlrZWx5IGRvbmUgdG8gZW5hYmxlIHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiB0byBiZSBzcGVjaWZpYyB0byB0aGUgbmV0d29yayBuYW1lc3BhY2UuCgpMZXQmIzM5O3MgbG9vayBmdXJ0aGVyLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyB0aGUgYGdlbmxtc2dfbXVsdGljYXN0YCBjYWxsIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtkIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBob3cgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGlzICpjYWxsZWQqIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBuZXRgIGlzIGJlaW5nIHBvcHVsYXRlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBuZXcgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYCBjYWxsIGhhcy4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSBuZXR3b3JrIHNlZ21lbnRhdGlvbiBmb3Igb3VyIHZpcnR1YWwgZGV2aWNlcy4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIGF3YXJlbmVzcyBpbiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBtZXNzYWdpbmcgd2l0aGluIHRoZSBod3NpbSBkcml2ZXIsIHByb2JhYmx5IHRvIGVuaGFuY2UgbmV0d29yayBpc29sYXRpb24gb3IgdG8gc3VwcG9ydCBtb3JlIGNvbXBsZXggdmlydHVhbGl6ZWQgbmV0d29ya2luZyBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzOTA6XHRcdHUzMiBpZnR5cGVzO1xuNDM5MTpcdFx0dTMyICpjaXBoZXJzO1xuNDM5MjpcdFx0dTggbl9jaXBoZXJzO1xuNDM5MzpcdFx0Ym9vbCBtbG87XG40Mzk0Olx0XHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1zcl9jYXBhYmlsaXRpZXMgKnBtc3JfY2FwYTtcbjQzOTU6XHRcdGJvb2wgbmFuX2RldmljZTtcbjQzOTY6XHRcdGJvb2wgYmFja2dyb3VuZF9yYWRhcjtcbjQzOTc6XHR9O1xuNDM5ODpcdFxuNDM5OTpcdHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxuNDQwMDpcdFx0XHRcdFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjQ0MDE6XHR7XG40NDAyOlx0XHRpZiAoaW5mbylcbjQ0MDM6XHRcdFx0Z2VubF9ub3RpZnkoXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG1jYXN0X3NrYiwgaW5mbyxcbjQ0MDQ6XHRcdFx0XHQgICAgSFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcbjQ0MDU6XHRcdGVsc2VcbjQ0MDY6XHRcdFx0Z2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxuNDQwNzpcdFx0XHRcdFx0XHRIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuNDQwODpcdH1cbjQ0MDk6XHRcbjQ0MTA6XHRzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLFxuNDQxMTpcdFx0XHRcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXG40NDEyOlx0e1xuNDQxMzpcdFx0aW50IHJldDtcbjQ0MTQ6XHRcbjQ0MTU6XHRcdHJldCA9IG5sYV9wdXRfdTMyKHNrYiwgSFdTSU1fQVRUUl9SQURJT19JRCwgaWQpO1xuNDQxNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0MTc6XHRcdFx0cmV0dXJuIHJldDtcbjQ0MTg6XHRcbjQ0MTk6XHRcdGlmIChwYXJhbS1cdTAwM2VjaGFubmVscykge1xuNDQyMDpcdFx0XHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfQ0hBTk5FTFMsIHBhcmFtLVx1MDAzZWNoYW5uZWxzKTtcbjQ0MjE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0MjI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuNDQyMzpcdFx0fVxuNDQyNDpcdFxuNDQyNTpcdFx0aWYgKHBhcmFtLVx1MDAzZXJlZ19hbHBoYTIpIHtcbjQ0MjY6XHRcdFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkVHX0hJTlRfQUxQSEEyLCAyLFxuNDQyNzpcdFx0XHRcdCAgICAgIHBhcmFtLVx1MDAzZXJlZ19hbHBoYTIpO1xuNDQyODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDQyOTpcdFx0XHRcdHJldHVybiByZXQ7XG40NDMwOlx0XHR9XG40NDMxOlx0XG40NDMyOlx0XHRpZiAocGFyYW0tXHUwMDNlcmVnZCkge1xuNDQzMzpcdFx0XHRpbnQgaTtcbjQ0MzQ6XHRcbjQ0MzU6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tKTsgaSYjNDM7JiM0MzspIHtcbjQ0MzY6XHRcdFx0XHRpZiAoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbVtpXSAhPSBwYXJhbS1cdTAwM2VyZWdkKVxuNDQzNzpcdFx0XHRcdFx0Y29udGludWU7XG40NDM4Olx0XG40NDM5Olx0XHRcdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JFR19DVVNUT01fUkVHLCBpKTtcbjQ0NDA6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDQ0MTpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjQ0NDI6XHRcdFx0XHRicmVhaztcbjQ0NDM6XHRcdFx0fVxuNDQ0NDpcdFx0fVxuNDQ0NTpcdFxuNDQ0NjpcdFx0aWYgKHBhcmFtLVx1MDAzZXJlZ19zdHJpY3QpIHtcbjQ0NDc6XHRcdFx0cmV0ID0gbmxhX3B1dF9mbGFnKHNrYiwgSFdTSU1fQVRUUl9SRUdfU1RSSUNUX1JFRyk7XG40NDQ4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDQ5Olx0XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gZXhhbWluaW5nIGxpbmVzIDYxODAgdG8gNjI2MCBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNgOgoKKipEaXZpbmcgaW50byBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBgaHdzaW1gIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDYxODAgdGhyb3VnaCA2MjYwLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSBzb21lIGNvbnRleHQgb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBibG9jayBvZiBjb2RlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFuZCBwYXRoLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGludGVyZmFjZSBzaW11bGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5IG9yIHBlcmhhcHMgdHJhY2sgZG93biBhIGJ1Zywgb3IgdW5kZXJzdGFuZCBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIE1BQzgwMjExIGNvcmUuCgpJIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZWl0aGVyIGhhcmR3YXJlIHNpbXVsYXRpb24gYmVoYXZpb3IsIG1heWJlIHBhY2tldCBpbmplY3Rpb24sIHJhdGUgY29udHJvbCBoYW5kbGluZywgb3IgcGVyaGFwcyBzb21lIGtpbmQgb2YgZXJyb3IgbWFuYWdlbWVudCBvciBldmVudCBwcm9jZXNzaW5nLiBTaW5jZSBJIGtub3cgdGhpcyBjb2RlIHByZXR0eSB3ZWxsLCBJJiMzOTttIGV4cGVjdGluZyB0byBlaXRoZXIgcmVmcmVzaCBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHNpbXVsYXRpb24sIG9yIHBvc3NpYmx5IHNwb3QgYSBwb3RlbnRpYWwgYXJlYSBmb3Igb3B0aW1pemF0aW9uIG9yIGEgc3VidGxlIGJ1Zy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGRhdGEgc3RydWN0dXJlcyB1c2VkLCBmdW5jdGlvbnMgY2FsbGVkLCBhbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0aGF0IGhlbHAgZGVmaW5lIHRoZSBsb2dpYyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBjb2RlIHJhbmdlLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgd2l0aCBrZXJuZWwgdGltaW5nLiBJIGFtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpbnRlcnJ1cHQgYW5kIERNQSBpbnRlcmFjdGlvbnMgaWYgdGhleSBhcmUgcmVsZXZhbnQgd2l0aGluIHRoZSByZWxldmFudCBjb2RlLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGJsb2NrLCBJIGNhbiBsaWtlbHkgaWRlbnRpZnkgdGhlIGdlbmVyYWwgY29udHJvbCBmbG93IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc2ltdWxhdGlvbiBtb2RlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjE4MDpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuNjE4MTpcdFx0XHRpZiAoaW5mbykge1xuNjE4MjpcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7cGVybSBhZGRyIGFscmVhZHkgcHJlc2VudFwmIzM0Oyk7XG42MTgzOlx0XHRcdFx0TkxfU0VUX0JBRF9BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuNjE4NDpcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfUEVSTV9BRERSXSk7XG42MTg1Olx0XHRcdH1cbjYxODY6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG42MTg3Olx0XHRcdGdvdG8gZmFpbGVkX2ZpbmFsX2luc2VydDtcbjYxODg6XHRcdH1cbjYxODk6XHRcbjYxOTA6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGF0YS1cdTAwM2VsaXN0LCBcdTAwMjZod3NpbV9yYWRpb3MpO1xuNjE5MTpcdFx0aHdzaW1fcmFkaW9zX2dlbmVyYXRpb24mIzQzOyYjNDM7O1xuNjE5MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG42MTkzOlx0XG42MTk0Olx0XHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbjYxOTU6XHRcbjYxOTY6XHRcdHJldHVybiBpZHg7XG42MTk3Olx0XG42MTk4Olx0ZmFpbGVkX2ZpbmFsX2luc2VydDpcbjYxOTk6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVx1MDAzZWRlYnVnZnMpO1xuNjIwMDpcdFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cdTAwM2Vodyk7XG42MjAxOlx0ZmFpbGVkX2h3OlxuNjIwMjpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXHUwMDNlZGV2KTtcbjYyMDM6XHRmYWlsZWRfYmluZDpcbjYyMDQ6XHRcdGRldmljZV91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlZGV2KTtcbjYyMDU6XHRmYWlsZWRfZHJ2ZGF0YTpcbjYyMDY6XHRcdGllZWU4MDIxMV9mcmVlX2h3KGh3KTtcbjYyMDc6XHRmYWlsZWQ6XG42MjA4Olx0XHRyZXR1cm4gZXJyO1xuNjIwOTpcdH1cbjYyMTA6XHRcbjYyMTE6XHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXG42MjEyOlx0XHRcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjYyMTM6XHR7XG42MjE0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuNjIxNTpcdFx0dm9pZCAqZGF0YTtcbjYyMTY6XHRcdGludCByZXQ7XG42MjE3Olx0XG42MjE4Olx0XHRza2IgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG42MjE5Olx0XHRpZiAoIXNrYilcbjYyMjA6XHRcdFx0cmV0dXJuO1xuNjIyMTpcdFxuNjIyMjpcdFx0ZGF0YSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIDAsXG42MjIzOlx0XHRcdFx0ICAgSFdTSU1fQ01EX0RFTF9SQURJTyk7XG42MjI0Olx0XHRpZiAoIWRhdGEpXG42MjI1Olx0XHRcdGdvdG8gZXJyb3I7XG42MjI2Olx0XG42MjI3Olx0XHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcbjYyMjg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42MjI5Olx0XHRcdGdvdG8gZXJyb3I7XG42MjMwOlx0XG42MjMxOlx0XHRyZXQgPSBubGFfcHV0KHNrYiwgSFdTSU1fQVRUUl9SQURJT19OQU1FLCBzdHJsZW4oaHduYW1lKSxcbjYyMzI6XHRcdFx0ICAgICAgaHduYW1lKTtcbjYyMzM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42MjM0Olx0XHRcdGdvdG8gZXJyb3I7XG42MjM1Olx0XG42MjM2Olx0XHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xuNjIzNzpcdFxuNjIzODpcdFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIG5ldCwgaW5mbyk7XG42MjM5Olx0XG42MjQwOlx0XHRyZXR1cm47XG42MjQxOlx0XG42MjQyOlx0ZXJyb3I6XG42MjQzOlx0XHRubG1zZ19mcmVlKHNrYik7XG42MjQ0Olx0fVxuNjI0NTpcdFxuNjI0NjpcdHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbjYyNDc6XHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxuNjI0ODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuNjI0OTpcdHtcbjYyNTA6XHRcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuNjI1MTpcdFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG42MjUyOlx0XHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVx1MDAzZWh3KTtcbjYyNTM6XHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG42MjU0Olx0XHRkZXZpY2VfdW5yZWdpc3RlcihkYXRhLVx1MDAzZWRldik7XG42MjU1Olx0XHRpZWVlODAyMTFfZnJlZV9odyhkYXRhLVx1MDAzZWh3KTtcbjYyNTY6XHR9XG42MjU3Olx0XG42MjU4Olx0c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfcmFkaW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbjYyNTk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaGVyZSBpbnZvbHZlcyB1cGRhdGluZyB0aGUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbmV0ICpuZXRgIGFyZ3VtZW50LiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgd2l0aCB0aGUgb3JpZ2luYWwgbG9naWMgc3RpbGwgcHJlc2VudCB3aXRoaW4gYW4gYGlmIChpbmZvKWAgYmxvY2suIFdoZW4gYSBgZ2VubF9pbmZvYCBpcyBwcmVzZW50LCB0aGUgY2FsbCB0byBgZ2VubF9ub3RpZnlgIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgYWRkZWQgYG5ldGAgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCB3aGVuIGBpbmZvYCBpcyBgTlVMTGAuIEluIHRoaXMgYGluZm8gPT0gTlVMTGAgY2FzZSwgd2hlcmUgcHJldmlvdXNseSB0aGUgY29kZSB1c2VkIHRoZSBkZWZhdWx0IG11bHRpY2FzdCBiZWhhdmlvciwgaXQgbm93IGV4cGxpY2l0bHkgdGFyZ2V0cyB0aGUgY29ycmVjdCBuZXR3b3JrIG5hbWVzcGFjZSB1c2luZyBgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnNgLgoKVGhlIGRyaXZpbmcgbW90aXZhdGlvbiBpcyBjbGVhcjogdG8gZW5zdXJlIG11bHRpY2FzdCBtZXNzYWdlcyByZWxhdGVkIHRvIHJhZGlvIGNvbmZpZ3VyYXRpb24gYXJlIHNlbnQgdG8gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHdoZXJlIHRoZSB3aXBoeSBhY3R1YWxseSAqbGl2ZXMqLCByYXRoZXIgdGhhbiBkZWZhdWx0aW5nIHRvIGBpbml0X25ldGAuIFRoaXMgaXMgY3JpdGljYWwgd2hlbiByYWRpb3MgYXJlIGNyZWF0ZWQgb3IgZGVzdHJveWVkIG91dHNpZGUgb2YgYSBkaXJlY3QgZ2VuZXJpYyBuZXRsaW5rIHJlcXVlc3QgY29udGV4dCDigJMgYSBjb21tb24gc2NlbmFyaW8gZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiwgY2xlYW51cCwgb3Igd2hlbiB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcyBvciBvdGhlciBpbnRlcm5hbCBtZWNoYW5pc21zLiBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCBhbmQgYGh3c2ltX21jYXN0X2RlbF9yYWRpb2AgcGFzcyBgbmV0YCAob2J0YWluZWQgZnJvbSBgd2lwaHlfbmV0KGRhdGEtJmd0O2h3LSZndDt3aXBoeSlgKSBpbnRvIGBod3NpbV9tY2FzdF9jb25maWdfbXNnYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LiBJJiMzOTt2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBTbywgaXMgdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGlzbiYjMzk7dC4gVGhlIG1vZGlmaWNhdGlvbiBzaW1wbHkgcGFzc2VzIGEgcG9pbnRlciB0byBhIHZhbGlkIGBzdHJ1Y3QgbmV0YCBvYmplY3QsIGFuZCB0aGUgdW5kZXJseWluZyBgbWNhc3Rfc2tiYCBtZXNzYWdlIHN0cnVjdHVyZSBpc24mIzM5O3QgYWx0ZXJlZCBhdCBhbGwuIE5vIG5ldyBkYXRhIGlzIGludHJvZHVjZWQsIG5vIGV4aXN0aW5nIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGFmZmVjdGVkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBhcmUgaW1wYWN0ZWQuIFRoZSBkYXRhIHdpdGhpbiB0aGUgbWVzc2FnZSBpcyB1bmNoYW5nZWQsIGFuZCBJIHNlZSBubyByaXNrIG9mIG1lbW9yeSBsZWFrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHJldmlldyB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkmIzM5O3ZlIG1pc3NlZC4gQnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSB3ZWxsLXNjb3BlZCBjaGFuZ2UgZGVzaWduZWQgdG8gY29ycmVjdCBhIG5hbWVzcGFjZSBpc3N1ZSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c2ltX21jYXN0XyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jPTc5MD1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGh3c2ltX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgwMi1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6ODAzOnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYixcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODA0LVx0XHRcdFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgxMy1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6ODE0OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaHdzaW1fcGh5ICpwaHkpXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgxNS17XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MzItXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjgzMzpcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2cobWNhc3Rfc2tiLCBpbmZvKTtcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODM0LVx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9ODk2PXN0YXRpYyBpbnQgaHdzaW1fYWRkX29uZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy05NzktXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjk4MDpcdGh3c2ltX21jYXN0X25ld19yYWRpbyhpbmZvLCBwaHkpO1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy05ODEtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NDM3OD1zdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDM5OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQzOTk6c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NDAwLVx0XHRcdFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00NDEwPXN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ0OTE6c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5Mi1cdFx0XHRcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTExLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDUxMjpcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2cobWNhc3Rfc2tiLCBuZXQsIGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDUxMy1cdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01Njc1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYxOTQ6XHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYxOTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyMTE6c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMi1cdFx0XHRcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjM4Olx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIG5ldCwgaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTYyNDY9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyNDkte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjI1MDpcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI1MS1cdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVx1MDAzZWRlYnVnZnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYxCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgQ29uY2VybnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIG11bHRpY2FzdCBub3RpZmljYXRpb25zIGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLiBUaGUgZmlyc3Qgc3RlcCB3YXMgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIsIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCB1c2VzIG9mIGBod3NpbV9tY2FzdF8qYCBpbiB0aGF0IGZpbGUuIEdyZXBwaW5nIHRoZSBjb2RlIHNob3dlZCBhbGwgdGhlIHJlbGV2YW50IGNhbGxzLiBHb29kLCB0aGF0JiMzOTtzIGRvbmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSByZXF1aXJlbWVudHMgZm9yIEtNU0FOLiBJIG5lZWQgdG8gc2V0IGBOZWVkc0tNU0FOYCBhbmQgdGhlIGBLTVNBTlJlYXNvbmluZ2Agc3RyaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGNoYW5naW5nIHRoZSBtdWx0aWNhc3QgZnVuY3Rpb24gY2FsbHMgdG8gdGFyZ2V0IHRoZSBjb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlIHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AgaW5zdGVhZCBvZiBgZ2VubG1zZ19tdWx0aWNhc3RgICp3aGVuKiB0aGUgYGluZm9gIHBvaW50ZXIgaXMgTlVMTC4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggaXMganVzdCAqcGFzc2luZyogYSBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyLCBgd2lwaHlfbmV0KC4uLilgLCB0byBleGlzdGluZyBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGZ1bmN0aW9ucy4KCkNydWNpYWxseSwgaXQmIzM5O3MgKm5vdCogYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgbmV3IG1lbW9yeSwgbm90IG1vZGlmeWluZyBleGlzdGluZyBzdHJ1Y3R1cmUgZmllbGRzIGluIGEgd2F5IHRoYXQgY291bGQgaW50cm9kdWNlIG1lbW9yeSBoYXphcmRzLCBhbmQgaXQmIzM5O3Mgbm90IGNvcHlpbmcgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2luZyBidWZmZXIgYm91bmRhcnkgaXNzdWVzLCBvciBjcmVhdGluZyBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIEFueSBwb2ludGVyIHByb2JsZW1zIG9yIGxpZmV0aW1lIGlzc3VlcyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgbm9ybWFsIGRldGVjdG9ycywgc3VjaCBhcyBLQVNBTiwgS0FTTFIsIGFuZCBnZW5lcmFsIGNyYXNoIGR1bXBzLCBhcyB0aGV5IHdvdWxkIGJlIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZSBpbiB0aGVzZSBhcmVhcy4KCkdpdmVuIGFsbCBvZiB0aGF0LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBzYWZlIGNoYW5nZS4gT2theSwgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMgd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIG1hYzgwMjExX2h3c2ltIHRvIHVzZSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIGluc3RlYWQgb2YgZ2VubG1zZ19tdWx0aWNhc3QoKSB3aGVuIGJyb2FkY2FzdGluZyBuZXcvZGVsZXRlZCByYWRpbyBuZXRsaW5rIG5vdGlmaWNhdGlvbnMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIGdlbmxfaW5mbywgcGFzc2luZyB0aGUgdGFyZ2V0IG5ldG5zIGZyb20gd2lwaHlfbmV0KGRhdGEtXHUwMDNlaHctXHUwMDNld2lwaHkpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWx0ZXIgZGF0YSBzZXJpYWxpemF0aW9uLCBtb2RpZnkgYnVmZmVyIGJvdW5kcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcy4gQmVjYXVzZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbWFjODAyMTFfaHdzaW0gdG8gdXNlIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgaW5zdGVhZCBvZiBnZW5sbXNnX211bHRpY2FzdCgpIHdoZW4gYnJvYWRjYXN0aW5nIG5ldy9kZWxldGVkIHJhZGlvIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZ2VubF9pbmZvLCBwYXNzaW5nIHRoZSB0YXJnZXQgbmV0bnMgZnJvbSB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhbHRlciBkYXRhIHNlcmlhbGl6YXRpb24sIG1vZGlmeSBidWZmZXIgYm91bmRzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0MS42NDgxODk1NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk2NjE1MDU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHdzaW1fbWNhc3RfY29uZmlnX21zZ1wiLFxuICAgIFwiaHdzaW1fbWNhc3RfbmV3X3JhZGlvXCIsXG4gICAgXCJod3NpbV9tY2FzdF9kZWxfcmFkaW9cIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX25ld19yYWRpb1wiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvXCIsXG4gICAgXCJod3NpbV9uZXdfcmFkaW9fbmxcIixcbiAgICBcImh3c2ltX2RlbF9yYWRpb19ubFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBtYWM4MDIxMV9od3NpbSB0byB1c2UgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSBpbnN0ZWFkIG9mIGdlbmxtc2dfbXVsdGljYXN0KCkgd2hlbiBicm9hZGNhc3RpbmcgbmV3L2RlbGV0ZWQgcmFkaW8gbmV0bGluayBub3RpZmljYXRpb25zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBnZW5sX2luZm8sIHBhc3NpbmcgdGhlIHRhcmdldCBuZXRucyBmcm9tIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWx0ZXIgZGF0YSBzZXJpYWxpemF0aW9uLCBtb2RpZnkgYnVmZmVyIGJvdW5kcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcy4gQmVjYXVzZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbydzIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIHZpYSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIHdoZW4gZ2VubF9pbmZvIGlzIE5VTEwuIG1hYzgwMjExX2h3c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChod3NpbS9ubDgwMjExKSBhbmQgbmV0bnMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmFtZXNwYWNlIGV4aXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEyOjQxLjY0ODE5NjQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5NjA5NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDAwOjEyOjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5AQCAtNDM5NiwxNSArNDM5NiwxNSBAQCBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XFxuIFxcdGJvb2wgYmFja2dyb3VuZF9yYWRhcjtcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYixcXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0aWYgKGluZm8pXFxuIFxcdFxcdGdlbmxfbm90aWZ5KFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxcbiBcXHRcXHRcXHQgICAgSFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRnZW5sbXNnX211bHRpY2FzdChcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG1jYXN0X3NrYiwgMCxcXG4tXFx0XFx0XFx0XFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLFxcbkBAIC00NDg4LDcgKzQ0ODgsOCBAQCBzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICptY2FzdF9za2I7XFxuQEAgLTQ1MDgsNyArNDUwOSw3IEBAIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIFxcbiBcXHRnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpO1xcbiBcXG4tXFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIGluZm8pO1xcbitcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcXG4gXFx0cmV0dXJuO1xcbiBcXG4gb3V0X2VycjpcXG5AQCAtNjE5MCw3ICs2MTkxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4gXFx0aHdzaW1fcmFkaW9zX2dlbmVyYXRpb24rKztcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xcbiBcXG4tXFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgaW5mbywgcGFyYW0pO1xcbitcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xcbiBcXG4gXFx0cmV0dXJuIGlkeDtcXG4gXFxuQEAgLTYyMDgsNyArNjIwOSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHR2b2lkICpkYXRhO1xcbkBAIC02MjM0LDcgKzYyMzUsNyBAQCBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXFxuIFxcbiBcXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xcbiBcXG4tXFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIGluZm8pO1xcbitcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcXG4gXFxuIFxcdHJldHVybjtcXG4gXFxuQEAgLTYyNDYsNyArNjI0Nyw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4ge1xcbi1cXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIGluZm8pO1xcbitcXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLCBpbmZvKTtcXG4gXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXFx1MDAzZWRlYnVnZnMpO1xcbiBcXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVxcdTAwM2Vodyk7XFxuIFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVxcdTAwM2VkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0Mi4yNjg4NDAwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDcwNDgwMjI0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh3c2ltX21jYXN0X2NvbmZpZ19tc2dcIixcbiAgICBcImh3c2ltX21jYXN0X25ld19yYWRpb1wiLFxuICAgIFwiaHdzaW1fbWNhc3RfZGVsX3JhZGlvXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9cIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb1wiLFxuICAgIFwiaHdzaW1fbmV3X3JhZGlvX25sXCIsXG4gICAgXCJod3NpbV9kZWxfcmFkaW9fbmxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbydzIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIHZpYSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIHdoZW4gZ2VubF9pbmZvIGlzIE5VTEwuIG1hYzgwMjExX2h3c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChod3NpbS9ubDgwMjExKSBhbmQgbmV0bnMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmFtZXNwYWNlIGV4aXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MTI6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtNDM5NiwxNSArNDM5NiwxNSBAQCBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XG4gXHRib29sIGJhY2tncm91bmRfcmFkYXI7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvKVxuIFx0XHRnZW5sX25vdGlmeShcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxuIFx0XHRcdCAgICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuIFx0ZWxzZVxuLVx0XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCAwLFxuLVx0XHRcdFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuK1x0XHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbmV0LCBtY2FzdF9za2IsIDAsXG4rXHRcdFx0XHRcdEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsXG5AQCAtNDQ4OCw3ICs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuK3N0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdCAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICptY2FzdF9za2I7XG5AQCAtNDUwOCw3ICs0NTA5LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcbiBcdGdlbmxtc2dfZW5kKG1jYXN0X3NrYiwgZGF0YSk7XG4gXG4tXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgaW5mbyk7XG4rXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcbiBcdHJldHVybjtcbiBcbiBvdXRfZXJyOlxuQEAgLTYxOTAsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG4gXG4tXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCBpbmZvLCBwYXJhbSk7XG4rXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbiBcbiBcdHJldHVybiBpZHg7XG4gXG5AQCAtNjIwOCw3ICs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK1x0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHZvaWQgKmRhdGE7XG5AQCAtNjIzNCw3ICs2MjM1LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuIFxuIFx0Z2VubG1zZ19lbmQoc2tiLCBkYXRhKTtcbiBcbi1cdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuIFxuIFx0cmV0dXJuO1xuIFxuQEAgLTYyNDYsNyArNjI0Nyw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbi1cdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuIFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG4gXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVx1MDAzZWh3KTtcbiBcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0Mi4yNjg4NDI5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNzc1ODEzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFyZ2V0IGlzIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AuIFJpZ2h0LCBzbyB0aGlzIGlzIHRoZSBgbWFjODAyMTFfaHdzaW1gIGRyaXZlciDigJMgdGhlIHNpbXVsYXRlZCBXaUZpIGRyaXZlciB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBpdHNlbGYuIEEgZ29vZCBjaG9pY2UgZm9yIGZ1enppbmcsIEknZCBzYXksIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IGl04oCZcyBmcmVxdWVudGx5IHRhcmdldGVkIGJ5IHN5emthbGxlciB0aHJvdWdoIG5sODAyMTEgYW5kIHRoZSBod3NpbSBuZXRsaW5rIGludGVyZmFjZSAodGhhdCdzIHRoZSBgbWFjODAyMTFfaHdzaW1gIGdlbmwgZmFtaWx5KS4gTm93LCB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gVGltZSB0byBjYXJlZnVsbHkgcmVhZCB0aGUgY2hhbmdlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCB3aHksIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0OS41NDY0Mjg0NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4NDMyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZToxOm9iai0kKENPTkZJR19NQUM4MDIxMV9IV1NJTSlcXHQrPSBtYWM4MDIxMV9od3NpbS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZS0yLW1hYzgwMjExX2h3c2ltLW9ianNcXHRcXHQrPSBtYWM4MDIxMV9od3NpbV9tYWluLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC04LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDo5OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjEwOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTExLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTIxNz1zdHJ1Y3QgaHdzaW1fdHhfcmF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjMwLSAqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzMTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1JUU19DVFM6IFVzZSBSVFMvQ1RTIGV4Y2hhbmdlIGZvciB0aGlzIHJhdGUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzMjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUOiBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uIGlzIHJlcXVpcmVkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzMtICpcXHRUaGlzIGlzIHNldCBpZiB0aGUgY3VycmVudCBCU1MgcmVxdWlyZXMgRVJQIHByb3RlY3Rpb24uXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNDogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOiBVc2Ugc2hvcnQgcHJlYW1ibGUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTOiBIVCByYXRlLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzY6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1M6IFZIVCBNQ1MgcmF0ZSwgaW4gdGhpcyBjYXNlIHRoZSBpZHggZmllbGQgaXNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjM3LSAqXFx0c3BsaXQgaW50byBhIGhpZ2hlciA0IGJpdHMgKE5zcykgYW5kIGxvd2VyIDQgYml0cyAoTUNTIG51bWJlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM4OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19HUkVFTl9GSUVMRDogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByYXRlIHNob3VsZCBiZSB1c2VkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTIzOS0gKlxcdGluIEdyZWVuZmllbGQgbW9kZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjQwOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ180MF9NSFpfV0lEVEg6IEluZGljYXRlcyBpZiB0aGUgQ2hhbm5lbCBXaWR0aCBzaG91bGQgYmVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQxLSAqXFx0NDAgTUh6LlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDI6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzgwX01IWl9XSURUSDogSW5kaWNhdGVzIDgwIE1IeiB0cmFuc21pc3Npb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjQzOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ18xNjBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgMTYwIE1IeiB0cmFuc21pc3Npb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ0LSAqXFx0KDgwKzgwIGlzbid0IHN1cHBvcnRlZCB5ZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDYtICpcXHR0aGUgYWRqYWNlbnQgMjAgTUh6IGNoYW5uZWxzLCBpZiB0aGUgY3VycmVudCBjaGFubmVsIHR5cGUgaXNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ3LSAqXFx0Tkw4MDIxMV9DSEFOX0hUNDBNSU5VUyBvciBOTDgwMjExX0NIQU5fSFQ0MFBMVVMuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0ODogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfU0hPUlRfR0k6IFNob3J0IEd1YXJkIGludGVydmFsIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlxcdHJhdGUuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjUxPWVudW0gaHdzaW1fdHhfcmF0ZV9mbGFncyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1MjpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUU1xcdFxcdD0gQklUKDApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNTM6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUXFx0XFx0PSBCSVQoMSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NDpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEVcXHQ9IEJJVCgyKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNTYtXFx0LyogcmF0ZSBpbmRleCBpcyBhbiBIVC9WSFQgTUNTIGluc3RlYWQgb2YgYW4gaW5kZXggKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU3OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX01DU1xcdFxcdFxcdD0gQklUKDMpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNTg6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTERcXHRcXHQ9IEJJVCg0KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU5OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSFxcdFxcdD0gQklUKDUpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjA6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEFcXHRcXHQ9IEJJVCg2KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYxOlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJXFx0XFx0PSBCSVQoNyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MjpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19WSFRfTUNTXFx0XFx0XFx0PSBCSVQoOCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MzpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEhcXHRcXHQ9IEJJVCg5KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY0OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEhcXHRcXHQ9IEJJVCgxMCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI2NS19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTMyOD1lbnVtIGh3c2ltX3JhdGVfaW5mb19hdHRyaWJ1dGVzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0zNDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjM0ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaC05LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjEwOiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9JX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaDoxMTojZGVmaW5lIF9fTUFDODAyMTFfSFdTSU1fSV9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaD0xNjU9dm9pZCBpZWVlODAyMTFfaHdzaW1fd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaDoxNjg6I2VuZGlmIC8qIF9fTUFDODAyMTFfSFdTSU1fSV9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTI9c3RhdGljIHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGNvbnN0IHU4ICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNzovKiBNQUM4MDIxMV9IV1NJTSBuZXRsaW5rIGZhbWlseSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxOC1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGh3c2ltX2dlbmxfZmFtaWx5O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHdzaW1fbWNncnBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI4Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgcG9saWN5ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjkwMjovKiBNQUM4MDIxMV9IV1NJTSB2aXJ0aW8gcXVldWVzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAzLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpod3NpbV92cXNbSFdTSU1fTlVNX1ZRU107XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0xNTc1PXN0YXRpYyBpbmxpbmUgdTE2IHRyYW5zX3R4X3JhdGVfZmxhZ3NfaWVlZTJod3NpbShzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTc5LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTgwOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTgxLVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODMtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg0OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4NS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfTUNTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODY6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX01DUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg3LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg4OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19HUkVFTl9GSUVMRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg5LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5MDpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTEtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTI6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX0RVUF9EQVRBO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTMtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTQ6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTUtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1ZIVF9NQ1MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5NjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTk3LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ184MF9NSFpfV0lEVEgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5ODpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTktXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzE2MF9NSFpfV0lEVEgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTYwMDpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNjAxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzQ4ND1zdGF0aWMgY29uc3QgY2hhciBtYWM4MDIxMV9od3NpbV9nc3RyaW5nc19zdGF0c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNDk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM0OTU6I2RlZmluZSBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOIEFSUkFZX1NJWkUobWFjODAyMTFfaHdzaW1fZ3N0cmluZ3Nfc3RhdHMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzQ5Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MDY9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfZXRfc3NldF9jb3VudChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MDktXFx0aWYgKHNzZXQgPT0gRVRIX1NTX1NUQVRTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MTA6XFx0XFx0cmV0dXJuIE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MTQ9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUyOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNTMwOlxcdFdBUk5fT04oaSAhPSBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNTMxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NDg9c3RhdGljIGNvbnN0IHU4IGlmdHlwZXNfZXh0X2NhcGFfYXBbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY1NzojZGVmaW5lIE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QU1xcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjU4LVxcdEZJRUxEX1BSRVBfQ09OU1QoSUVFRTgwMjExX01MRF9DQVBfT1BfVElEX1RPX0xJTktfTUFQX05FR19TVVBQLCBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjYzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiBtYWM4MDIxMV9od3NpbV9pZnR5cGVzX2V4dF9jYXBhW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjcwLVxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfRU1MX0NBUF9FTUxNUl9TVVBQT1JULFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjU2NzE6XFx0XFx0Lm1sZF9jYXBhX2FuZF9vcHMgPSBNQUM4MDIxMV9IV1NJTV9NTERfQ0FQQV9PUFMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY3Mi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzE0OD1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGh3c2ltX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTQ5OlxcdC5uYW1lID0gXFxcIk1BQzgwMjExX0hXU0lNXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTUwLVxcdC52ZXJzaW9uID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTc0Njg9c3RhdGljIHZvaWQgaHdzaW1fdmlydGlvX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0NzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzQ3NzovKiBNQUM4MDIxMV9IV1NJTSB2aXJ0aW8gZGV2aWNlIGlkIHRhYmxlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzQ3OC1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NDc5OlxcdHsgVklSVElPX0lEX01BQzgwMjExX0hXU0lNLCBWSVJUSU9fREVWX0FOWV9JRCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0ODAtXFx0eyAwIH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Nzg9c3RhdGljIHU2NCBod3NpbV9uYW5fZ2V0X21hc3Rlcl9yYW5rKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgzOlxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1VQKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04NC1cXHRcXHRtYXN0ZXJfcHJlZiA9IGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfcHJlZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9MjE2PXZvaWQgbWFjODAyMTFfaHdzaW1fbmFuX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0yNzMtXFx0aWYgKChzbG90ICE9IFNMT1RfMjRHSFpfRFcgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjI3NDpcXHQgICAgIGRhdGEtXFx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTI3NS1cXHQgICAgcnhfc3RhdHVzLmZyZXEgIT0gMjQzNylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDM2LVxcdFxcdCAgICAoY2cgPT0gb3duX2NnIFxcdTAwMjZcXHUwMDI2IGZyYW1lX2FtciBcXHUwMDNlIGN1cnJfYW1yKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NDM3OlxcdFxcdCAgICBkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTQzOC1cXHRcXHRcXHQvKiBBdm9pZCBhIHN0YXRlIHRyYW5zaXRpb24gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDY4LVxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NDY5OlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTQ3MC1cXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9NjEyPW1hYzgwMjExX2h3c2ltX25hbl9leGVjX3N0YXRlX3RyYW5zaXRpb25zKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjUtXFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNjIDMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MjY6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2Mjc6XFx0ZWxzZSBpZiAoZGF0YS1cXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjgtXFx0XFx0IGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNlPSAzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI5OlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYzMDpcXHRlbHNlIGlmIChkYXRhLVxcdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzEtXFx0XFx0IGRhdGEtXFx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXFx1MDAzZT0gMylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYzMjpcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMzOlxcdGVsc2UgaWYgKGRhdGEtXFx1MDAzZW5hbi5yb2xlID09IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzQtXFx0XFx0IGRhdGEtXFx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXFx1MDAzYyAzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjM1OlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjQxLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjQyOlxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY0My1cXHQgICAgIWhydGltZXJfYWN0aXZlKFxcdTAwMjZkYXRhLVxcdTAwM2VuYW4uZGlzY292ZXJ5X2JlYWNvbl90aW1lcikpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY1My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjY1NDpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9TQ0FOKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTU6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1dBUk1VUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY1Ni1cXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gTkFOX1dBUk1VUF9EV1NUO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NTktXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjY2MDpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVA7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NjEtXFx0XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJhbmRvbV9mYWN0b3JfdmFsaWRfZHdzdCA9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTY5NT1tYWM4MDIxMV9od3NpbV9uYW5fdHhfYmVhY29uKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTAtXFx0bmFuX2F0dHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKG1hc3Rlcl9pbmRpY2F0aW9uKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo3NTE6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTc1Mi1cXHRcXHRtYXN0ZXJfaW5kaWNhdGlvbi5tYXN0ZXJfcHJlZiA9IGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfcHJlZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Nzc0PW1hYzgwMjExX2h3c2ltX25hbl9zbG90X3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODA3LVxcdFxcdHR4X3N5bmNfYmVhY29uID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwODpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwOTpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgxMC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTg2Nz1tYWM4MDIxMV9od3NpbV9uYW5fZGlzY292ZXJ5X2JlYWNvbl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg3OS1cXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZkYXRhLVxcdTAwM2VuYW4uc3RhdGVfbG9jaykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgwOlxcdFxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjg4MTpcXHRcXHQgICAgZGF0YS1cXHUwMDNlbmFuLnJvbGUgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODgyLVxcdFxcdFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9OTA5PWludCBtYWM4MDIxMV9od3NpbV9uYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyNi1cXHRcXHQvKiBTdGFydCBpbiB0aGUgXFxcInNjYW5cXFwiIHBoYXNlIGFuZCBzdGF5IHRoZXJlIGZvciBhIGxpdHRsZSBiaXQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjkyNzpcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyOC1cXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTMwLVxcdFxcdGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfcHJlZiA9IGNvbmYtXFx1MDAzZW1hc3Rlcl9wcmVmO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6OTMxOlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTMyLVxcdFxcdG1lbXNldChcXHUwMDI2ZGF0YS1cXHUwMDNlbmFuLmN1cnJlbnRfYW1pLCAwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0xMjI2PWJvb2wgbWFjODAyMTFfaHdzaW1fbmFuX3JlY2VpdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTEyMzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzoxMjM2OlxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0xMjM3LVxcdFxcdHJldHVybiBjaGFubmVsLVxcdTAwM2VjZW50ZXJfZnJlcSA9PSAyNDM3O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC02LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6NzojaWZuZGVmIF9fTUFDODAyMTFfSFdTSU1fTkFOX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjg6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX05BTl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC05LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9MTA9ZW51bSBtYWM4MDIxMV9od3NpbV9uYW5fcGhhc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTE6XFx0TUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMjpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTM6XFx0TUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1VQLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmgtMTQtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9MTY9ZW51bSBtYWM4MDIxMV9od3NpbV9uYW5fcm9sZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxNzpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxODpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTk6XFx0TUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0yMC19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaD05OT12b2lkIG1hYzgwMjExX2h3c2ltX25hbl9sb2NhbF9zY2hlZF9jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0xMDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMDI6I2VuZGlmIC8qIF9fTUFDODAyMTFfSFdTSU1fTkFOX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTI6NDkuNjMwMjc4NzA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg3NTI4MTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gVmlydHVhbCBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGp1aWN5IGRldGFpbHMgYWJvdXQgZmVhdHVyZSBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBhcmUga2VwdC4gVGhhdCdzIHRoZSBmaXJzdCBzdG9wIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kdWxlIGZpdHMgaW50byB0aGUgYnJvYWRlciB3aXJlbGVzcyBsYW5kc2NhcGUgYW5kIHdoYXQncyBjb25maWd1cmFibGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEyOjUzLjUwNTU2Mzc5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjb25maWcgTUFDODAyMTFfSFdTSU1cXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAgIDY6XFx0XFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gICA3OlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcXG4gICA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xcbiAgIDk6XFx0XFx0ICB0byB1c2UgdGhpcyB0b29sLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgMTI6XFx0XFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVklSVF9XSUZJXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XFxuICAxOTpcXHRcXHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTI6NTMuNTA1NjkzODQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5ODU0NDAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgdGltZSB0byByZWFsbHkgc2NydXRpbml6ZSB0aGlzIHBhdGNoLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBoYXBwZW5pbmcsIHNvIGxldCdzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBzaW5jZSBJJ3ZlIHdvcmtlZCBpbiB0aGlzIGFyZWEgYmVmb3JlLiBMZXQncyBzZWUgaG93IHRob3NlIGxpbmVzIGhhdmUgYmVlbiBtb2RpZmllZCwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIGNoYW5nZXMgd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzA4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo1NS41MDQyNDA4MjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM5MDpcXHRcXHR1MzIgaWZ0eXBlcztcXG40MzkxOlxcdFxcdHUzMiAqY2lwaGVycztcXG40MzkyOlxcdFxcdHU4IG5fY2lwaGVycztcXG40MzkzOlxcdFxcdGJvb2wgbWxvO1xcbjQzOTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpwbXNyX2NhcGE7XFxuNDM5NTpcXHRcXHRib29sIG5hbl9kZXZpY2U7XFxuNDM5NjpcXHRcXHRib29sIGJhY2tncm91bmRfcmFkYXI7XFxuNDM5NzpcXHR9O1xcbjQzOTg6XFx0XFxuNDM5OTpcXHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcXG40NDAwOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNDQwMTpcXHR7XFxuNDQwMjpcXHRcXHRpZiAoaW5mbylcXG40NDAzOlxcdFxcdFxcdGdlbmxfbm90aWZ5KFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxcbjQ0MDQ6XFx0XFx0XFx0XFx0ICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XFxuNDQwNTpcXHRcXHRlbHNlXFxuNDQwNjpcXHRcXHRcXHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxcbjQ0MDc6XFx0XFx0XFx0XFx0XFx0XFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcXG40NDA4OlxcdH1cXG40NDA5OlxcdFxcbjQ0MTA6XFx0c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG40NDExOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXFxuNDQxMjpcXHR7XFxuNDQxMzpcXHRcXHRpbnQgcmV0O1xcbjQ0MTQ6XFx0XFxuNDQxNTpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG40NDE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0MTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDE4OlxcdFxcbjQ0MTk6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VjaGFubmVscykge1xcbjQ0MjA6XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX0NIQU5ORUxTLCBwYXJhbS1cXHUwMDNlY2hhbm5lbHMpO1xcbjQ0MjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQyMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQ0MjM6XFx0XFx0fVxcbjQ0MjQ6XFx0XFxuNDQyNTpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19hbHBoYTIpIHtcXG40NDI2OlxcdFxcdFxcdHJldCA9IG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1JFR19ISU5UX0FMUEhBMiwgMixcXG40NDI3OlxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLVxcdTAwM2VyZWdfYWxwaGEyKTtcXG40NDI4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0Mjk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDMwOlxcdFxcdH1cXG40NDMxOlxcdFxcbjQ0MzI6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VyZWdkKSB7XFxuNDQzMzpcXHRcXHRcXHRpbnQgaTtcXG40NDM0OlxcdFxcbjQ0MzU6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkrKykge1xcbjQ0MzY6XFx0XFx0XFx0XFx0aWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tXFx1MDAzZXJlZ2QpXFxuNDQzNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40NDM4OlxcdFxcbjQ0Mzk6XFx0XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JFR19DVVNUT01fUkVHLCBpKTtcXG40NDQwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0NDE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ0NDM6XFx0XFx0XFx0fVxcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19zdHJpY3QpIHtcXG40NDQ3OlxcdFxcdFxcdHJldCA9IG5sYV9wdXRfZmxhZyhza2IsIEhXU0lNX0FUVFJfUkVHX1NUUklDVF9SRUcpO1xcbjQ0NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQ0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo1NS41MDQ2NDIxOTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5NTk2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc3BlY2lmaWVkIHNlY3Rpb25zIG9mIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgOlxuXG4qKkRpdmluZyBpbnRvIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGZvciBzb21lIHRhcmdldGVkIGludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgbW9yZSBncmFudWxhciBsb29rIGF0IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgc3BlY2lmaWMgYXNwZWN0cyBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0NTAwLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGNvZGUsIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIGNvZGUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIGxvb2sgYXQgc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBlcmhhcHMgYSBjcml0aWNhbCBmdW5jdGlvbiBjYWxsIHRoYXQncyBjYXVzaW5nIG1lIGlzc3Vlcy4gVGhlbiwgSSBuZWVkIGEgY2xlYXJlciBwaWN0dXJlIG9mIHNvbWUgcmVsYXRlZCBpbnRlcmFjdGlvbnMgYW5kIGZsb3dzIHNvIEkgd2lsbCBjaGVjayBvdXQgYXJvdW5kIGxpbmUgNjE4MCB0aHJvdWdoIDYyNjAuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcgZ2l2ZW4gbXkgZXhpc3RpbmcgZXhwZXJpZW5jZSB3aXRoIHJlbGF0ZWQgZHJpdmVycy4gV2l0aCBhIGNsb3NlciBsb29rIGF0IHRoZXNlIHNlY3Rpb25zLCBJIHNob3VsZCBnYWluIHRoZSBjbGFyaXR5IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEyOjU3Ljc4NDI0MTM0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ4NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ4NTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG40NDg2OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDQ4NzpcXHRcXHR9XFxuNDQ4ODpcXHRcXHRyZXR1cm4gMDtcXG40NDg5OlxcdH1cXG40NDkwOlxcdFxcbjQ0OTE6XFx0c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LFxcbjQ0OTI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbjQ0OTM6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXFxuNDQ5NDpcXHR7XFxuNDQ5NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiO1xcbjQ0OTY6XFx0XFx0dm9pZCAqZGF0YTtcXG40NDk3OlxcdFxcbjQ0OTg6XFx0XFx0bWNhc3Rfc2tiID0gZ2VubG1zZ19uZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbjQ0OTk6XFx0XFx0aWYgKCFtY2FzdF9za2IpXFxuNDUwMDpcXHRcXHRcXHRyZXR1cm47XFxuNDUwMTpcXHRcXG40NTAyOlxcdFxcdGRhdGEgPSBnZW5sbXNnX3B1dChtY2FzdF9za2IsIDAsIDAsIFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgMCxcXG40NTAzOlxcdFxcdFxcdFxcdCAgIEhXU0lNX0NNRF9ORVdfUkFESU8pO1xcbjQ1MDQ6XFx0XFx0aWYgKCFkYXRhKVxcbjQ1MDU6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjQ1MDY6XFx0XFxuNDUwNzpcXHRcXHRpZiAoYXBwZW5kX3JhZGlvX21zZyhtY2FzdF9za2IsIGlkLCBwYXJhbSkgXFx1MDAzYyAwKVxcbjQ1MDg6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjQ1MDk6XFx0XFxuNDUxMDpcXHRcXHRnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpO1xcbjQ1MTE6XFx0XFxuNDUxMjpcXHRcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcXG40NTEzOlxcdFxcdHJldHVybjtcXG40NTE0OlxcdFxcbjQ1MTU6XFx0b3V0X2VycjpcXG40NTE2OlxcdFxcdG5sbXNnX2ZyZWUobWNhc3Rfc2tiKTtcXG40NTE3OlxcdH1cXG40NTE4OlxcdFxcbjQ1MTk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc2JhbmRfaWZ0eXBlX2RhdGEgc2JhbmRfY2FwYV8yZ2h6W10gPSB7XFxuNDUyMDpcXHRcXHR7XFxuNDUyMTpcXHRcXHRcXHQudHlwZXNfbWFzayA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8XFxuNDUyMjpcXHRcXHRcXHRcXHQgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCksXFxuNDUyMzpcXHRcXHRcXHQuaGVfY2FwID0ge1xcbjQ1MjQ6XFx0XFx0XFx0XFx0Lmhhc19oZSA9IHRydWUsXFxuNDUyNTpcXHRcXHRcXHRcXHQuaGVfY2FwX2VsZW0gPSB7XFxuNDUyNjpcXHRcXHRcXHRcXHRcXHQubWFjX2NhcF9pbmZvWzBdID1cXG40NTI3OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMF9IVENfSEUsXFxuNDUyODpcXHRcXHRcXHRcXHRcXHQubWFjX2NhcF9pbmZvWzFdID1cXG40NTI5OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMV9URl9NQUNfUEFEX0RVUl8xNlVTIHxcXG40NTMwOlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMV9NVUxUSV9USURfQUdHX1JYX1FPU184LFxcbjQ1MzE6XFx0XFx0XFx0XFx0XFx0Lm1hY19jYXBfaW5mb1syXSA9XFxuNDUzMjpcXHRcXHRcXHRcXHRcXHRcXHRJRUVFODAyMTFfSEVfTUFDX0NBUDJfQlNSIHxcXG40NTMzOlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMl9NVV9DQVNDQURJTkcgfFxcbjQ1MzQ6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX01BQ19DQVAyX0FDS19FTixcXG40NTM1OlxcdFxcdFxcdFxcdFxcdC5tYWNfY2FwX2luZm9bM10gPVxcbjQ1MzY6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX01BQ19DQVAzX09NSV9DT05UUk9MIHxcXG40NTM3OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQM19NQVhfQU1QRFVfTEVOX0VYUF9FWFRfMyxcXG40NTM4OlxcdFxcdFxcdFxcdFxcdC5tYWNfY2FwX2luZm9bNF0gPSBJRUVFODAyMTFfSEVfTUFDX0NBUDRfQU1TRFVfSU5fQU1QRFUsXFxuNDUzOTpcXHRcXHRcXHRcXHRcXHQucGh5X2NhcF9pbmZvWzBdID1cXG40NTQwOlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9QSFlfQ0FQMF9DSEFOTkVMX1dJRFRIX1NFVF80ME1IWl9JTl8yRyxcXG40NTQxOlxcdFxcdFxcdFxcdFxcdC5waHlfY2FwX2luZm9bMV0gPVxcbjQ1NDI6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX1BIWV9DQVAxX1BSRUFNQkxFX1BVTkNfUlhfTUFTSyB8XFxuNDU0MzpcXHRcXHRcXHRcXHRcXHRcXHRJRUVFODAyMTFfSEVfUEhZX0NBUDFfREVWSUNFX0NMQVNTX0EgfFxcbjQ1NDQ6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX1BIWV9DQVAxX0xEUENfQ09ESU5HX0lOX1BBWUxPQUQgfFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo1Ny43ODUyNDExNjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MTA3NDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGltcGxpZWQgdGhvdWdodHMsIHByZXNlbnRlZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKlN0cmF0ZWdpYyBSZWFkaW5nIEZvY3VzKipcblxuUmlnaHQsIGxldCdzIHplcm8gaW4uIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjb252ZXJzYXRpb24gKHdoaWNoIEknbSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIFsqKmluc2VydCB5b3VyIGFzc3VtZWQgZmllbGQgaGVyZSwgZS5nLiwgcmVzZWFyY2gsIGFuYWx5c2lzLCBwcm9qZWN0IG1hbmFnZW1lbnQqKl0pLCBhIHNwZWNpZmljIHNlY3Rpb24gd2FycmFudHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgZm9jdXNpbmcgb24gdGhlIHJhbmdlIG9mIHBhZ2VzIG9yIGRhdGEgcG9pbnRzIGJldHdlZW4gNjE4MCBhbmQgNjI2MCBpcyBjcnVjaWFsLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBhcmd1bWVudHMsIG9yIGtleSBkYXRhLCBvciBjcnVjaWFsIHByb2NlZHVyYWwgc3RlcHMgYXJlIGNlbnRlcmVkLiBUaGlzIGZvY3VzIHdpbGwgYWxsb3cgZm9yIGFuIGVmZmljaWVudCBhbmQgdGFyZ2V0ZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWF0ZXJpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE3LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzowMC4wMjYzMTg5NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYxODA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG42MTgxOlxcdFxcdFxcdGlmIChpbmZvKSB7XFxuNjE4MjpcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJwZXJtIGFkZHIgYWxyZWFkeSBwcmVzZW50XFxcIik7XFxuNjE4MzpcXHRcXHRcXHRcXHROTF9TRVRfQkFEX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbjYxODQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9QRVJNX0FERFJdKTtcXG42MTg1OlxcdFxcdFxcdH1cXG42MTg2OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG42MTg3OlxcdFxcdFxcdGdvdG8gZmFpbGVkX2ZpbmFsX2luc2VydDtcXG42MTg4OlxcdFxcdH1cXG42MTg5OlxcdFxcbjYxOTA6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGF0YS1cXHUwMDNlbGlzdCwgXFx1MDAyNmh3c2ltX3JhZGlvcyk7XFxuNjE5MTpcXHRcXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xcbjYxOTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xcbjYxOTM6XFx0XFxuNjE5NDpcXHRcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xcbjYxOTU6XFx0XFxuNjE5NjpcXHRcXHRyZXR1cm4gaWR4O1xcbjYxOTc6XFx0XFxuNjE5ODpcXHRmYWlsZWRfZmluYWxfaW5zZXJ0OlxcbjYxOTk6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXFx1MDAzZWRlYnVnZnMpO1xcbjYyMDA6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cXHUwMDNlaHcpO1xcbjYyMDE6XFx0ZmFpbGVkX2h3OlxcbjYyMDI6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwMzpcXHRmYWlsZWRfYmluZDpcXG42MjA0OlxcdFxcdGRldmljZV91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwNTpcXHRmYWlsZWRfZHJ2ZGF0YTpcXG42MjA2OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGh3KTtcXG42MjA3OlxcdGZhaWxlZDpcXG42MjA4OlxcdFxcdHJldHVybiBlcnI7XFxuNjIwOTpcXHR9XFxuNjIxMDpcXHRcXG42MjExOlxcdHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG42MjEyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjYyMTM6XFx0e1xcbjYyMTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG42MjE1OlxcdFxcdHZvaWQgKmRhdGE7XFxuNjIxNjpcXHRcXHRpbnQgcmV0O1xcbjYyMTc6XFx0XFxuNjIxODpcXHRcXHRza2IgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XFxuNjIxOTpcXHRcXHRpZiAoIXNrYilcXG42MjIwOlxcdFxcdFxcdHJldHVybjtcXG42MjIxOlxcdFxcbjYyMjI6XFx0XFx0ZGF0YSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCAwLFxcbjYyMjM6XFx0XFx0XFx0XFx0ICAgSFdTSU1fQ01EX0RFTF9SQURJTyk7XFxuNjIyNDpcXHRcXHRpZiAoIWRhdGEpXFxuNjIyNTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMjY6XFx0XFxuNjIyNzpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG42MjI4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyMjk6XFx0XFx0XFx0Z290byBlcnJvcjtcXG42MjMwOlxcdFxcbjYyMzE6XFx0XFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkFESU9fTkFNRSwgc3RybGVuKGh3bmFtZSksXFxuNjIzMjpcXHRcXHRcXHQgICAgICBod25hbWUpO1xcbjYyMzM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjIzNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMzU6XFx0XFxuNjIzNjpcXHRcXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xcbjYyMzc6XFx0XFxuNjIzODpcXHRcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcXG42MjM5OlxcdFxcbjYyNDA6XFx0XFx0cmV0dXJuO1xcbjYyNDE6XFx0XFxuNjI0MjpcXHRlcnJvcjpcXG42MjQzOlxcdFxcdG5sbXNnX2ZyZWUoc2tiKTtcXG42MjQ0OlxcdH1cXG42MjQ1OlxcdFxcbjYyNDY6XFx0c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbjYyNDc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXFxuNjI0ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNjI0OTpcXHR7XFxuNjI1MDpcXHRcXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLCBpbmZvKTtcXG42MjUxOlxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVxcdTAwM2VkZWJ1Z2ZzKTtcXG42MjUyOlxcdFxcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjUzOlxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVxcdTAwM2VkZXYpO1xcbjYyNTQ6XFx0XFx0ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS1cXHUwMDNlZGV2KTtcXG42MjU1OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjU2OlxcdH1cXG42MjU3OlxcdFxcbjYyNTg6XFx0c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfcmFkaW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG42MjU5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDAuMDI2NTg5NTE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODQzNjY3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgTUFDODAyMTEgSFdTSU0gTXVsdGljYXN0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBtdWx0aWNhc3QgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGh3c2ltX21jYXN0X25ld19yYWRpb2AsIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gLCBhbmQgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBhcmUgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGVpciBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBtdWx0aWNhc3Qgb3BlcmF0aW9uLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGRvIHRoYXQgaXMgYSBnb29kIG9sZCBmYXNoaW9uZWQgZ3JlcCBzZWFyY2ggd2l0aGluIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgdGhlIGNvZGUgZmxvdyBhbmQgdXNhZ2UgcGF0dGVybnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDIuMTEwOTU4NDE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTMwODIzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdzaW1fbWNhc3RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQzNzg9c3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDM5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo0Mzk5OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0MDAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQ0MTA9c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0OTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDQ5MTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ1MTI6XFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDUxMy1cXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01Njc1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTkzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYxOTQ6XFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjExOnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjM4OlxcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MjQ2PXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyNTA6XFx0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXFx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI1MS1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cXHUwMDNlZGVidWdmcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjAyLjQyNDA0NDg2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzI4Mzk4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2hhbmdlcyBpbiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBod3NpbWAgbW9kdWxlLiBQcmV2aW91c2x5LCB0aGUgZnVuY3Rpb24gdG9vayBhIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIGEgYHN0cnVjdCBnZW5sX2luZm9gIGFzIGFyZ3VtZW50cy4gTm93LCBpdCBoYXMgYSBgc3RydWN0IG5ldCAqbmV0YCBhcmd1bWVudCBhcyB3ZWxsLiBUaGUga2V5IGRpZmZlcmVuY2Ugc2VlbXMgdG8gYmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljOiBpZiBgaW5mb2AgaXMgbm90IE5VTEwsIHRoZW4gYSBzdHJhaWdodGZvcndhcmQgYGdlbmxfbm90aWZ5YCBjYWxsIGlzIG1hZGUuIEhvd2V2ZXIsIGlmIGBpbmZvYCAqaXMqIE5VTEwsIHRoZSBmdW5jdGlvbiBub3cgY2FsbHMgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYC5cblxuVGhlIG9yaWdpbmFsIHZlcnNpb24gdXNlZCBgZ2VubG1zZ19tdWx0aWNhc3RgIHdoZW4gYGluZm9gIHdhcyBOVUxMLiBUaGUgdXBkYXRlIGluY29ycG9yYXRlcyBgX25ldG5zYCBtZWFuaW5nIHRoZXJlJ3Mgbm93IGFuIGV4cGxpY2l0IGBuZXRgIG5hbWVzcGFjZSBwcm92aWRlZCB0byB0aGUgYGdlbmxtc2dfbXVsdGljYXN0YCBjYWxsLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgbmV0IG5hbWVzcGFjZSBwcm92aWRlcyBpc29sYXRpb24gYW5kIHNlZ21lbnRhdGlvbiBvZiB0aGUgbmV0d29yayBzdGFjaywgc28gdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMgbWlnaHQgYmUgdGFyZ2V0ZWQgdG8gc3BlY2lmaWMgbmV0d29yayBuYW1lc3BhY2VzIG5vdywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZS5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsICp3aGVuKiBpcyBgaW5mb2AgTlVMTD8gVGhhdCdzIHRoZSBjcnVjaWFsIGNvbnRleHQuIEl0IGRpY3RhdGVzIHRoZSBiZWhhdmlvciBhbmQgaW1wbGljYXRpb24gb2YgdGhpcyBjaGFuZ2UuIEl0J3MgdGltZSB0byBleGFtaW5lIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGlzIGJlaW5nIGludm9rZWQsIHNwZWNpZmljYWxseSBmcm9tIGBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGFuZCBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYC4gS25vd2luZyB3aGVuIGBpbmZvYCBpcyBOVUxMIGluIHRob3NlIGNhbGxzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbiBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGludGVudCBvZiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgaXMgdG8gc2VuZCBtZXNzYWdlcyB3aXRoaW4gYSBzcGVjaWZpYyBuZXR3b3JrIG5hbWVzcGFjZSwgb3IgcG90ZW50aWFsbHkgdG8gYWxsLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjA2LjE1MjQ0NzcyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzOTk2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjM9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY3NTpzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zICpwYXJhbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTY4MDY9c3RhdGljIGludCBod3NpbV9uZXdfcmFkaW9fbmwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTY5NTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6Njk1ODpcXHRyZXQgPSBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oaW5mbywgXFx1MDAyNnBhcmFtKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02OTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxMT1zdGF0aWMgaW50IF9faW5pdCBpbml0X21hYzgwMjExX2h3c2ltKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NjI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjc2MjU6XFx0XFx0ZXJyID0gbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKE5VTEwsIFxcdTAwMjZwYXJhbSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzYyNi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDYuMjI3ODUyMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1NzM1NzA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXIgQ29udGV4dCBvZiBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIHBhcmFtb3VudDsgaXQgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgaXRzIHJvbGUgaXMgd2l0aGluIHRoZSBicm9hZGVyIG1hYzgwMjExLWh3c2ltIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB2ZXJpZnlpbmcgaXRzIGNvcnJlY3QgYmVoYXZpb3IsIGRlYnVnZ2luZyBwb3RlbnRpYWwgaXNzdWVzLCBvciBldmVuIHJlZmFjdG9yaW5nIHRoZSBjb2RlLiBCeSBleGFtaW5pbmcgdGhlIGNhbGwgc2l0ZXMsIEkgY2FuIGdldCBhIG11Y2ggYmV0dGVyIGhhbmRsZSBvbiBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDguMTg1MjEzMTM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxNjYwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTYyMTE9c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjQ2OnN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjQ3LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjMwNT1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9mcmVlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MzE2LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MzE3OlxcdFxcdG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhkYXRhLCB3aXBoeV9uYW1lKGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjMxOC1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02OTY2PXN0YXRpYyBpbnQgaHdzaW1fZGVsX3JhZGlvX25sKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MDAxLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MDAyOlxcdFxcdG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhkYXRhLCB3aXBoeV9uYW1lKGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzAwMy1cXHRcXHRcXHRcXHRcXHQgaW5mbyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTYyPXN0YXRpYyB2b2lkIHJlbW92ZV91c2VyX3JhZGlvcyh1MzIgcG9ydGlkLCBpbnQgbmV0Z3JvdXApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTgwLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzE4MTpcXHRcXHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZW50cnksIHdpcGh5X25hbWUoZW50cnktXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4Mi1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MjM4PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaHdzaW1fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI2MC1cXHRcXHRsaXN0X2RlbChcXHUwMDI2ZGF0YS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI2MTpcXHRcXHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjYyLVxcdFxcdFxcdFxcdFxcdCB3aXBoeV9uYW1lKGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjA4LjMwMzM4ODI3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjkzODA4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBod3NpbV9leGl0X25ldGAgYW5kIGByZW1vdmVfdXNlcl9yYWRpb3NgIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIHJlY2VudCBjaGFuZ2VzLCBhbmQgSSd2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyByZWdhcmRpbmcgYGh3c2ltX2V4aXRfbmV0YCBhbmQgYHJlbW92ZV91c2VyX3JhZGlvc2AuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgaG93IG11bHRpY2FzdCBtZXNzYWdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZXMgKG5ldG5zKSBleGl0IG9yIHdoZW4gcmFkaW9zIGFyZSByZW1vdmVkLiBQcmV2aW91c2x5LCBpZiB0aGUgYGluZm9gIHBvaW50ZXIgd2FzIGBOVUxMYCAod2hpY2ggaGFwcGVucyBpbiB0aGVzZSBzaXR1YXRpb25zKSwgYGdlbmxtc2dfbXVsdGljYXN0YCB3b3VsZCBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgcHJlc3VtYWJseSBgaW5pdF9uZXRgLiBOb3csIGl0J3MgY29ycmVjdGx5IHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2Agd2l0aCB0aGUgbmV0bnMgb2YgdGhlIGB3aXBoeWAhXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eSBhbmQgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIHJlYWNoYWJpbGl0eS4gSXMgYG1hYzgwMjExX2h3c2ltYCBldmVuIHJlbGV2YW50PyBBYnNvbHV0ZWx5LiBgbWFjODAyMTFfaHdzaW1gIGlzIGEgd2VsbC1rbm93biBzaW11bGF0ZWQgd2lyZWxlc3MgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCB1c2VkIGV4dGVuc2l2ZWx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kLCBjcnVjaWFsbHksIGl0J3MgYWxyZWFkeSBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyLiBBbnkgdXNlciBwcm9ncmFtLCBnaXZlbiB0aGUgcmlnaHQgY2FwYWJpbGl0aWVzIG9yIHRocm91Z2ggbmV0bGluay9uZXRucyBtYW5pcHVsYXRpb24sIGNhbiBjcmVhdGUgb3IgZGVsZXRlIHRoZXNlIHNpbXVsYXRlZCByYWRpb3MsIHNlbmQgTmV0bGluayBtZXNzYWdlcyB2aWEgY29tbWFuZHMgbGlrZSBgSFdTSU1fQ01EX05FV19SQURJT2AgYW5kIGBIV1NJTV9DTURfREVMX1JBRElPYCwgYW5kIHRyaWdnZXIgbmV0bnMgY3JlYXRpb24vZGVzdHJ1Y3Rpb24uIFNvY2tldCBjbG9zaW5nIChgcmVtb3ZlX3VzZXJfcmFkaW9zYCkgaXMgYWxzbyBhbiBlbnRyeSBwb2ludC4gVGhpcyBjb25maXJtcyB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGludGVyZmFjZXMuXG5cbk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBJdCB0b3VjaGVzIGV4ZWN1dGFibGUgY29kZSBpbiBhIHZpcnR1YWwgZHJpdmVyIGFuZCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBtdWx0aWNhc3QgbWVzc2FnZSBub3RpZmljYXRpb24gYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcyB3aGVuIHJhZGlvcyBhcmUgY3JlYXRlZCBvciBkZXN0cm95ZWQuIFRoaXMgY2hhbmdlIGluIG11bHRpY2FzdCBoYW5kbGluZyBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGluY29ycmVjdCBuYW1lc3BhY2UgY29udGV4dC4gVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIFllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIHRvIHNldCB1cCBteSBmdXp6aW5nIHRhcmdldC4gTG9va2luZyBhdCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGBNQUM4MDIxMV9IV1NJTWAgc2ltcGx5IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgd2hpY2ggbWFrZXMgdGhpbmdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGJ1aWxkLCB3aGljaCBsaWtlbHkgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3RhbmRhcmQgYG1hYzgwMjExYCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MTMuOTk3MjAwMDE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEzNTA2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjE0LjExODU1NTUyMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYxODM3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUsIHN0YXJ0aW5nIHJpZ2h0IGF0IHRoZSB0b3AsIGFyb3VuZCBsaW5lIDEuIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmb3VuZGF0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTUFDODAyMTEgd2lyZWxlc3Mgc3RhY2suIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIExpbnV4J3Mgd2lyZWxlc3MgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBhbmQgYnVpbGQgb3B0aW9ucyBoZXJlLiBXZSBhcmUgZ29pbmcgdG8gZmluZCB0aGUgbWFzdGVyIGtub2JzIGZvciBjb250cm9sbGluZyB0aGUgZmVhdHVyZSBzZXQgb2YgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCB3aWxsIGluZm9ybSB0aGUgc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIG5hdmlnYXRlIGEgcG90ZW50aWFsbHkgY29tcGxleCB3ZWIgb2YgZGVwZW5kZW5jaWVzIGFzIGl0IGlzIGxpa2VseSB0aGF0IGRpZmZlcmVudCB3aXJlbGVzcyBwcm90b2NvbHMgb3IgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIGdvaW5nIHRvIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoxNi4xODAzOTY1MjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoxNi4xODA1MTY5OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5OTg4NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBDRkc4MDIxMWAgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ0ZHODAyMTFgLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGhlcmUsIGdpdmVuIHRoZSBldm9sdXRpb24gb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzKio6IEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGluY2x1c2lvbiBvZiBgQ0ZHODAyMTFgLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLCBkcml2ZXJzLCBvciBnZW5lcmFsIHdpcmVsZXNzIGZlYXR1cmUgdG9nZ2xlcz9cbiogICAqKk1vZHVsZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMqKjogSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgdmFyaW91cyB3aXJlbGVzcyBtb2R1bGVzIChlLmcuLCBzcGVjaWZpYyByYWRpbyBmaXJtd2FyZSBzdXBwb3J0KSByZWx5IG9uIHRoaXMgZm91bmRhdGlvbmFsIGxheWVyLiBBIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGggaXMgZXNzZW50aWFsLlxuKiAgICoqQnVpbGQtdGltZSBpbXBsaWNhdGlvbnMqKjogSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhZmZlY3QgdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHByb2Nlc3MsIGZyb20gY29tcGlsYXRpb24gdGltZSB0byBpbWFnZSBzaXplLlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0cyoqOiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiBgQ0ZHODAyMTFgIGFuZCBvdGhlciB3aXJlbGVzcyBzdWJzeXN0ZW1zIChlLmcuLCBkZXByZWNhdGVkIG9yIGxlZ2FjeSB3aXJlbGVzcyBzdGFja3MpLlxuKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIVxuXG5UaGlzIGRlZXAgZGl2ZSBpcyBqdXN0IGFub3RoZXIgZGF5IGF0IHRoZSBvZmZpY2UgdG8gZW5zdXJlIGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgY29yZSBjb21wb25lbnQgaXMgdXNlZCwgYW5kIHRvIGZvcmVzZWUgYW55IGZ1dHVyZSBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBhc3N1bXB0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjE4Ljg4MDQwNzk4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0ODU5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MTguOTcyOTAxNzMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODIwODk4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2lyZWxlc3Mgb3B0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIGRyaXZlcnMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC93aXJlbGVzcy9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDE1IHRocm91Z2ggMzAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZXMgYXJlIGxvY2F0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGUgY2hvaWNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjIxLjA1NDk5NjQ5M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyMS4wNTUxMjE1MDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEwMTMyNzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNdWx0aWNhc3QgTm90aWZpY2F0aW9uIEhhbmRsaW5nIGluIG1hYzgwMjExX2h3c2ltKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBNQUM4MDIxMV9IV1NJTWAsIGBNQUM4MDIxMWAsIGFuZCBgQ0ZHODAyMTFgIGNvbmZpZ3VyYXRpb25zLiBTdGFuZGFyZCBuZXR3b3JraW5nIHN0dWZmIGxpa2UgYE5FVGAgYW5kIGBORVRMSU5LYCBzaG91bGQgYmUgaW4gcGxheSB0b28sIGJ1dCB0aG9zZSBhcmUgZXhwZWN0ZWQuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBmdW5jdGlvbnMgd2l0aGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ6IGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCwgYGh3c2ltX21jYXN0X25ld19yYWRpb2AsIGBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gLCBgaHdzaW1fbWNhc3RfZGVsX3JhZGlvYCwgYG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb2AsIGBod3NpbV9uZXdfcmFkaW9fbmxgLCBgaHdzaW1fZGVsX3JhZGlvX25sYCwgYGh3c2ltX2V4aXRfbmV0YCwgYW5kIGByZW1vdmVfdXNlcl9yYWRpb3NgLiBJJ3ZlIGNoZWNrZWQgYW5kIGNvbmZpcm1lZCB0aGVzZSBmdW5jdGlvbnMgYXJlIHN5bWJvbHMsIG5vdCBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQ7IHRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGF0IGltcGFjdHMgdGhlaXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBtb2RpZmljYXRpb24uXG5cbmBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGlzIGNhbGxlZCBieSBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGluaXRfbWFjODAyMTFfaHdzaW1gLiBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCBpcyBjYWxsZWQgYnkgYG1hYzgwMjExX2h3c2ltX2ZyZWVgLCBgaHdzaW1fZGVsX3JhZGlvX25sYCwgYHJlbW92ZV91c2VyX3JhZGlvc2AsIGFuZCBgaHdzaW1fZXhpdF9uZXRgLiBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGh3c2ltX2RlbF9yYWRpb19ubGAgYXJlIG5ldGxpbmsgY2FsbGJhY2tzLCBzbyB0aG9zZSBhcmUga2V5IGVudHJ5IHBvaW50cy4gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGFyZSBzdGF0aWMgaGVscGVycy5cblxuSSd2ZSBhbHNvIGV4YW1pbmVkIHRoZSBjaGFuZ2VzIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnM6IGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBub3cgcGFzc2VzIGBuZXRgIHRvIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AuIGBod3NpbV9tY2FzdF9uZXdfcmFkaW9gIGFuZCBgaHdzaW1fbWNhc3RfZGVsX3JhZGlvYCBub3cgcmVjZWl2ZSBhbmQgdXNlIGBuZXRgIHRvIHBhc3MgdG8gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLiBgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvYCBhbmQgYG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb2AgcGFzcyBgd2lwaHlfbmV0KC4uLilgIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGVscGVyIGZ1bmN0aW9ucy4gRmluYWxseSwgd2UgaGF2ZSB0aGUgbmV0bGluayBoYW5kbGVycyBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGh3c2ltX2RlbF9yYWRpb19ubGAuXG5cblRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgZGVhbGluZyB3aXRoIGFueXRoaW5nIGxpa2UgYGttYWxsb2NgIG9yIG11dGV4IGxvY2tzLCB3aGljaCBhcmUgdWJpcXVpdG91cyBhbmQgY2FuIGNhdXNlIHByb2JsZW1zIGluIGFueSBzaXR1YXRpb247IHRoZXkncmUgYWxsICpzcGVjaWZpYyogdG8gdGhlIGBtYWM4MDIxMV9od3NpbWAgdmlydHVhbCBkcml2ZXIuIFRoYXTigJlzIGdvb2QgZnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZS5cblxuU28sIHRoZSBwYXRjaCBpcyB1cGRhdGluZyBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIGhhbmRsaW5nIGluIGBtYWM4MDIxMV9od3NpbWAuIFdoZW4gcmFkaW9zIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQgd2l0aG91dCBhIHNwZWNpZmljIGdlbmxfaW5mbyBjb250ZXh0LCBpdCdzIG5vdyB1c2luZyBgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnNgIHdpdGggdGhlIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIGluc3RlYWQgb2YgYGdlbmxtc2dfbXVsdGljYXN0YC5cblxuSXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpczogYG1hYzgwMjExX2h3c2ltYCBpcyBhIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyIHRoYXQncyBlYXNpbHkgYWNjZXNzaWJsZSBhbmQgdGVzdGVkIHRocm91Z2ggbmV0bGluaywgZXNwZWNpYWxseSB3aXRoaW4gZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIGNhbiBoZWxwIHVzIHZlcmlmeSB0aGF0IG11bHRpY2FzdCBtZXNzYWdpbmcgYW5kIGxpZmVjeWNsZSBpbnRlcmFjdGlvbnMgYXJlIGNvcnJlY3QgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcyBkdXJpbmcgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmV0bnMgdGVhcmRvd24uIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSB0byBmbGFnLCBsZXQncyBwcm9jZWVkLlxuXG5J4oCZbSBjb25maWRlbnQgd2l0aCB0aGVzZSBmaW5kaW5ncy4gTGV0J3Mgc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzY3LCJPdXRwdXRUb2tlbnMiOjI3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyOS4xNTY0NTE4NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0MDY1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJod3NpbV9tY2FzdF9jb25maWdfbXNnXCIsXG4gICAgXCJod3NpbV9tY2FzdF9uZXdfcmFkaW9cIixcbiAgICBcImh3c2ltX21jYXN0X2RlbF9yYWRpb1wiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9cIixcbiAgICBcImh3c2ltX25ld19yYWRpb19ubFwiLFxuICAgIFwiaHdzaW1fZGVsX3JhZGlvX25sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGljYXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBsb2dpYyBkdXJpbmcgcmFkaW8gY3JlYXRpb24gYW5kIGRlbGV0aW9uIGluIG1hYzgwMjExX2h3c2ltIHRvIHRhcmdldCB0aGUgcmFkaW8ncyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJod3NpbV9tY2FzdF9jb25maWdfbXNnXCIsXG4gICAgXCJod3NpbV9tY2FzdF9uZXdfcmFkaW9cIixcbiAgICBcImh3c2ltX21jYXN0X2RlbF9yYWRpb1wiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9cIixcbiAgICBcImh3c2ltX25ld19yYWRpb19ubFwiLFxuICAgIFwiaHdzaW1fZGVsX3JhZGlvX25sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGljYXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBsb2dpYyBkdXJpbmcgcmFkaW8gY3JlYXRpb24gYW5kIGRlbGV0aW9uIGluIG1hYzgwMjExX2h3c2ltIHRvIHRhcmdldCB0aGUgcmFkaW8ncyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyOS4zMTY4NjczMzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjk3NDYzOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MjkuMzE3NDExNzY4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjEyOTY5MTU1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgbWFjODAyMTFfaHdzaW0gdG8gdXNlIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgaW5zdGVhZCBvZiBnZW5sbXNnX211bHRpY2FzdCgpIHdoZW4gYnJvYWRjYXN0aW5nIG5ldy9kZWxldGVkIHJhZGlvIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZ2VubF9pbmZvLCBwYXNzaW5nIHRoZSB0YXJnZXQgbmV0bnMgZnJvbSB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGFsdGVyIGRhdGEgc2VyaWFsaXphdGlvbiwgbW9kaWZ5IGJ1ZmZlciBib3VuZHMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuIEJlY2F1c2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MTI6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtNDM5NiwxNSArNDM5NiwxNSBAQCBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XG4gXHRib29sIGJhY2tncm91bmRfcmFkYXI7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvKVxuIFx0XHRnZW5sX25vdGlmeShcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxuIFx0XHRcdCAgICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuIFx0ZWxzZVxuLVx0XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCAwLFxuLVx0XHRcdFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuK1x0XHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbmV0LCBtY2FzdF9za2IsIDAsXG4rXHRcdFx0XHRcdEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsXG5AQCAtNDQ4OCw3ICs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuK3N0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdCAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICptY2FzdF9za2I7XG5AQCAtNDUwOCw3ICs0NTA5LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcbiBcdGdlbmxtc2dfZW5kKG1jYXN0X3NrYiwgZGF0YSk7XG4gXG4tXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgaW5mbyk7XG4rXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcbiBcdHJldHVybjtcbiBcbiBvdXRfZXJyOlxuQEAgLTYxOTAsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG4gXG4tXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCBpbmZvLCBwYXJhbSk7XG4rXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbiBcbiBcdHJldHVybiBpZHg7XG4gXG5AQCAtNjIwOCw3ICs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK1x0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHZvaWQgKmRhdGE7XG5AQCAtNjIzNCw3ICs2MjM1LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuIFxuIFx0Z2VubG1zZ19lbmQoc2tiLCBkYXRhKTtcbiBcbi1cdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuIFxuIFx0cmV0dXJuO1xuIFxuQEAgLTYyNDYsNyArNjI0Nyw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbi1cdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuIFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG4gXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVx1MDAzZWh3KTtcbiBcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyOS4zMTc0MTI4NzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA4NDA3NDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gbWVzc2FnaW5nIHdpdGhpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlci4gVGhlIGBkaWZmYCBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGZ1bmN0aW9uLiBUaGUgY2hhbmdlIGlzIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBzbyBsZXQncyBwYXJzZSB0aGlzIGNhcmVmdWxseS5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBzaWduYXR1cmUgd2FzOlxuXG5gYGBjXG5zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXG5cdFx0XHRcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5gYGBcblxuQW5kIGl0J3MgYmVpbmcgbW9kaWZpZWQgdG86XG5cbmBgYGNcbnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxuXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuYGBgXG5cblRoZSBhZGRpdGlvbiBvZiB0aGUgYHN0cnVjdCBuZXQgKm5ldGAgYXJndW1lbnQgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBtZXNzYWdpbmcgaXMgYmVjb21pbmcgbmV0IG5hbWVzcGFjZSBhd2FyZS4gTm93LCB0aGUgZnVuY3Rpb24gYWNjZXB0cyBhIGBzdHJ1Y3QgbmV0YCBwb2ludGVyLiBUaGlzIGlzIGxpa2VseSBkb25lIHRvIGVuYWJsZSB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gdG8gYmUgc3BlY2lmaWMgdG8gdGhlIG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5MZXQncyBsb29rIGZ1cnRoZXIuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHRoZSBgZ2VubG1zZ19tdWx0aWNhc3RgIGNhbGwgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknZCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgaG93IGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBpcyAqY2FsbGVkKiB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBuZXRgIGlzIGJlaW5nIHBvcHVsYXRlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBuZXcgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYCBjYWxsIGhhcy4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSBuZXR3b3JrIHNlZ21lbnRhdGlvbiBmb3Igb3VyIHZpcnR1YWwgZGV2aWNlcy5cblxuSW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2UgYXdhcmVuZXNzIGluIG11bHRpY2FzdCBjb25maWd1cmF0aW9uIG1lc3NhZ2luZyB3aXRoaW4gdGhlIGh3c2ltIGRyaXZlciwgcHJvYmFibHkgdG8gZW5oYW5jZSBuZXR3b3JrIGlzb2xhdGlvbiBvciB0byBzdXBwb3J0IG1vcmUgY29tcGxleCB2aXJ0dWFsaXplZCBuZXR3b3JraW5nIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1OSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjM1LjQwMTQ5MTk5NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM5MDpcXHRcXHR1MzIgaWZ0eXBlcztcXG40MzkxOlxcdFxcdHUzMiAqY2lwaGVycztcXG40MzkyOlxcdFxcdHU4IG5fY2lwaGVycztcXG40MzkzOlxcdFxcdGJvb2wgbWxvO1xcbjQzOTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpwbXNyX2NhcGE7XFxuNDM5NTpcXHRcXHRib29sIG5hbl9kZXZpY2U7XFxuNDM5NjpcXHRcXHRib29sIGJhY2tncm91bmRfcmFkYXI7XFxuNDM5NzpcXHR9O1xcbjQzOTg6XFx0XFxuNDM5OTpcXHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcXG40NDAwOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNDQwMTpcXHR7XFxuNDQwMjpcXHRcXHRpZiAoaW5mbylcXG40NDAzOlxcdFxcdFxcdGdlbmxfbm90aWZ5KFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxcbjQ0MDQ6XFx0XFx0XFx0XFx0ICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XFxuNDQwNTpcXHRcXHRlbHNlXFxuNDQwNjpcXHRcXHRcXHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxcbjQ0MDc6XFx0XFx0XFx0XFx0XFx0XFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcXG40NDA4OlxcdH1cXG40NDA5OlxcdFxcbjQ0MTA6XFx0c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG40NDExOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXFxuNDQxMjpcXHR7XFxuNDQxMzpcXHRcXHRpbnQgcmV0O1xcbjQ0MTQ6XFx0XFxuNDQxNTpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG40NDE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0MTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDE4OlxcdFxcbjQ0MTk6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VjaGFubmVscykge1xcbjQ0MjA6XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX0NIQU5ORUxTLCBwYXJhbS1cXHUwMDNlY2hhbm5lbHMpO1xcbjQ0MjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQyMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQ0MjM6XFx0XFx0fVxcbjQ0MjQ6XFx0XFxuNDQyNTpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19hbHBoYTIpIHtcXG40NDI2OlxcdFxcdFxcdHJldCA9IG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1JFR19ISU5UX0FMUEhBMiwgMixcXG40NDI3OlxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLVxcdTAwM2VyZWdfYWxwaGEyKTtcXG40NDI4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0Mjk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDMwOlxcdFxcdH1cXG40NDMxOlxcdFxcbjQ0MzI6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VyZWdkKSB7XFxuNDQzMzpcXHRcXHRcXHRpbnQgaTtcXG40NDM0OlxcdFxcbjQ0MzU6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkrKykge1xcbjQ0MzY6XFx0XFx0XFx0XFx0aWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tXFx1MDAzZXJlZ2QpXFxuNDQzNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40NDM4OlxcdFxcbjQ0Mzk6XFx0XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JFR19DVVNUT01fUkVHLCBpKTtcXG40NDQwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0NDE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ0NDM6XFx0XFx0XFx0fVxcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19zdHJpY3QpIHtcXG40NDQ3OlxcdFxcdFxcdHJldCA9IG5sYV9wdXRfZmxhZyhza2IsIEhXU0lNX0FUVFJfUkVHX1NUUklDVF9SRUcpO1xcbjQ0NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQ0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzozNS40MDIwMjI0MzZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwODg0MDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBwZXJzcGVjdGl2ZSBvbiBleGFtaW5pbmcgbGluZXMgNjE4MCB0byA2MjYwIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2A6XG5cbioqRGl2aW5nIGludG8gYG1hYzgwMjExX2h3c2ltX21haW4uY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGBod3NpbWAgbW9kdWxlLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBsaW5lcyA2MTgwIHRocm91Z2ggNjI2MCwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgYmxvY2sgb2YgY29kZS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyBhbmQgcGF0aCwgSSdtIGd1ZXNzaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGludGVyZmFjZSBzaW11bGF0aW9uLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgb3IgcGVyaGFwcyB0cmFjayBkb3duIGEgYnVnLCBvciB1bmRlcnN0YW5kIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTUFDODAyMTEgY29yZS5cblxuSSBleHBlY3QgdG8gc2VlIHNvbWV0aGluZyByZWxhdGVkIHRvIGVpdGhlciBoYXJkd2FyZSBzaW11bGF0aW9uIGJlaGF2aW9yLCBtYXliZSBwYWNrZXQgaW5qZWN0aW9uLCByYXRlIGNvbnRyb2wgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBraW5kIG9mIGVycm9yIG1hbmFnZW1lbnQgb3IgZXZlbnQgcHJvY2Vzc2luZy4gU2luY2UgSSBrbm93IHRoaXMgY29kZSBwcmV0dHkgd2VsbCwgSSdtIGV4cGVjdGluZyB0byBlaXRoZXIgcmVmcmVzaCBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHNpbXVsYXRpb24sIG9yIHBvc3NpYmx5IHNwb3QgYSBwb3RlbnRpYWwgYXJlYSBmb3Igb3B0aW1pemF0aW9uIG9yIGEgc3VidGxlIGJ1Zy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGZ1bmN0aW9ucyBjYWxsZWQsIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgaGVscCBkZWZpbmUgdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IHNwZWNpZmljIGNvZGUgcmFuZ2UuIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucyB3aXRoIGtlcm5lbCB0aW1pbmcuIEkgYW0gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGludGVycnVwdCBhbmQgRE1BIGludGVyYWN0aW9ucyBpZiB0aGV5IGFyZSByZWxldmFudCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGUuIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgYmxvY2ssIEkgY2FuIGxpa2VseSBpZGVudGlmeSB0aGUgZ2VuZXJhbCBjb250cm9sIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzaW11bGF0aW9uIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODk0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzozOC42MTA4NjU0MjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYxODA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG42MTgxOlxcdFxcdFxcdGlmIChpbmZvKSB7XFxuNjE4MjpcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJwZXJtIGFkZHIgYWxyZWFkeSBwcmVzZW50XFxcIik7XFxuNjE4MzpcXHRcXHRcXHRcXHROTF9TRVRfQkFEX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbjYxODQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9QRVJNX0FERFJdKTtcXG42MTg1OlxcdFxcdFxcdH1cXG42MTg2OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG42MTg3OlxcdFxcdFxcdGdvdG8gZmFpbGVkX2ZpbmFsX2luc2VydDtcXG42MTg4OlxcdFxcdH1cXG42MTg5OlxcdFxcbjYxOTA6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGF0YS1cXHUwMDNlbGlzdCwgXFx1MDAyNmh3c2ltX3JhZGlvcyk7XFxuNjE5MTpcXHRcXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xcbjYxOTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xcbjYxOTM6XFx0XFxuNjE5NDpcXHRcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xcbjYxOTU6XFx0XFxuNjE5NjpcXHRcXHRyZXR1cm4gaWR4O1xcbjYxOTc6XFx0XFxuNjE5ODpcXHRmYWlsZWRfZmluYWxfaW5zZXJ0OlxcbjYxOTk6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXFx1MDAzZWRlYnVnZnMpO1xcbjYyMDA6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cXHUwMDNlaHcpO1xcbjYyMDE6XFx0ZmFpbGVkX2h3OlxcbjYyMDI6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwMzpcXHRmYWlsZWRfYmluZDpcXG42MjA0OlxcdFxcdGRldmljZV91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwNTpcXHRmYWlsZWRfZHJ2ZGF0YTpcXG42MjA2OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGh3KTtcXG42MjA3OlxcdGZhaWxlZDpcXG42MjA4OlxcdFxcdHJldHVybiBlcnI7XFxuNjIwOTpcXHR9XFxuNjIxMDpcXHRcXG42MjExOlxcdHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG42MjEyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjYyMTM6XFx0e1xcbjYyMTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG42MjE1OlxcdFxcdHZvaWQgKmRhdGE7XFxuNjIxNjpcXHRcXHRpbnQgcmV0O1xcbjYyMTc6XFx0XFxuNjIxODpcXHRcXHRza2IgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XFxuNjIxOTpcXHRcXHRpZiAoIXNrYilcXG42MjIwOlxcdFxcdFxcdHJldHVybjtcXG42MjIxOlxcdFxcbjYyMjI6XFx0XFx0ZGF0YSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCAwLFxcbjYyMjM6XFx0XFx0XFx0XFx0ICAgSFdTSU1fQ01EX0RFTF9SQURJTyk7XFxuNjIyNDpcXHRcXHRpZiAoIWRhdGEpXFxuNjIyNTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMjY6XFx0XFxuNjIyNzpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG42MjI4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyMjk6XFx0XFx0XFx0Z290byBlcnJvcjtcXG42MjMwOlxcdFxcbjYyMzE6XFx0XFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkFESU9fTkFNRSwgc3RybGVuKGh3bmFtZSksXFxuNjIzMjpcXHRcXHRcXHQgICAgICBod25hbWUpO1xcbjYyMzM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjIzNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMzU6XFx0XFxuNjIzNjpcXHRcXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xcbjYyMzc6XFx0XFxuNjIzODpcXHRcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcXG42MjM5OlxcdFxcbjYyNDA6XFx0XFx0cmV0dXJuO1xcbjYyNDE6XFx0XFxuNjI0MjpcXHRlcnJvcjpcXG42MjQzOlxcdFxcdG5sbXNnX2ZyZWUoc2tiKTtcXG42MjQ0OlxcdH1cXG42MjQ1OlxcdFxcbjYyNDY6XFx0c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbjYyNDc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXFxuNjI0ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNjI0OTpcXHR7XFxuNjI1MDpcXHRcXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLCBpbmZvKTtcXG42MjUxOlxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVxcdTAwM2VkZWJ1Z2ZzKTtcXG42MjUyOlxcdFxcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjUzOlxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVxcdTAwM2VkZXYpO1xcbjYyNTQ6XFx0XFx0ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS1cXHUwMDNlZGV2KTtcXG42MjU1OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjU2OlxcdH1cXG42MjU3OlxcdFxcbjYyNTg6XFx0c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfcmFkaW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG42MjU5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MzguNjExMjcwMjY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NDM5ODMzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBoZXJlIGludm9sdmVzIHVwZGF0aW5nIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGEgYHN0cnVjdCBuZXQgKm5ldGAgYXJndW1lbnQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCB3aXRoIHRoZSBvcmlnaW5hbCBsb2dpYyBzdGlsbCBwcmVzZW50IHdpdGhpbiBhbiBgaWYgKGluZm8pYCBibG9jay4gV2hlbiBhIGBnZW5sX2luZm9gIGlzIHByZXNlbnQsIHRoZSBjYWxsIHRvIGBnZW5sX25vdGlmeWAgcmVtYWlucyB1bmNoYW5nZWQuIFRoZSBhZGRlZCBgbmV0YCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHdoZW4gYGluZm9gIGlzIGBOVUxMYC4gSW4gdGhpcyBgaW5mbyA9PSBOVUxMYCBjYXNlLCB3aGVyZSBwcmV2aW91c2x5IHRoZSBjb2RlIHVzZWQgdGhlIGRlZmF1bHQgbXVsdGljYXN0IGJlaGF2aW9yLCBpdCBub3cgZXhwbGljaXRseSB0YXJnZXRzIHRoZSBjb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlIHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AuXG5cblRoZSBkcml2aW5nIG1vdGl2YXRpb24gaXMgY2xlYXI6IHRvIGVuc3VyZSBtdWx0aWNhc3QgbWVzc2FnZXMgcmVsYXRlZCB0byByYWRpbyBjb25maWd1cmF0aW9uIGFyZSBzZW50IHRvIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB3aGVyZSB0aGUgd2lwaHkgYWN0dWFsbHkgKmxpdmVzKiwgcmF0aGVyIHRoYW4gZGVmYXVsdGluZyB0byBgaW5pdF9uZXRgLiBUaGlzIGlzIGNyaXRpY2FsIHdoZW4gcmFkaW9zIGFyZSBjcmVhdGVkIG9yIGRlc3Ryb3llZCBvdXRzaWRlIG9mIGEgZGlyZWN0IGdlbmVyaWMgbmV0bGluayByZXF1ZXN0IGNvbnRleHQg4oCTIGEgY29tbW9uIHNjZW5hcmlvIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGNsZWFudXAsIG9yIHdoZW4gdHJpZ2dlcmVkIHRocm91Z2ggc3lzZnMgb3Igb3RoZXIgaW50ZXJuYWwgbWVjaGFuaXNtcy4gYGh3c2ltX21jYXN0X25ld19yYWRpb2AgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIHBhc3MgYG5ldGAgKG9idGFpbmVkIGZyb20gYHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KWApIGludG8gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogc2VjdXJpdHkgYW5kIHN0YWJpbGl0eS4gSSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBpcyB0aGVyZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gSSdtIGNvbmZpZGVudCB0aGVyZSBpc24ndC4gVGhlIG1vZGlmaWNhdGlvbiBzaW1wbHkgcGFzc2VzIGEgcG9pbnRlciB0byBhIHZhbGlkIGBzdHJ1Y3QgbmV0YCBvYmplY3QsIGFuZCB0aGUgdW5kZXJseWluZyBgbWNhc3Rfc2tiYCBtZXNzYWdlIHN0cnVjdHVyZSBpc24ndCBhbHRlcmVkIGF0IGFsbC4gTm8gbmV3IGRhdGEgaXMgaW50cm9kdWNlZCwgbm8gZXhpc3RpbmcgY29uZGl0aW9uYWwgbG9naWMgaXMgYWZmZWN0ZWQgYnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgYm91bmRzIGFyZSBpbXBhY3RlZC4gVGhlIGRhdGEgd2l0aGluIHRoZSBtZXNzYWdlIGlzIHVuY2hhbmdlZCwgYW5kIEkgc2VlIG5vIHJpc2sgb2YgbWVtb3J5IGxlYWtzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgbmVlZCB0byBxdWlja2x5IHJldmlldyB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkndmUgbWlzc2VkLiBCdXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgbGlrZSBhIHdlbGwtc2NvcGVkIGNoYW5nZSBkZXNpZ25lZCB0byBjb3JyZWN0IGEgbmFtZXNwYWNlIGlzc3VlIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjQ0LjA1NTI1NjgxNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxODU4MTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod3NpbV9tY2FzdF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYz03OTA9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBod3NpbV9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgwMi1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjgwMzpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MDQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODEzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6ODE0OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaHdzaW1fcGh5ICpwaHkpXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MzItXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYzo4MzM6XFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIGluZm8pO1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODM0LVxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9ODk2PXN0YXRpYyBpbnQgaHdzaW1fYWRkX29uZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTk3OS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjk4MDpcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW5mbywgcGh5KTtcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTk4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQzNzg9c3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDM5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo0Mzk5OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0MDAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQ0MTA9c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0OTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDQ5MTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ1MTI6XFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDUxMy1cXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01Njc1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTkzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYxOTQ6XFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjExOnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjM4OlxcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MjQ2PXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyNTA6XFx0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXFx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI1MS1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cXHUwMDNlZGVidWdmcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjQ2LjU3Mzg0NTkwNloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDQwNDU4MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBDb25jZXJucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBtdWx0aWNhc3Qgbm90aWZpY2F0aW9ucyBpbiBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gVGhlIGZpcnN0IHN0ZXAgd2FzIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIsIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCB1c2VzIG9mIGBod3NpbV9tY2FzdF8qYCBpbiB0aGF0IGZpbGUuIEdyZXBwaW5nIHRoZSBjb2RlIHNob3dlZCBhbGwgdGhlIHJlbGV2YW50IGNhbGxzLiBHb29kLCB0aGF0J3MgZG9uZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSByZXF1aXJlbWVudHMgZm9yIEtNU0FOLiBJIG5lZWQgdG8gc2V0IGBOZWVkc0tNU0FOYCBhbmQgdGhlIGBLTVNBTlJlYXNvbmluZ2Agc3RyaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGNoYW5naW5nIHRoZSBtdWx0aWNhc3QgZnVuY3Rpb24gY2FsbHMgdG8gdGFyZ2V0IHRoZSBjb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlIHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AgaW5zdGVhZCBvZiBgZ2VubG1zZ19tdWx0aWNhc3RgICp3aGVuKiB0aGUgYGluZm9gIHBvaW50ZXIgaXMgTlVMTC4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggaXMganVzdCAqcGFzc2luZyogYSBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyLCBgd2lwaHlfbmV0KC4uLilgLCB0byBleGlzdGluZyBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGZ1bmN0aW9ucy5cblxuQ3J1Y2lhbGx5LCBpdCdzICpub3QqIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIG5ldyBtZW1vcnksIG5vdCBtb2RpZnlpbmcgZXhpc3Rpbmcgc3RydWN0dXJlIGZpZWxkcyBpbiBhIHdheSB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgaGF6YXJkcywgYW5kIGl0J3Mgbm90IGNvcHlpbmcgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGludHJvZHVjaW5nIGJ1ZmZlciBib3VuZGFyeSBpc3N1ZXMsIG9yIGNyZWF0aW5nIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gQW55IHBvaW50ZXIgcHJvYmxlbXMgb3IgbGlmZXRpbWUgaXNzdWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBub3JtYWwgZGV0ZWN0b3JzLCBzdWNoIGFzIEtBU0FOLCBLQVNMUiwgYW5kIGdlbmVyYWwgY3Jhc2ggZHVtcHMsIGFzIHRoZXkgd291bGQgYmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2UgaW4gdGhlc2UgYXJlYXMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUuIFRoaXMgbG9va3MgbGlrZSBhIHNhZmUgY2hhbmdlLiBPa2F5LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjEsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjUwLjYxNDMwNzI2M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBtYWM4MDIxMV9od3NpbSB0byB1c2UgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSBpbnN0ZWFkIG9mIGdlbmxtc2dfbXVsdGljYXN0KCkgd2hlbiBicm9hZGNhc3RpbmcgbmV3L2RlbGV0ZWQgcmFkaW8gbmV0bGluayBub3RpZmljYXRpb25zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBnZW5sX2luZm8sIHBhc3NpbmcgdGhlIHRhcmdldCBuZXRucyBmcm9tIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWx0ZXIgZGF0YSBzZXJpYWxpemF0aW9uLCBtb2RpZnkgYnVmZmVyIGJvdW5kcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcy4gQmVjYXVzZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG1hYzgwMjExX2h3c2ltIHRvIHVzZSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIGluc3RlYWQgb2YgZ2VubG1zZ19tdWx0aWNhc3QoKSB3aGVuIGJyb2FkY2FzdGluZyBuZXcvZGVsZXRlZCByYWRpbyBuZXRsaW5rIG5vdGlmaWNhdGlvbnMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIGdlbmxfaW5mbywgcGFzc2luZyB0aGUgdGFyZ2V0IG5ldG5zIGZyb20gd2lwaHlfbmV0KGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhbHRlciBkYXRhIHNlcmlhbGl6YXRpb24sIG1vZGlmeSBidWZmZXIgYm91bmRzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 23:54:33 +0000 UTC FinishedAt: 2026-09-06 00:13:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "f5ec3f50-9c0b-4e30-9779-e11d2206533d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "hwsim_mcast_config_msg", "hwsim_mcast_new_radio", "hwsim_mcast_del_radio", "mac80211_hwsim_new_radio", "mac80211_hwsim_del_radio", "hwsim_new_radio_nl", "hwsim_del_radio_nl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fbWNhc3RfY29uZmlnX21zZyYjMzQ7LAogICAgJiMzNDtod3NpbV9tY2FzdF9uZXdfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbWNhc3RfZGVsX3JhZGlvJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX25ld19yYWRpbyYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbmV3X3JhZGlvX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX2RlbF9yYWRpb19ubCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbWFjODAyMTFfaHdzaW0gdG8gdXNlIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgaW5zdGVhZCBvZiBnZW5sbXNnX211bHRpY2FzdCgpIHdoZW4gYnJvYWRjYXN0aW5nIG5ldy9kZWxldGVkIHJhZGlvIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZ2VubF9pbmZvLCBwYXNzaW5nIHRoZSB0YXJnZXQgbmV0bnMgZnJvbSB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhbHRlciBkYXRhIHNlcmlhbGl6YXRpb24sIG1vZGlmeSBidWZmZXIgYm91bmRzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbyYjMzk7cyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MTI6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uZDc3ZjU0ZGFlZmM1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTQzOTYsMTUgJiM0Mzs0Mzk2LDE1IEBAIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zIHtcbiBcdGJvb2wgYmFja2dyb3VuZF9yYWRhcjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYixcbiYjNDM7c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvKVxuIFx0XHRnZW5sX25vdGlmeShcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxuIFx0XHRcdCAgICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuIFx0ZWxzZVxuLVx0XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCAwLFxuLVx0XHRcdFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0Z2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxuJiM0MztcdFx0XHRcdFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcbiB9XG4gXG4gc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbkBAIC00NDg4LDcgJiM0Mzs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYjtcbkBAIC00NTA4LDcgJiM0Mzs0NTA5LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcbiBcdGdlbmxtc2dfZW5kKG1jYXN0X3NrYiwgZGF0YSk7XG4gXG4tXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgaW5mbyk7XG4mIzQzO1x0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XG4gXHRyZXR1cm47XG4gXG4gb3V0X2VycjpcbkBAIC02MTkwLDcgJiM0Mzs2MTkxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdGh3c2ltX3JhZGlvc19nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xuIFxuLVx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgaW5mbywgcGFyYW0pO1xuJiM0MztcdGh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xuIFxuIFx0cmV0dXJuIGlkeDtcbiBcbkBAIC02MjA4LDcgJiM0Mzs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHR2b2lkICpkYXRhO1xuQEAgLTYyMzQsNyAmIzQzOzYyMzUsNyBAQCBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXG4gXG4gXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xuIFxuLVx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIGluZm8pO1xuJiM0MztcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuIFxuIFx0cmV0dXJuO1xuIFxuQEAgLTYyNDYsNyAmIzQzOzYyNDcsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4gXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmh3bmFtZSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4tXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cdTAwM2VpZHgsIGh3bmFtZSwgaW5mbyk7XG4mIzQzO1x0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbyk7XG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cdTAwM2VkZWJ1Z2ZzKTtcbiBcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXHUwMDNlaHcpO1xuIFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h3c2ltX21jYXN0X2NvbmZpZ19tc2cmIzM0OywKICAgICYjMzQ7aHdzaW1fbWNhc3RfbmV3X3JhZGlvJiMzNDssCiAgICAmIzM0O2h3c2ltX21jYXN0X2RlbF9yYWRpbyYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8mIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvJiMzNDssCiAgICAmIzM0O2h3c2ltX25ld19yYWRpb19ubCYjMzQ7LAogICAgJiMzNDtod3NpbV9kZWxfcmFkaW9fbmwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGljYXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBsb2dpYyBkdXJpbmcgcmFkaW8gY3JlYXRpb24gYW5kIGRlbGV0aW9uIGluIG1hYzgwMjExX2h3c2ltIHRvIHRhcmdldCB0aGUgcmFkaW8mIzM5O3Mgd2lwaHkgbmV0d29yayBuYW1lc3BhY2UgdmlhIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgd2hlbiBnZW5sX2luZm8gaXMgTlVMTC4gbWFjODAyMTFfaHdzaW0gaXMgYSBzb2Z0d2FyZS1zaW11bGF0ZWQgd2lyZWxlc3MgZHJpdmVyIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIG5ldGxpbmsgKGh3c2ltL25sODAyMTEpIGFuZCBuZXRucyBsaWZlY3ljbGUgb3BlcmF0aW9ucy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlcmFjdGlvbnMgYW5kIG11bHRpY2FzdCBoYW5kbGluZyBkdXJpbmcgY29uY3VycmVudCByYWRpbyBjcmVhdGlvbiwgZGVsZXRpb24sIGFuZCBuYW1lc3BhY2UgZXhpdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmZDBhZTUyMGJjMzE1NzFkZjBiYmY0NGRkYjgyZTgwYmU3ZThiMTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAwOjEyOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwppbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwpAQCAtNDM5NiwxNSAmIzQzOzQzOTYsMTUgQEAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgewogCWJvb2wgYmFja2dyb3VuZF9yYWRhcjsKIH07CiAKLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwKJiM0MztzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCWlmIChpbmZvKQogCQlnZW5sX25vdGlmeSgmYW1wO2h3c2ltX2dlbmxfZmFtaWx5LCBtY2FzdF9za2IsIGluZm8sCiAJCQkgICAgSFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTsKIAllbHNlCi0JCWdlbmxtc2dfbXVsdGljYXN0KCZhbXA7aHdzaW1fZ2VubF9mYW1pbHksIG1jYXN0X3NrYiwgMCwKLQkJCQkgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7CiYjNDM7CQlnZW5sbXNnX211bHRpY2FzdF9uZXRucygmYW1wO2h3c2ltX2dlbmxfZmFtaWx5LCBuZXQsIG1jYXN0X3NrYiwgMCwKJiM0MzsJCQkJCUhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsCkBAIC00NDg4LDcgJiM0Mzs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MztzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCSAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zICpwYXJhbSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiOwpAQCAtNDUwOCw3ICYjNDM7NDUwOSw3IEBAIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAKIAlnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpOwogCi0JaHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIGluZm8pOwomIzQzOwlod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTsKIAlyZXR1cm47CiAKIG91dF9lcnI6CkBAIC02MTkwLDcgJiM0Mzs2MTkxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIAlod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtod3NpbV9yYWRpb19sb2NrKTsKIAotCWh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIGluZm8sIHBhcmFtKTsKJiM0MzsJaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtJmd0O2h3LSZndDt3aXBoeSksIGluZm8sIHBhcmFtKTsKIAogCXJldHVybiBpZHg7CiAKQEAgLTYyMDgsNyAmIzQzOzYyMDksNyBAQCBzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogfQogCiBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsCi0JCQkJICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzOwkJCQkgIHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXZvaWQgKmRhdGE7CkBAIC02MjM0LDcgJiM0Mzs2MjM1LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLAogCiAJZ2VubG1zZ19lbmQoc2tiLCBkYXRhKTsKIAotCWh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBpbmZvKTsKJiM0MzsJaHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIG5ldCwgaW5mbyk7CiAKIAlyZXR1cm47CiAKQEAgLTYyNDYsNyAmIzQzOzYyNDcsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsCiAJCQkJICAgICBjb25zdCBjaGFyICpod25hbWUsCiAJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCWh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLSZndDtpZHgsIGh3bmFtZSwgaW5mbyk7CiYjNDM7CWh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLSZndDtpZHgsIGh3bmFtZSwgd2lwaHlfbmV0KGRhdGEtJmd0O2h3LSZndDt3aXBoeSksIGluZm8pOwogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLSZndDtkZWJ1Z2ZzKTsKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLSZndDtodyk7CiAJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtJmd0O2Rldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXJnZXQgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgdGhlIGBtYWM4MDIxMV9od3NpbWAgZHJpdmVyIOKAkyB0aGUgc2ltdWxhdGVkIFdpRmkgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGl0c2VsZi4gQSBnb29kIGNob2ljZSBmb3IgZnV6emluZywgSSYjMzk7ZCBzYXksIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IGl04oCZcyBmcmVxdWVudGx5IHRhcmdldGVkIGJ5IHN5emthbGxlciB0aHJvdWdoIG5sODAyMTEgYW5kIHRoZSBod3NpbSBuZXRsaW5rIGludGVyZmFjZSAodGhhdCYjMzk7cyB0aGUgYG1hYzgwMjExX2h3c2ltYCBnZW5sIGZhbWlseSkuIE5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuIFRpbWUgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIGNoYW5nZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgYW5kIGFsc28gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgYW5kIHdoeSwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGUtMi1tYWM4MDIxMV9od3NpbS1vYmpzXHRcdCYjNDM7PSBtYWM4MDIxMV9od3NpbV9tYWluLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDo5OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MTA6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjE3PXN0cnVjdCBod3NpbV90eF9yYXRlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjMwLSAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjMxOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzI6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDogQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBpcyByZXF1aXJlZC5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzMtICpcdFRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzQ6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTogVXNlIHNob3J0IHByZWFtYmxlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTOiBIVCByYXRlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUzogVkhUIE1DUyByYXRlLCBpbiB0aGlzIGNhc2UgdGhlIGlkeCBmaWVsZCBpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTIzNy0gKlx0c3BsaXQgaW50byBhIGhpZ2hlciA0IGJpdHMgKE5zcykgYW5kIGxvd2VyIDQgYml0cyAoTUNTIG51bWJlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzg6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzktICpcdGluIEdyZWVuZmllbGQgbW9kZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDA6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0MS0gKlx0NDAgTUh6LlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0MjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgODAgTUh6IHRyYW5zbWlzc2lvblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0MzogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSDogSW5kaWNhdGVzIDE2MCBNSHogdHJhbnNtaXNzaW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ0LSAqXHQoODAmIzQzOzgwIGlzbiYjMzk7dCBzdXBwb3J0ZWQgeWV0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0Ni0gKlx0dGhlIGFkamFjZW50IDIwIE1IeiBjaGFubmVscywgaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCB0eXBlIGlzXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ3LSAqXHROTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDg6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJOiBTaG9ydCBHdWFyZCBpbnRlcnZhbCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlx0cmF0ZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjUxPWVudW0gaHdzaW1fdHhfcmF0ZV9mbGFncyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjUyOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1JUU19DVFNcdFx0PSBCSVQoMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjUzOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUXHRcdD0gQklUKDEpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NDpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRVx0PSBCSVQoMiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1Ni1cdC8qIHJhdGUgaW5kZXggaXMgYW4gSFQvVkhUIE1DUyBpbnN0ZWFkIG9mIGFuIGluZGV4ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU3Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTXHRcdFx0PSBCSVQoMyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU4Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTERcdFx0PSBCSVQoNCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU5Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIXHRcdD0gQklUKDUpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MDpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX0RVUF9EQVRBXHRcdD0gQklUKDYpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MTpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJXHRcdD0gQklUKDcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MjpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1NcdFx0XHQ9IEJJVCg4KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjM6XHRNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEhcdFx0PSBCSVQoOSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY0Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSFx0XHQ9IEJJVCgxMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjY1LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTMyOD1lbnVtIGh3c2ltX3JhdGVfaW5mb19hdHRyaWJ1dGVzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMzQ3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjM0ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9IICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjEwOiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjExOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oPTE2NT12b2lkIGllZWU4MDIxMV9od3NpbV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjE2ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9JX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTI9c3RhdGljIHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGNvbnN0IHU4ICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNzovKiBNQUM4MDIxMV9IV1NJTSBuZXRsaW5rIGZhbWlseSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHdzaW1fbWNncnBzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI4Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgcG9saWN5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo5MDI6LyogTUFDODAyMTFfSFdTSU0gdmlydGlvIHF1ZXVlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAzLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpod3NpbV92cXNbSFdTSU1fTlVNX1ZRU107XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MTU3NT1zdGF0aWMgaW5saW5lIHUxNiB0cmFuc190eF9yYXRlX2ZsYWdzX2llZWUyaHdzaW0oc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1NzktXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MjpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODMtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg1LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4Ny1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg4Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTEQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkwOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkyOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTkzLVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19TSE9SVF9HSTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTUtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1ZIVF9NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTctXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzgwX01IWl9XSURUSClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTg6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTk5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTYwMDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNjAxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM0ODQ9c3RhdGljIGNvbnN0IGNoYXIgbWFjODAyMTFfaHdzaW1fZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM0OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNDk1OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fU1NUQVRTX0xFTiBBUlJBWV9TSVpFKG1hYzgwMjExX2h3c2ltX2dzdHJpbmdzX3N0YXRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzQ5Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0zNTA2PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3NzZXRfY291bnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUwOS1cdGlmIChzc2V0ID09IEVUSF9TU19TVEFUUylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MTA6XHRcdHJldHVybiBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MTQ9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNTMwOlx0V0FSTl9PTihpICE9IE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUzMS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NTY0OD1zdGF0aWMgY29uc3QgdTggaWZ0eXBlc19leHRfY2FwYV9hcFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjU3OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTXHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY1OC1cdEZJRUxEX1BSRVBfQ09OU1QoSUVFRTgwMjExX01MRF9DQVBfT1BfVElEX1RPX0xJTktfTUFQX05FR19TVVBQLCBcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjM9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjcwLVx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjcxOlx0XHQubWxkX2NhcGFfYW5kX29wcyA9IE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzItXHR9LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNDg9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBod3NpbV9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTQ5Olx0Lm5hbWUgPSBcJiMzNDtNQUM4MDIxMV9IV1NJTVwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNTAtXHQudmVyc2lvbiA9IDEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzQ2OD1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0NzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NDc3Oi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBkZXZpY2UgaWQgdGFibGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0Nzgtc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NDc5Olx0eyBWSVJUSU9fSURfTUFDODAyMTFfSFdTSU0sIFZJUlRJT19ERVZfQU5ZX0lEIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NDgwLVx0eyAwIH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTc4PXN0YXRpYyB1NjQgaHdzaW1fbmFuX2dldF9tYXN0ZXJfcmFuayhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo4MzpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODQtXHRcdG1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0yMTY9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0yNzMtXHRpZiAoKHNsb3QgIT0gU0xPVF8yNEdIWl9EVyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6Mjc0Olx0ICAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMjc1LVx0ICAgIHJ4X3N0YXR1cy5mcmVxICE9IDI0MzcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzYtXHRcdCAgICAoY2cgPT0gb3duX2NnIFx1MDAyNlx1MDAyNiBmcmFtZV9hbXIgXHUwMDNlIGN1cnJfYW1yKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Mzc6XHRcdCAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzgtXHRcdFx0LyogQXZvaWQgYSBzdGF0ZSB0cmFuc2l0aW9uICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00NjgtXHRcdFx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjQ2OTpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDcwLVx0XHRcdGRhdGEtXHUwMDNlbmFuLnJhbmRvbV9mYWN0b3JfdmFsaWRfZHdzdCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz02MTI9bWFjODAyMTFfaHdzaW1fbmFuX2V4ZWNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjUtXHRpZiAoZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNjIDMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNjpcdFx0ZGF0YS1cdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI3Olx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyOC1cdFx0IGRhdGEtXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFx1MDAzZT0gMylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI5Olx0XHRkYXRhLVx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMwOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzEtXHRcdCBkYXRhLVx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNlPSAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzI6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMzOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjM0LVx0XHQgZGF0YS1cdTAwM2VuYW4uc3luY190cmFuc2l0aW9uX3Njb3JlIFx1MDAzYyAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzU6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDEtXHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjQyOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDMtXHQgICAgIWhydGltZXJfYWN0aXZlKFx1MDAyNmRhdGEtXHUwMDNlbmFuLmRpc2NvdmVyeV9iZWFjb25fdGltZXIpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTQ6XHRcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTU6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NTYtXHRcdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gTkFOX1dBUk1VUF9EV1NUO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjU5LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NjA6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY2MS1cdFx0XHRkYXRhLVx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Njk1PW1hYzgwMjExX2h3c2ltX25hbl90eF9iZWFjb24oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTAtXHRuYW5fYXR0ci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YobWFzdGVyX2luZGljYXRpb24pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NzUxOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTItXHRcdG1hc3Rlcl9pbmRpY2F0aW9uLm1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03NzQ9bWFjODAyMTFfaHdzaW1fbmFuX3Nsb3RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODA3LVx0XHR0eF9zeW5jX2JlYWNvbiA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwODpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA5Olx0XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgxMC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTg2Nz1tYWM4MDIxMV9od3NpbV9uYW5fZGlzY292ZXJ5X2JlYWNvbl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04NzktXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNmRhdGEtXHUwMDNlbmFuLnN0YXRlX2xvY2spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgwOlx0XHRpZiAoZGF0YS1cdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgxOlx0XHQgICAgZGF0YS1cdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg4Mi1cdFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz05MDk9aW50IG1hYzgwMjExX2h3c2ltX25hbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyNi1cdFx0LyogU3RhcnQgaW4gdGhlIFwmIzM0O3NjYW5cJiMzNDsgcGhhc2UgYW5kIHN0YXkgdGhlcmUgZm9yIGEgbGl0dGxlIGJpdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5Mjc6XHRcdGRhdGEtXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU47XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyOC1cdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMC1cdFx0ZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWYgPSBjb25mLVx1MDAzZW1hc3Rlcl9wcmVmO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5MzE6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMi1cdFx0bWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNlbmFuLmN1cnJlbnRfYW1pLCAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9MTIyNj1ib29sIG1hYzgwMjExX2h3c2ltX25hbl9yZWNlaXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6MTIzNjpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNy1cdFx0cmV0dXJuIGNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXEgPT0gMjQzNztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjc6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjg6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTEwPWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3BoYXNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTE6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTI6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMzpcdE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmgtMTQtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTE2PWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3JvbGUge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxNzpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTg6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxOTpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0yMC19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9OTk9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fbG9jYWxfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTEwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTAyOiNlbmRpZiAvKiBfX01BQzgwMjExX0hXU0lNX05BTl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzA4CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IHNjcnV0aW5pemUgdGhpcyBwYXRjaC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZywgc28gbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBzaW5jZSBJJiMzOTt2ZSB3b3JrZWQgaW4gdGhpcyBhcmVhIGJlZm9yZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhvc2UgbGluZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2lsbCBiZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhvc2UgY2hhbmdlcyB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzkwOlx0XHR1MzIgaWZ0eXBlcztcbjQzOTE6XHRcdHUzMiAqY2lwaGVycztcbjQzOTI6XHRcdHU4IG5fY2lwaGVycztcbjQzOTM6XHRcdGJvb2wgbWxvO1xuNDM5NDpcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpwbXNyX2NhcGE7XG40Mzk1Olx0XHRib29sIG5hbl9kZXZpY2U7XG40Mzk2Olx0XHRib29sIGJhY2tncm91bmRfcmFkYXI7XG40Mzk3Olx0fTtcbjQzOTg6XHRcbjQzOTk6XHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcbjQ0MDA6XHRcdFx0XHRcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG40NDAxOlx0e1xuNDQwMjpcdFx0aWYgKGluZm8pXG40NDAzOlx0XHRcdGdlbmxfbm90aWZ5KFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCBtY2FzdF9za2IsIGluZm8sXG40NDA0Olx0XHRcdFx0ICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XG40NDA1Olx0XHRlbHNlXG40NDA2Olx0XHRcdGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCBuZXQsIG1jYXN0X3NrYiwgMCxcbjQ0MDc6XHRcdFx0XHRcdFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcbjQ0MDg6XHR9XG40NDA5Olx0XG40NDEwOlx0c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbjQ0MTE6XHRcdFx0XHQgICAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxuNDQxMjpcdHtcbjQ0MTM6XHRcdGludCByZXQ7XG40NDE0Olx0XG40NDE1Olx0XHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcbjQ0MTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDE3Olx0XHRcdHJldHVybiByZXQ7XG40NDE4Olx0XG40NDE5Olx0XHRpZiAocGFyYW0tXHUwMDNlY2hhbm5lbHMpIHtcbjQ0MjA6XHRcdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX0NIQU5ORUxTLCBwYXJhbS1cdTAwM2VjaGFubmVscyk7XG40NDIxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDIyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjQ0MjM6XHRcdH1cbjQ0MjQ6XHRcbjQ0MjU6XHRcdGlmIChwYXJhbS1cdTAwM2VyZWdfYWxwaGEyKSB7XG40NDI2Olx0XHRcdHJldCA9IG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1JFR19ISU5UX0FMUEhBMiwgMixcbjQ0Mjc6XHRcdFx0XHQgICAgICBwYXJhbS1cdTAwM2VyZWdfYWxwaGEyKTtcbjQ0Mjg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0Mjk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuNDQzMDpcdFx0fVxuNDQzMTpcdFxuNDQzMjpcdFx0aWYgKHBhcmFtLVx1MDAzZXJlZ2QpIHtcbjQ0MzM6XHRcdFx0aW50IGk7XG40NDM0Olx0XG40NDM1Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkmIzQzOyYjNDM7KSB7XG40NDM2Olx0XHRcdFx0aWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tXHUwMDNlcmVnZClcbjQ0Mzc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNDQzODpcdFxuNDQzOTpcdFx0XHRcdHJldCA9IG5sYV9wdXRfdTMyKHNrYiwgSFdTSU1fQVRUUl9SRUdfQ1VTVE9NX1JFRywgaSk7XG40NDQwOlx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0NDE6XHRcdFx0XHRcdHJldHVybiByZXQ7XG40NDQyOlx0XHRcdFx0YnJlYWs7XG40NDQzOlx0XHRcdH1cbjQ0NDQ6XHRcdH1cbjQ0NDU6XHRcbjQ0NDY6XHRcdGlmIChwYXJhbS1cdTAwM2VyZWdfc3RyaWN0KSB7XG40NDQ3Olx0XHRcdHJldCA9IG5sYV9wdXRfZmxhZyhza2IsIEhXU0lNX0FUVFJfUkVHX1NUUklDVF9SRUcpO1xuNDQ0ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDQ0OTpcdFx0XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzcGVjaWZpZWQgc2VjdGlvbnMgb2YgYG1hYzgwMjExX2h3c2ltX21haW4uY2A6CgoqKkRpdmluZyBpbnRvIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGZvciBzb21lIHRhcmdldGVkIGludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSB3YW50IHRvIGdldCBhIG1vcmUgZ3JhbnVsYXIgbG9vayBhdCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBtYWM4MDIxMV9od3NpbWAgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBzcGVjaWZpYyBhc3BlY3RzIG9mIGl0cyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0NTAwLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGNvZGUsIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIGNvZGUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBsb29rIGF0IHNvbWUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBwZXJoYXBzIGEgY3JpdGljYWwgZnVuY3Rpb24gY2FsbCB0aGF0JiMzOTtzIGNhdXNpbmcgbWUgaXNzdWVzLiBUaGVuLCBJIG5lZWQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygc29tZSByZWxhdGVkIGludGVyYWN0aW9ucyBhbmQgZmxvd3Mgc28gSSB3aWxsIGNoZWNrIG91dCBhcm91bmQgbGluZSA2MTgwIHRocm91Z2ggNjI2MC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZyBnaXZlbiBteSBleGlzdGluZyBleHBlcmllbmNlIHdpdGggcmVsYXRlZCBkcml2ZXJzLiBXaXRoIGEgY2xvc2VyIGxvb2sgYXQgdGhlc2Ugc2VjdGlvbnMsIEkgc2hvdWxkIGdhaW4gdGhlIGNsYXJpdHkgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDg1Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDg2Olx0XHRcdFx0cmV0dXJuIHJldDtcbjQ0ODc6XHRcdH1cbjQ0ODg6XHRcdHJldHVybiAwO1xuNDQ4OTpcdH1cbjQ0OTA6XHRcbjQ0OTE6XHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXG40NDkyOlx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG40NDkzOlx0XHRcdFx0XHQgIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zICpwYXJhbSlcbjQ0OTQ6XHR7XG40NDk1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiO1xuNDQ5NjpcdFx0dm9pZCAqZGF0YTtcbjQ0OTc6XHRcbjQ0OTg6XHRcdG1jYXN0X3NrYiA9IGdlbmxtc2dfbmV3KEdFTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbjQ0OTk6XHRcdGlmICghbWNhc3Rfc2tiKVxuNDUwMDpcdFx0XHRyZXR1cm47XG40NTAxOlx0XG40NTAyOlx0XHRkYXRhID0gZ2VubG1zZ19wdXQobWNhc3Rfc2tiLCAwLCAwLCBcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgMCxcbjQ1MDM6XHRcdFx0XHQgICBIV1NJTV9DTURfTkVXX1JBRElPKTtcbjQ1MDQ6XHRcdGlmICghZGF0YSlcbjQ1MDU6XHRcdFx0Z290byBvdXRfZXJyO1xuNDUwNjpcdFxuNDUwNzpcdFx0aWYgKGFwcGVuZF9yYWRpb19tc2cobWNhc3Rfc2tiLCBpZCwgcGFyYW0pIFx1MDAzYyAwKVxuNDUwODpcdFx0XHRnb3RvIG91dF9lcnI7XG40NTA5Olx0XG40NTEwOlx0XHRnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpO1xuNDUxMTpcdFxuNDUxMjpcdFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XG40NTEzOlx0XHRyZXR1cm47XG40NTE0Olx0XG40NTE1Olx0b3V0X2VycjpcbjQ1MTY6XHRcdG5sbXNnX2ZyZWUobWNhc3Rfc2tiKTtcbjQ1MTc6XHR9XG40NTE4Olx0XG40NTE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc2JhbmRfaWZ0eXBlX2RhdGEgc2JhbmRfY2FwYV8yZ2h6W10gPSB7XG40NTIwOlx0XHR7XG40NTIxOlx0XHRcdC50eXBlc19tYXNrID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHxcbjQ1MjI6XHRcdFx0XHQgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCksXG40NTIzOlx0XHRcdC5oZV9jYXAgPSB7XG40NTI0Olx0XHRcdFx0Lmhhc19oZSA9IHRydWUsXG40NTI1Olx0XHRcdFx0LmhlX2NhcF9lbGVtID0ge1xuNDUyNjpcdFx0XHRcdFx0Lm1hY19jYXBfaW5mb1swXSA9XG40NTI3Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMF9IVENfSEUsXG40NTI4Olx0XHRcdFx0XHQubWFjX2NhcF9pbmZvWzFdID1cbjQ1Mjk6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAxX1RGX01BQ19QQURfRFVSXzE2VVMgfFxuNDUzMDpcdFx0XHRcdFx0XHRJRUVFODAyMTFfSEVfTUFDX0NBUDFfTVVMVElfVElEX0FHR19SWF9RT1NfOCxcbjQ1MzE6XHRcdFx0XHRcdC5tYWNfY2FwX2luZm9bMl0gPVxuNDUzMjpcdFx0XHRcdFx0XHRJRUVFODAyMTFfSEVfTUFDX0NBUDJfQlNSIHxcbjQ1MzM6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAyX01VX0NBU0NBRElORyB8XG40NTM0Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMl9BQ0tfRU4sXG40NTM1Olx0XHRcdFx0XHQubWFjX2NhcF9pbmZvWzNdID1cbjQ1MzY6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAzX09NSV9DT05UUk9MIHxcbjQ1Mzc6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX01BQ19DQVAzX01BWF9BTVBEVV9MRU5fRVhQX0VYVF8zLFxuNDUzODpcdFx0XHRcdFx0Lm1hY19jYXBfaW5mb1s0XSA9IElFRUU4MDIxMV9IRV9NQUNfQ0FQNF9BTVNEVV9JTl9BTVBEVSxcbjQ1Mzk6XHRcdFx0XHRcdC5waHlfY2FwX2luZm9bMF0gPVxuNDU0MDpcdFx0XHRcdFx0XHRJRUVFODAyMTFfSEVfUEhZX0NBUDBfQ0hBTk5FTF9XSURUSF9TRVRfNDBNSFpfSU5fMkcsXG40NTQxOlx0XHRcdFx0XHQucGh5X2NhcF9pbmZvWzFdID1cbjQ1NDI6XHRcdFx0XHRcdFx0SUVFRTgwMjExX0hFX1BIWV9DQVAxX1BSRUFNQkxFX1BVTkNfUlhfTUFTSyB8XG40NTQzOlx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9QSFlfQ0FQMV9ERVZJQ0VfQ0xBU1NfQSB8XG40NTQ0Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9IRV9QSFlfQ0FQMV9MRFBDX0NPRElOR19JTl9QQVlMT0FEIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBpbXBsaWVkIHRob3VnaHRzLCBwcmVzZW50ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKlN0cmF0ZWdpYyBSZWFkaW5nIEZvY3VzKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbi4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbnZlcnNhdGlvbiAod2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIFsqKmluc2VydCB5b3VyIGFzc3VtZWQgZmllbGQgaGVyZSwgZS5nLiwgcmVzZWFyY2gsIGFuYWx5c2lzLCBwcm9qZWN0IG1hbmFnZW1lbnQqKl0pLCBhIHNwZWNpZmljIHNlY3Rpb24gd2FycmFudHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgZm9jdXNpbmcgb24gdGhlIHJhbmdlIG9mIHBhZ2VzIG9yIGRhdGEgcG9pbnRzIGJldHdlZW4gNjE4MCBhbmQgNjI2MCBpcyBjcnVjaWFsLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBhcmd1bWVudHMsIG9yIGtleSBkYXRhLCBvciBjcnVjaWFsIHByb2NlZHVyYWwgc3RlcHMgYXJlIGNlbnRlcmVkLiBUaGlzIGZvY3VzIHdpbGwgYWxsb3cgZm9yIGFuIGVmZmljaWVudCBhbmQgdGFyZ2V0ZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWF0ZXJpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYxODA6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjYxODE6XHRcdFx0aWYgKGluZm8pIHtcbjYxODI6XHRcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O3Blcm0gYWRkciBhbHJlYWR5IHByZXNlbnRcJiMzNDspO1xuNjE4MzpcdFx0XHRcdE5MX1NFVF9CQURfQVRUUihpbmZvLVx1MDAzZWV4dGFjayxcbjYxODQ6XHRcdFx0XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1BFUk1fQUREUl0pO1xuNjE4NTpcdFx0XHR9XG42MTg2Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xuNjE4NzpcdFx0XHRnb3RvIGZhaWxlZF9maW5hbF9pbnNlcnQ7XG42MTg4Olx0XHR9XG42MTg5Olx0XG42MTkwOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRhdGEtXHUwMDNlbGlzdCwgXHUwMDI2aHdzaW1fcmFkaW9zKTtcbjYxOTE6XHRcdGh3c2ltX3JhZGlvc19nZW5lcmF0aW9uJiM0MzsmIzQzOztcbjYxOTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xuNjE5MzpcdFxuNjE5NDpcdFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtXHUwMDNlaHctXHUwMDNld2lwaHkpLCBpbmZvLCBwYXJhbSk7XG42MTk1Olx0XG42MTk2Olx0XHRyZXR1cm4gaWR4O1xuNjE5NzpcdFxuNjE5ODpcdGZhaWxlZF9maW5hbF9pbnNlcnQ6XG42MTk5Olx0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cdTAwM2VkZWJ1Z2ZzKTtcbjYyMDA6XHRcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXHUwMDNlaHcpO1xuNjIwMTpcdGZhaWxlZF9odzpcbjYyMDI6XHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG42MjAzOlx0ZmFpbGVkX2JpbmQ6XG42MjA0Olx0XHRkZXZpY2VfdW5yZWdpc3RlcihkYXRhLVx1MDAzZWRldik7XG42MjA1Olx0ZmFpbGVkX2RydmRhdGE6XG42MjA2Olx0XHRpZWVlODAyMTFfZnJlZV9odyhodyk7XG42MjA3Olx0ZmFpbGVkOlxuNjIwODpcdFx0cmV0dXJuIGVycjtcbjYyMDk6XHR9XG42MjEwOlx0XG42MjExOlx0c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuNjIxMjpcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42MjEzOlx0e1xuNjIxNDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjYyMTU6XHRcdHZvaWQgKmRhdGE7XG42MjE2Olx0XHRpbnQgcmV0O1xuNjIxNzpcdFxuNjIxODpcdFx0c2tiID0gZ2VubG1zZ19uZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuNjIxOTpcdFx0aWYgKCFza2IpXG42MjIwOlx0XHRcdHJldHVybjtcbjYyMjE6XHRcbjYyMjI6XHRcdGRhdGEgPSBnZW5sbXNnX3B1dChza2IsIDAsIDAsIFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCAwLFxuNjIyMzpcdFx0XHRcdCAgIEhXU0lNX0NNRF9ERUxfUkFESU8pO1xuNjIyNDpcdFx0aWYgKCFkYXRhKVxuNjIyNTpcdFx0XHRnb3RvIGVycm9yO1xuNjIyNjpcdFxuNjIyNzpcdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JBRElPX0lELCBpZCk7XG42MjI4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNjIyOTpcdFx0XHRnb3RvIGVycm9yO1xuNjIzMDpcdFxuNjIzMTpcdFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkFESU9fTkFNRSwgc3RybGVuKGh3bmFtZSksXG42MjMyOlx0XHRcdCAgICAgIGh3bmFtZSk7XG42MjMzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNjIzNDpcdFx0XHRnb3RvIGVycm9yO1xuNjIzNTpcdFxuNjIzNjpcdFx0Z2VubG1zZ19lbmQoc2tiLCBkYXRhKTtcbjYyMzc6XHRcbjYyMzg6XHRcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuNjIzOTpcdFxuNjI0MDpcdFx0cmV0dXJuO1xuNjI0MTpcdFxuNjI0MjpcdGVycm9yOlxuNjI0MzpcdFx0bmxtc2dfZnJlZShza2IpO1xuNjI0NDpcdH1cbjYyNDU6XHRcbjYyNDY6XHRzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG42MjQ3Olx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmh3bmFtZSxcbjYyNDg6XHRcdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjYyNDk6XHR7XG42MjUwOlx0XHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cdTAwM2VpZHgsIGh3bmFtZSwgd2lwaHlfbmV0KGRhdGEtXHUwMDNlaHctXHUwMDNld2lwaHkpLCBpbmZvKTtcbjYyNTE6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVx1MDAzZWRlYnVnZnMpO1xuNjI1MjpcdFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cdTAwM2Vodyk7XG42MjUzOlx0XHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGF0YS1cdTAwM2VkZXYpO1xuNjI1NDpcdFx0ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VkZXYpO1xuNjI1NTpcdFx0aWVlZTgwMjExX2ZyZWVfaHcoZGF0YS1cdTAwM2Vodyk7XG42MjU2Olx0fVxuNjI1NzpcdFxuNjI1ODpcdHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fZ2V0X3JhZGlvKHN0cnVjdCBza19idWZmICpza2IsXG42MjU5Olx0XHRcdFx0XHQgICAgc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUFDODAyMTEgSFdTSU0gTXVsdGljYXN0IEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIG11bHRpY2FzdCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYGh3c2ltX21jYXN0X2RlbF9yYWRpb2AsIGFuZCBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AsIGFyZSBiZWluZyB1dGlsaXplZCB3aXRoaW4gYG1hYzgwMjExX2h3c2ltX21haW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZWlyIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIG11bHRpY2FzdCBvcGVyYXRpb24uIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZG8gdGhhdCBpcyBhIGdvb2Qgb2xkIGZhc2hpb25lZCBncmVwIHNlYXJjaCB3aXRoaW4gdGhlIGZpbGUuIEkgd2FudCB0byBzZWUgKmV4YWN0bHkqIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiB0aGUgY29kZSBmbG93IGFuZCB1c2FnZSBwYXR0ZXJucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3NpbV9tY2FzdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00Mzc4PXN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00Mzk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDM5OTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0MDAtXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQ0MTA9c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NDkwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDQ5MTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NDkyLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ1MTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo0NTEyOlx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTEzLVx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NzU9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjE5NDpcdGh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjE5NS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjIxMTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEyLVx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyMzg6XHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjI0Nj1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI0OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjUwOlx0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSwgaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjUxLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDgyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlcyBpbiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBod3NpbWAgbW9kdWxlLiBQcmV2aW91c2x5LCB0aGUgZnVuY3Rpb24gdG9vayBhIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIGEgYHN0cnVjdCBnZW5sX2luZm9gIGFzIGFyZ3VtZW50cy4gTm93LCBpdCBoYXMgYSBgc3RydWN0IG5ldCAqbmV0YCBhcmd1bWVudCBhcyB3ZWxsLiBUaGUga2V5IGRpZmZlcmVuY2Ugc2VlbXMgdG8gYmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljOiBpZiBgaW5mb2AgaXMgbm90IE5VTEwsIHRoZW4gYSBzdHJhaWdodGZvcndhcmQgYGdlbmxfbm90aWZ5YCBjYWxsIGlzIG1hZGUuIEhvd2V2ZXIsIGlmIGBpbmZvYCAqaXMqIE5VTEwsIHRoZSBmdW5jdGlvbiBub3cgY2FsbHMgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYC4KClRoZSBvcmlnaW5hbCB2ZXJzaW9uIHVzZWQgYGdlbmxtc2dfbXVsdGljYXN0YCB3aGVuIGBpbmZvYCB3YXMgTlVMTC4gVGhlIHVwZGF0ZSBpbmNvcnBvcmF0ZXMgYF9uZXRuc2AgbWVhbmluZyB0aGVyZSYjMzk7cyBub3cgYW4gZXhwbGljaXQgYG5ldGAgbmFtZXNwYWNlIHByb3ZpZGVkIHRvIHRoZSBgZ2VubG1zZ19tdWx0aWNhc3RgIGNhbGwuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoZSBuZXQgbmFtZXNwYWNlIHByb3ZpZGVzIGlzb2xhdGlvbiBhbmQgc2VnbWVudGF0aW9uIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyB0aGlzIGluZGljYXRlcyB0aGF0IHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBtZXNzYWdlcyBtaWdodCBiZSB0YXJnZXRlZCB0byBzcGVjaWZpYyBuZXR3b3JrIG5hbWVzcGFjZXMgbm93LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsICp3aGVuKiBpcyBgaW5mb2AgTlVMTD8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBjb250ZXh0LiBJdCBkaWN0YXRlcyB0aGUgYmVoYXZpb3IgYW5kIGltcGxpY2F0aW9uIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyB0aW1lIHRvIGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgaXMgYmVpbmcgaW52b2tlZCwgc3BlY2lmaWNhbGx5IGZyb20gYG1hYzgwMjExX2h3c2ltX25ld19yYWRpb2AgYW5kIGBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9gLiBLbm93aW5nIHdoZW4gYGluZm9gIGlzIE5VTEwgaW4gdGhvc2UgY2FsbHMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIHdpbGwgdGVsbCBtZSBpZiB0aGUgaW50ZW50IG9mIGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBpcyB0byBzZW5kIG1lc3NhZ2VzIHdpdGhpbiBhIHNwZWNpZmljIG5ldHdvcmsgbmFtZXNwYWNlLCBvciBwb3RlbnRpYWxseSB0byBhbGwuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIGluc2lnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hYzgwMjExX2h3c2ltX25ld19yYWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjM9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01Njc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY3NTpzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY3Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjgwNj1zdGF0aWMgaW50IGh3c2ltX25ld19yYWRpb19ubChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTY5NTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2OTU4Olx0cmV0ID0gbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKGluZm8sIFx1MDAyNnBhcmFtKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTY5NTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxMT1zdGF0aWMgaW50IF9faW5pdCBpbml0X21hYzgwMjExX2h3c2ltKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzYyNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjc2MjU6XHRcdGVyciA9IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhOVUxMLCBcdTAwMjZwYXJhbSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NjI2LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBDb250ZXh0IG9mIGBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGljaCBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgYG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb2AuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBwYXJhbW91bnQ7IGl0IHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB3aGF0IGl0cyByb2xlIGlzIHdpdGhpbiB0aGUgYnJvYWRlciBtYWM4MDIxMS1od3NpbSBmcmFtZXdvcmsuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIGl0cyBjb3JyZWN0IGJlaGF2aW9yLCBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3Vlcywgb3IgZXZlbiByZWZhY3RvcmluZyB0aGUgY29kZS4gQnkgZXhhbWluaW5nIHRoZSBjYWxsIHNpdGVzLCBJIGNhbiBnZXQgYSBtdWNoIGJldHRlciBoYW5kbGUgb24gYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MjExPXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjI0NjpzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjQ3LVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjMwNT1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9mcmVlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjMxNi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MzE3Olx0XHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZGF0YSwgd2lwaHlfbmFtZShkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYzMTgtXHRcdFx0XHRcdCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02OTY2PXN0YXRpYyBpbnQgaHdzaW1fZGVsX3JhZGlvX25sKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzAwMS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MDAyOlx0XHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZGF0YSwgd2lwaHlfbmFtZShkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcwMDMtXHRcdFx0XHRcdCBpbmZvKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTYyPXN0YXRpYyB2b2lkIHJlbW92ZV91c2VyX3JhZGlvcyh1MzIgcG9ydGlkLCBpbnQgbmV0Z3JvdXApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4MC1cdFx0bGlzdF9kZWwoXHUwMDI2ZW50cnktXHUwMDNlbGlzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTgxOlx0XHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZW50cnksIHdpcGh5X25hbWUoZW50cnktXHUwMDNlaHctXHUwMDNld2lwaHkpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4Mi1cdFx0XHRcdFx0IE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcyMzg9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBod3NpbV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI2MC1cdFx0bGlzdF9kZWwoXHUwMDI2ZGF0YS1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcyNjE6XHRcdG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhkYXRhLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI2Mi1cdFx0XHRcdFx0IHdpcGh5X25hbWUoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBod3NpbV9leGl0X25ldGAgYW5kIGByZW1vdmVfdXNlcl9yYWRpb3NgIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgcmVjZW50IGNoYW5nZXMsIGFuZCBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyByZWdhcmRpbmcgYGh3c2ltX2V4aXRfbmV0YCBhbmQgYHJlbW92ZV91c2VyX3JhZGlvc2AuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgaG93IG11bHRpY2FzdCBtZXNzYWdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZXMgKG5ldG5zKSBleGl0IG9yIHdoZW4gcmFkaW9zIGFyZSByZW1vdmVkLiBQcmV2aW91c2x5LCBpZiB0aGUgYGluZm9gIHBvaW50ZXIgd2FzIGBOVUxMYCAod2hpY2ggaGFwcGVucyBpbiB0aGVzZSBzaXR1YXRpb25zKSwgYGdlbmxtc2dfbXVsdGljYXN0YCB3b3VsZCBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgcHJlc3VtYWJseSBgaW5pdF9uZXRgLiBOb3csIGl0JiMzOTtzIGNvcnJlY3RseSB1c2luZyBgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnNgIHdpdGggdGhlIG5ldG5zIG9mIHRoZSBgd2lwaHlgIQoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXR5IGFuZCB0aGVyZWZvcmUgd29ydGggZnV6emluZy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCByZWFjaGFiaWxpdHkuIElzIGBtYWM4MDIxMV9od3NpbWAgZXZlbiByZWxldmFudD8gQWJzb2x1dGVseS4gYG1hYzgwMjExX2h3c2ltYCBpcyBhIHdlbGwta25vd24gc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgdXNlZCBleHRlbnNpdmVseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCwgY3J1Y2lhbGx5LCBpdCYjMzk7cyBhbHJlYWR5IHN1cHBvcnRlZCBieSBzeXprYWxsZXIuIEFueSB1c2VyIHByb2dyYW0sIGdpdmVuIHRoZSByaWdodCBjYXBhYmlsaXRpZXMgb3IgdGhyb3VnaCBuZXRsaW5rL25ldG5zIG1hbmlwdWxhdGlvbiwgY2FuIGNyZWF0ZSBvciBkZWxldGUgdGhlc2Ugc2ltdWxhdGVkIHJhZGlvcywgc2VuZCBOZXRsaW5rIG1lc3NhZ2VzIHZpYSBjb21tYW5kcyBsaWtlIGBIV1NJTV9DTURfTkVXX1JBRElPYCBhbmQgYEhXU0lNX0NNRF9ERUxfUkFESU9gLCBhbmQgdHJpZ2dlciBuZXRucyBjcmVhdGlvbi9kZXN0cnVjdGlvbi4gU29ja2V0IGNsb3NpbmcgKGByZW1vdmVfdXNlcl9yYWRpb3NgKSBpcyBhbHNvIGFuIGVudHJ5IHBvaW50LiBUaGlzIGNvbmZpcm1zIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcy4KCk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBJdCB0b3VjaGVzIGV4ZWN1dGFibGUgY29kZSBpbiBhIHZpcnR1YWwgZHJpdmVyIGFuZCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBtdWx0aWNhc3QgbWVzc2FnZSBub3RpZmljYXRpb24gYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcyB3aGVuIHJhZGlvcyBhcmUgY3JlYXRlZCBvciBkZXN0cm95ZWQuIFRoaXMgY2hhbmdlIGluIG11bHRpY2FzdCBoYW5kbGluZyBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGluY29ycmVjdCBuYW1lc3BhY2UgY29udGV4dC4gVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIFllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgdG8gc2V0IHVwIG15IGZ1enppbmcgdGFyZ2V0LiBMb29raW5nIGF0IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcywgYE1BQzgwMjExX0hXU0lNYCBzaW1wbHkgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCB3aGljaCBtYWtlcyB0aGluZ3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGJ1aWxkLCB3aGljaCBsaWtlbHkgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3RhbmRhcmQgYG1hYzgwMjExYCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLCBzdGFydGluZyByaWdodCBhdCB0aGUgdG9wLCBhcm91bmQgbGluZSAxLiBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0byBzZWUgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNQUM4MDIxMSB3aXJlbGVzcyBzdGFjay4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgTGludXgmIzM5O3Mgd2lyZWxlc3MgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBhbmQgYnVpbGQgb3B0aW9ucyBoZXJlLiBXZSBhcmUgZ29pbmcgdG8gZmluZCB0aGUgbWFzdGVyIGtub2JzIGZvciBjb250cm9sbGluZyB0aGUgZmVhdHVyZSBzZXQgb2YgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCB3aWxsIGluZm9ybSB0aGUgc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBuYXZpZ2F0ZSBhIHBvdGVudGlhbGx5IGNvbXBsZXggd2ViIG9mIGRlcGVuZGVuY2llcyBhcyBpdCBpcyBsaWtlbHkgdGhhdCBkaWZmZXJlbnQgd2lyZWxlc3MgcHJvdG9jb2xzIG9yIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBnb2luZyB0byBiZSBtdXR1YWxseSBleGNsdXNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgZ2l2ZW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMqKjogSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGBDRkc4MDIxMWAuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGRyaXZlcnMsIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZSB0b2dnbGVzPwoqICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB2YXJpb3VzIHdpcmVsZXNzIG1vZHVsZXMgKGUuZy4sIHNwZWNpZmljIHJhZGlvIGZpcm13YXJlIHN1cHBvcnQpIHJlbHkgb24gdGhpcyBmb3VuZGF0aW9uYWwgbGF5ZXIuIEEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBlc3NlbnRpYWwuCiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBob3cgdGhlc2UgZGVwZW5kZW5jaWVzIGFmZmVjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZnJvbSBjb21waWxhdGlvbiB0aW1lIHRvIGltYWdlIHNpemUuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS4KKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIQoKVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTFcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2lyZWxlc3Mgb3B0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIGRyaXZlcnMuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNSB0aHJvdWdoIDMwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgZ2VuZXJhbCB3aXJlbGVzcyBmZWF0dXJlcyBhcmUgbG9jYXRlZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGUgY2hvaWNlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBDRkc4MDIxMVxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAyMDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IENSQzMyXG4gIDIyOlx0XHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcbiAgMjM6XHRcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbiYjMzk7dFxuICAyNDpcdFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxuICAyNTpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXG4gIDI4Olx0XHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxuICAzMTpcdFxuICAzMjpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcbiAgMzM6XHRcbiAgMzQ6XHRcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNjcKCQkJCQkJCW91dHB1dDogMjc1CgkJCQkJCQl0aG91Z2h0czogMTEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNdWx0aWNhc3QgTm90aWZpY2F0aW9uIEhhbmRsaW5nIGluIG1hYzgwMjExX2h3c2ltKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdDogaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBNQUM4MDIxMV9IV1NJTWAsIGBNQUM4MDIxMWAsIGFuZCBgQ0ZHODAyMTFgIGNvbmZpZ3VyYXRpb25zLiBTdGFuZGFyZCBuZXR3b3JraW5nIHN0dWZmIGxpa2UgYE5FVGAgYW5kIGBORVRMSU5LYCBzaG91bGQgYmUgaW4gcGxheSB0b28sIGJ1dCB0aG9zZSBhcmUgZXhwZWN0ZWQuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgc2VlbXMgdG8gYmUgZnVuY3Rpb25zIHdpdGhpbiBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkOiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AsIGBod3NpbV9tY2FzdF9uZXdfcmFkaW9gLCBgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvYCwgYGh3c2ltX21jYXN0X2RlbF9yYWRpb2AsIGBtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9gLCBgaHdzaW1fbmV3X3JhZGlvX25sYCwgYGh3c2ltX2RlbF9yYWRpb19ubGAsIGBod3NpbV9leGl0X25ldGAsIGFuZCBgcmVtb3ZlX3VzZXJfcmFkaW9zYC4gSSYjMzk7dmUgY2hlY2tlZCBhbmQgY29uZmlybWVkIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3ltYm9scywgbm90IHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZDsgdGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoYXQgaW1wYWN0cyB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIG1vZGlmaWNhdGlvbi4KCmBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGlzIGNhbGxlZCBieSBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGluaXRfbWFjODAyMTFfaHdzaW1gLiBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCBpcyBjYWxsZWQgYnkgYG1hYzgwMjExX2h3c2ltX2ZyZWVgLCBgaHdzaW1fZGVsX3JhZGlvX25sYCwgYHJlbW92ZV91c2VyX3JhZGlvc2AsIGFuZCBgaHdzaW1fZXhpdF9uZXRgLiBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGh3c2ltX2RlbF9yYWRpb19ubGAgYXJlIG5ldGxpbmsgY2FsbGJhY2tzLCBzbyB0aG9zZSBhcmUga2V5IGVudHJ5IHBvaW50cy4gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGFyZSBzdGF0aWMgaGVscGVycy4KCkkmIzM5O3ZlIGFsc28gZXhhbWluZWQgdGhlIGNoYW5nZXMgd2l0aGluIHRob3NlIGZ1bmN0aW9uczogYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIG5vdyBwYXNzZXMgYG5ldGAgdG8gYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYC4gYGh3c2ltX21jYXN0X25ld19yYWRpb2AgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIG5vdyByZWNlaXZlIGFuZCB1c2UgYG5ldGAgdG8gcGFzcyB0byBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AuIGBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGFuZCBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCBwYXNzIGB3aXBoeV9uZXQoLi4uKWAgdG8gdGhlaXIgcmVzcGVjdGl2ZSBoZWxwZXIgZnVuY3Rpb25zLiBGaW5hbGx5LCB3ZSBoYXZlIHRoZSBuZXRsaW5rIGhhbmRsZXJzIGBod3NpbV9uZXdfcmFkaW9fbmxgIGFuZCBgaHdzaW1fZGVsX3JhZGlvX25sYC4KClRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGRlYWxpbmcgd2l0aCBhbnl0aGluZyBsaWtlIGBrbWFsbG9jYCBvciBtdXRleCBsb2Nrcywgd2hpY2ggYXJlIHViaXF1aXRvdXMgYW5kIGNhbiBjYXVzZSBwcm9ibGVtcyBpbiBhbnkgc2l0dWF0aW9uOyB0aGV5JiMzOTtyZSBhbGwgKnNwZWNpZmljKiB0byB0aGUgYG1hYzgwMjExX2h3c2ltYCB2aXJ0dWFsIGRyaXZlci4gVGhhdOKAmXMgZ29vZCBmcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLgoKU28sIHRoZSBwYXRjaCBpcyB1cGRhdGluZyBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIGhhbmRsaW5nIGluIGBtYWM4MDIxMV9od3NpbWAuIFdoZW4gcmFkaW9zIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQgd2l0aG91dCBhIHNwZWNpZmljIGdlbmxfaW5mbyBjb250ZXh0LCBpdCYjMzk7cyBub3cgdXNpbmcgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYCB3aXRoIHRoZSB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIGBnZW5sbXNnX211bHRpY2FzdGAuCgpJdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpczogYG1hYzgwMjExX2h3c2ltYCBpcyBhIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyIHRoYXQmIzM5O3MgZWFzaWx5IGFjY2Vzc2libGUgYW5kIHRlc3RlZCB0aHJvdWdoIG5ldGxpbmssIGVzcGVjaWFsbHkgd2l0aGluIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBjYW4gaGVscCB1cyB2ZXJpZnkgdGhhdCBtdWx0aWNhc3QgbWVzc2FnaW5nIGFuZCBsaWZlY3ljbGUgaW50ZXJhY3Rpb25zIGFyZSBjb3JyZWN0IGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMgZHVyaW5nIHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5ldG5zIHRlYXJkb3duLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gZmxhZywgbGV0JiMzOTtzIHByb2NlZWQuCgpJ4oCZbSBjb25maWRlbnQgd2l0aCB0aGVzZSBmaW5kaW5ncy4gTGV0JiMzOTtzIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtod3NpbV9tY2FzdF9jb25maWdfbXNnJiMzNDssCiAgICAmIzM0O2h3c2ltX21jYXN0X25ld19yYWRpbyYjMzQ7LAogICAgJiMzNDtod3NpbV9tY2FzdF9kZWxfcmFkaW8mIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyYjMzQ7LAogICAgJiMzNDtod3NpbV9uZXdfcmFkaW9fbmwmIzM0OywKICAgICYjMzQ7aHdzaW1fZGVsX3JhZGlvX25sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG11bHRpY2FzdCBldmVudCBub3RpZmljYXRpb24gbG9naWMgZHVyaW5nIHJhZGlvIGNyZWF0aW9uIGFuZCBkZWxldGlvbiBpbiBtYWM4MDIxMV9od3NpbSB0byB0YXJnZXQgdGhlIHJhZGlvJiMzOTtzIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIHZpYSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIHdoZW4gZ2VubF9pbmZvIGlzIE5VTEwuIG1hYzgwMjExX2h3c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChod3NpbS9ubDgwMjExKSBhbmQgbmV0bnMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmFtZXNwYWNlIGV4aXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fbWNhc3RfY29uZmlnX21zZyYjMzQ7LAogICAgJiMzNDtod3NpbV9tY2FzdF9uZXdfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbWNhc3RfZGVsX3JhZGlvJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX25ld19yYWRpbyYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8mIzM0OywKICAgICYjMzQ7aHdzaW1fbmV3X3JhZGlvX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX2RlbF9yYWRpb19ubCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbyYjMzk7cyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBtYWM4MDIxMV9od3NpbSB0byB1c2UgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSBpbnN0ZWFkIG9mIGdlbmxtc2dfbXVsdGljYXN0KCkgd2hlbiBicm9hZGNhc3RpbmcgbmV3L2RlbGV0ZWQgcmFkaW8gbmV0bGluayBub3RpZmljYXRpb25zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBnZW5sX2luZm8sIHBhc3NpbmcgdGhlIHRhcmdldCBuZXRucyBmcm9tIHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGFsdGVyIGRhdGEgc2VyaWFsaXphdGlvbiwgbW9kaWZ5IGJ1ZmZlciBib3VuZHMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuIEJlY2F1c2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmQwYWU1MjBiYzMxNTcxZGYwYmJmNDRkZGI4MmU4MGJlN2U4YjEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMDoxMjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKaW5kZXggMDJiNmQ4MWNjY2QxMS4uZDc3ZjU0ZGFlZmM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKQEAgLTQzOTYsMTUgJiM0Mzs0Mzk2LDE1IEBAIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zIHsKIAlib29sIGJhY2tncm91bmRfcmFkYXI7CiB9OwogCi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsCiYjNDM7c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlpZiAoaW5mbykKIAkJZ2VubF9ub3RpZnkoJmFtcDtod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLAogCQkJICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7CiAJZWxzZQotCQlnZW5sbXNnX211bHRpY2FzdCgmYW1wO2h3c2ltX2dlbmxfZmFtaWx5LCBtY2FzdF9za2IsIDAsCi0JCQkJICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpOwomIzQzOwkJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoJmFtcDtod3NpbV9nZW5sX2ZhbWlseSwgbmV0LCBtY2FzdF9za2IsIDAsCiYjNDM7CQkJCQlIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLApAQCAtNDQ4OCw3ICYjNDM7NDQ4OCw4IEBAIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiYjNDM7c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LAomIzQzOwkJCQkgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCQkJICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYjsKQEAgLTQ1MDgsNyAmIzQzOzQ1MDksNyBAQCBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogCiAJZ2VubG1zZ19lbmQobWNhc3Rfc2tiLCBkYXRhKTsKIAotCWh3c2ltX21jYXN0X2NvbmZpZ19tc2cobWNhc3Rfc2tiLCBpbmZvKTsKJiM0MzsJaHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7CiAJcmV0dXJuOwogCiBvdXRfZXJyOgpAQCAtNjE5MCw3ICYjNDM7NjE5MSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJaHdzaW1fcmFkaW9zX2dlbmVyYXRpb24mIzQzOyYjNDM7OwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHdzaW1fcmFkaW9fbG9jayk7CiAKLQlod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCBpbmZvLCBwYXJhbSk7CiYjNDM7CWh3c2ltX21jYXN0X25ld19yYWRpbyhpZHgsIHdpcGh5X25ldChkYXRhLSZndDtody0mZ3Q7d2lwaHkpLCBpbmZvLCBwYXJhbSk7CiAKIAlyZXR1cm4gaWR4OwogCkBAIC02MjA4LDcgJiM0Mzs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIH0KIAogc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLAotCQkJCSAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl2b2lkICpkYXRhOwpAQCAtNjIzNCw3ICYjNDM7NjIzNSw3IEBAIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSwKIAogCWdlbmxtc2dfZW5kKHNrYiwgZGF0YSk7CiAKLQlod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgaW5mbyk7CiYjNDM7CWh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pOwogCiAJcmV0dXJuOwogCkBAIC02MjQ2LDcgJiM0Mzs2MjQ3LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLAogCQkJCSAgICAgY29uc3QgY2hhciAqaHduYW1lLAogCQkJCSAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS0mZ3Q7aWR4LCBod25hbWUsIGluZm8pOwomIzQzOwlod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS0mZ3Q7aWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLSZndDtody0mZ3Q7d2lwaHkpLCBpbmZvKTsKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS0mZ3Q7ZGVidWdmcyk7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS0mZ3Q7aHcpOwogCWRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLSZndDtkZXYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1OQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gbWVzc2FnaW5nIHdpdGhpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlci4gVGhlIGBkaWZmYCBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGZ1bmN0aW9uLiBUaGUgY2hhbmdlIGlzIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBzbyBsZXQmIzM5O3MgcGFyc2UgdGhpcyBjYXJlZnVsbHkuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHNpZ25hdHVyZSB3YXM6CgpgYGBjCnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwKCQkJCSAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCmBgYAoKQW5kIGl0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIHRvOgoKYGBgYwpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCwKCQkJCSAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCmBgYAoKVGhlIGFkZGl0aW9uIG9mIHRoZSBgc3RydWN0IG5ldCAqbmV0YCBhcmd1bWVudCBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIG1lc3NhZ2luZyBpcyBiZWNvbWluZyBuZXQgbmFtZXNwYWNlIGF3YXJlLiBOb3csIHRoZSBmdW5jdGlvbiBhY2NlcHRzIGEgYHN0cnVjdCBuZXRgIHBvaW50ZXIuIFRoaXMgaXMgbGlrZWx5IGRvbmUgdG8gZW5hYmxlIHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiB0byBiZSBzcGVjaWZpYyB0byB0aGUgbmV0d29yayBuYW1lc3BhY2UuCgpMZXQmIzM5O3MgbG9vayBmdXJ0aGVyLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyB0aGUgYGdlbmxtc2dfbXVsdGljYXN0YCBjYWxsIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtkIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBob3cgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGlzICpjYWxsZWQqIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBuZXRgIGlzIGJlaW5nIHBvcHVsYXRlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBuZXcgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYCBjYWxsIGhhcy4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSBuZXR3b3JrIHNlZ21lbnRhdGlvbiBmb3Igb3VyIHZpcnR1YWwgZGV2aWNlcy4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIGF3YXJlbmVzcyBpbiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBtZXNzYWdpbmcgd2l0aGluIHRoZSBod3NpbSBkcml2ZXIsIHByb2JhYmx5IHRvIGVuaGFuY2UgbmV0d29yayBpc29sYXRpb24gb3IgdG8gc3VwcG9ydCBtb3JlIGNvbXBsZXggdmlydHVhbGl6ZWQgbmV0d29ya2luZyBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzOTA6XHRcdHUzMiBpZnR5cGVzO1xuNDM5MTpcdFx0dTMyICpjaXBoZXJzO1xuNDM5MjpcdFx0dTggbl9jaXBoZXJzO1xuNDM5MzpcdFx0Ym9vbCBtbG87XG40Mzk0Olx0XHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1zcl9jYXBhYmlsaXRpZXMgKnBtc3JfY2FwYTtcbjQzOTU6XHRcdGJvb2wgbmFuX2RldmljZTtcbjQzOTY6XHRcdGJvb2wgYmFja2dyb3VuZF9yYWRhcjtcbjQzOTc6XHR9O1xuNDM5ODpcdFxuNDM5OTpcdHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxuNDQwMDpcdFx0XHRcdFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjQ0MDE6XHR7XG40NDAyOlx0XHRpZiAoaW5mbylcbjQ0MDM6XHRcdFx0Z2VubF9ub3RpZnkoXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG1jYXN0X3NrYiwgaW5mbyxcbjQ0MDQ6XHRcdFx0XHQgICAgSFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcbjQ0MDU6XHRcdGVsc2VcbjQ0MDY6XHRcdFx0Z2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxuNDQwNzpcdFx0XHRcdFx0XHRIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuNDQwODpcdH1cbjQ0MDk6XHRcbjQ0MTA6XHRzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLFxuNDQxMTpcdFx0XHRcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXG40NDEyOlx0e1xuNDQxMzpcdFx0aW50IHJldDtcbjQ0MTQ6XHRcbjQ0MTU6XHRcdHJldCA9IG5sYV9wdXRfdTMyKHNrYiwgSFdTSU1fQVRUUl9SQURJT19JRCwgaWQpO1xuNDQxNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0MTc6XHRcdFx0cmV0dXJuIHJldDtcbjQ0MTg6XHRcbjQ0MTk6XHRcdGlmIChwYXJhbS1cdTAwM2VjaGFubmVscykge1xuNDQyMDpcdFx0XHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfQ0hBTk5FTFMsIHBhcmFtLVx1MDAzZWNoYW5uZWxzKTtcbjQ0MjE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQ0MjI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuNDQyMzpcdFx0fVxuNDQyNDpcdFxuNDQyNTpcdFx0aWYgKHBhcmFtLVx1MDAzZXJlZ19hbHBoYTIpIHtcbjQ0MjY6XHRcdFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkVHX0hJTlRfQUxQSEEyLCAyLFxuNDQyNzpcdFx0XHRcdCAgICAgIHBhcmFtLVx1MDAzZXJlZ19hbHBoYTIpO1xuNDQyODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDQyOTpcdFx0XHRcdHJldHVybiByZXQ7XG40NDMwOlx0XHR9XG40NDMxOlx0XG40NDMyOlx0XHRpZiAocGFyYW0tXHUwMDNlcmVnZCkge1xuNDQzMzpcdFx0XHRpbnQgaTtcbjQ0MzQ6XHRcbjQ0MzU6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tKTsgaSYjNDM7JiM0MzspIHtcbjQ0MzY6XHRcdFx0XHRpZiAoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbVtpXSAhPSBwYXJhbS1cdTAwM2VyZWdkKVxuNDQzNzpcdFx0XHRcdFx0Y29udGludWU7XG40NDM4Olx0XG40NDM5Olx0XHRcdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JFR19DVVNUT01fUkVHLCBpKTtcbjQ0NDA6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDQ0MTpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjQ0NDI6XHRcdFx0XHRicmVhaztcbjQ0NDM6XHRcdFx0fVxuNDQ0NDpcdFx0fVxuNDQ0NTpcdFxuNDQ0NjpcdFx0aWYgKHBhcmFtLVx1MDAzZXJlZ19zdHJpY3QpIHtcbjQ0NDc6XHRcdFx0cmV0ID0gbmxhX3B1dF9mbGFnKHNrYiwgSFdTSU1fQVRUUl9SRUdfU1RSSUNUX1JFRyk7XG40NDQ4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDQ5Olx0XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gZXhhbWluaW5nIGxpbmVzIDYxODAgdG8gNjI2MCBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNgOgoKKipEaXZpbmcgaW50byBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBgaHdzaW1gIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDYxODAgdGhyb3VnaCA2MjYwLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSBzb21lIGNvbnRleHQgb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBibG9jayBvZiBjb2RlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFuZCBwYXRoLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGludGVyZmFjZSBzaW11bGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5IG9yIHBlcmhhcHMgdHJhY2sgZG93biBhIGJ1Zywgb3IgdW5kZXJzdGFuZCBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIE1BQzgwMjExIGNvcmUuCgpJIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZWl0aGVyIGhhcmR3YXJlIHNpbXVsYXRpb24gYmVoYXZpb3IsIG1heWJlIHBhY2tldCBpbmplY3Rpb24sIHJhdGUgY29udHJvbCBoYW5kbGluZywgb3IgcGVyaGFwcyBzb21lIGtpbmQgb2YgZXJyb3IgbWFuYWdlbWVudCBvciBldmVudCBwcm9jZXNzaW5nLiBTaW5jZSBJIGtub3cgdGhpcyBjb2RlIHByZXR0eSB3ZWxsLCBJJiMzOTttIGV4cGVjdGluZyB0byBlaXRoZXIgcmVmcmVzaCBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHNpbXVsYXRpb24sIG9yIHBvc3NpYmx5IHNwb3QgYSBwb3RlbnRpYWwgYXJlYSBmb3Igb3B0aW1pemF0aW9uIG9yIGEgc3VidGxlIGJ1Zy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGRhdGEgc3RydWN0dXJlcyB1c2VkLCBmdW5jdGlvbnMgY2FsbGVkLCBhbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0aGF0IGhlbHAgZGVmaW5lIHRoZSBsb2dpYyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBjb2RlIHJhbmdlLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgd2l0aCBrZXJuZWwgdGltaW5nLiBJIGFtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpbnRlcnJ1cHQgYW5kIERNQSBpbnRlcmFjdGlvbnMgaWYgdGhleSBhcmUgcmVsZXZhbnQgd2l0aGluIHRoZSByZWxldmFudCBjb2RlLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGJsb2NrLCBJIGNhbiBsaWtlbHkgaWRlbnRpZnkgdGhlIGdlbmVyYWwgY29udHJvbCBmbG93IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc2ltdWxhdGlvbiBtb2RlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjE4MDpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuNjE4MTpcdFx0XHRpZiAoaW5mbykge1xuNjE4MjpcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7cGVybSBhZGRyIGFscmVhZHkgcHJlc2VudFwmIzM0Oyk7XG42MTgzOlx0XHRcdFx0TkxfU0VUX0JBRF9BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuNjE4NDpcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfUEVSTV9BRERSXSk7XG42MTg1Olx0XHRcdH1cbjYxODY6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG42MTg3Olx0XHRcdGdvdG8gZmFpbGVkX2ZpbmFsX2luc2VydDtcbjYxODg6XHRcdH1cbjYxODk6XHRcbjYxOTA6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGF0YS1cdTAwM2VsaXN0LCBcdTAwMjZod3NpbV9yYWRpb3MpO1xuNjE5MTpcdFx0aHdzaW1fcmFkaW9zX2dlbmVyYXRpb24mIzQzOyYjNDM7O1xuNjE5MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG42MTkzOlx0XG42MTk0Olx0XHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbjYxOTU6XHRcbjYxOTY6XHRcdHJldHVybiBpZHg7XG42MTk3Olx0XG42MTk4Olx0ZmFpbGVkX2ZpbmFsX2luc2VydDpcbjYxOTk6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVx1MDAzZWRlYnVnZnMpO1xuNjIwMDpcdFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cdTAwM2Vodyk7XG42MjAxOlx0ZmFpbGVkX2h3OlxuNjIwMjpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXHUwMDNlZGV2KTtcbjYyMDM6XHRmYWlsZWRfYmluZDpcbjYyMDQ6XHRcdGRldmljZV91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlZGV2KTtcbjYyMDU6XHRmYWlsZWRfZHJ2ZGF0YTpcbjYyMDY6XHRcdGllZWU4MDIxMV9mcmVlX2h3KGh3KTtcbjYyMDc6XHRmYWlsZWQ6XG42MjA4Olx0XHRyZXR1cm4gZXJyO1xuNjIwOTpcdH1cbjYyMTA6XHRcbjYyMTE6XHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXG42MjEyOlx0XHRcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjYyMTM6XHR7XG42MjE0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuNjIxNTpcdFx0dm9pZCAqZGF0YTtcbjYyMTY6XHRcdGludCByZXQ7XG42MjE3Olx0XG42MjE4Olx0XHRza2IgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG42MjE5Olx0XHRpZiAoIXNrYilcbjYyMjA6XHRcdFx0cmV0dXJuO1xuNjIyMTpcdFxuNjIyMjpcdFx0ZGF0YSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIDAsXG42MjIzOlx0XHRcdFx0ICAgSFdTSU1fQ01EX0RFTF9SQURJTyk7XG42MjI0Olx0XHRpZiAoIWRhdGEpXG42MjI1Olx0XHRcdGdvdG8gZXJyb3I7XG42MjI2Olx0XG42MjI3Olx0XHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcbjYyMjg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42MjI5Olx0XHRcdGdvdG8gZXJyb3I7XG42MjMwOlx0XG42MjMxOlx0XHRyZXQgPSBubGFfcHV0KHNrYiwgSFdTSU1fQVRUUl9SQURJT19OQU1FLCBzdHJsZW4oaHduYW1lKSxcbjYyMzI6XHRcdFx0ICAgICAgaHduYW1lKTtcbjYyMzM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42MjM0Olx0XHRcdGdvdG8gZXJyb3I7XG42MjM1Olx0XG42MjM2Olx0XHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xuNjIzNzpcdFxuNjIzODpcdFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIG5ldCwgaW5mbyk7XG42MjM5Olx0XG42MjQwOlx0XHRyZXR1cm47XG42MjQxOlx0XG42MjQyOlx0ZXJyb3I6XG42MjQzOlx0XHRubG1zZ19mcmVlKHNrYik7XG42MjQ0Olx0fVxuNjI0NTpcdFxuNjI0NjpcdHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbjYyNDc6XHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxuNjI0ODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuNjI0OTpcdHtcbjYyNTA6XHRcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuNjI1MTpcdFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG42MjUyOlx0XHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVx1MDAzZWh3KTtcbjYyNTM6XHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG42MjU0Olx0XHRkZXZpY2VfdW5yZWdpc3RlcihkYXRhLVx1MDAzZWRldik7XG42MjU1Olx0XHRpZWVlODAyMTFfZnJlZV9odyhkYXRhLVx1MDAzZWh3KTtcbjYyNTY6XHR9XG42MjU3Olx0XG42MjU4Olx0c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfcmFkaW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbjYyNTk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaGVyZSBpbnZvbHZlcyB1cGRhdGluZyB0aGUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbmV0ICpuZXRgIGFyZ3VtZW50LiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgd2l0aCB0aGUgb3JpZ2luYWwgbG9naWMgc3RpbGwgcHJlc2VudCB3aXRoaW4gYW4gYGlmIChpbmZvKWAgYmxvY2suIFdoZW4gYSBgZ2VubF9pbmZvYCBpcyBwcmVzZW50LCB0aGUgY2FsbCB0byBgZ2VubF9ub3RpZnlgIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgYWRkZWQgYG5ldGAgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCB3aGVuIGBpbmZvYCBpcyBgTlVMTGAuIEluIHRoaXMgYGluZm8gPT0gTlVMTGAgY2FzZSwgd2hlcmUgcHJldmlvdXNseSB0aGUgY29kZSB1c2VkIHRoZSBkZWZhdWx0IG11bHRpY2FzdCBiZWhhdmlvciwgaXQgbm93IGV4cGxpY2l0bHkgdGFyZ2V0cyB0aGUgY29ycmVjdCBuZXR3b3JrIG5hbWVzcGFjZSB1c2luZyBgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnNgLgoKVGhlIGRyaXZpbmcgbW90aXZhdGlvbiBpcyBjbGVhcjogdG8gZW5zdXJlIG11bHRpY2FzdCBtZXNzYWdlcyByZWxhdGVkIHRvIHJhZGlvIGNvbmZpZ3VyYXRpb24gYXJlIHNlbnQgdG8gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHdoZXJlIHRoZSB3aXBoeSBhY3R1YWxseSAqbGl2ZXMqLCByYXRoZXIgdGhhbiBkZWZhdWx0aW5nIHRvIGBpbml0X25ldGAuIFRoaXMgaXMgY3JpdGljYWwgd2hlbiByYWRpb3MgYXJlIGNyZWF0ZWQgb3IgZGVzdHJveWVkIG91dHNpZGUgb2YgYSBkaXJlY3QgZ2VuZXJpYyBuZXRsaW5rIHJlcXVlc3QgY29udGV4dCDigJMgYSBjb21tb24gc2NlbmFyaW8gZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiwgY2xlYW51cCwgb3Igd2hlbiB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcyBvciBvdGhlciBpbnRlcm5hbCBtZWNoYW5pc21zLiBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCBhbmQgYGh3c2ltX21jYXN0X2RlbF9yYWRpb2AgcGFzcyBgbmV0YCAob2J0YWluZWQgZnJvbSBgd2lwaHlfbmV0KGRhdGEtJmd0O2h3LSZndDt3aXBoeSlgKSBpbnRvIGBod3NpbV9tY2FzdF9jb25maWdfbXNnYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LiBJJiMzOTt2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBTbywgaXMgdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGlzbiYjMzk7dC4gVGhlIG1vZGlmaWNhdGlvbiBzaW1wbHkgcGFzc2VzIGEgcG9pbnRlciB0byBhIHZhbGlkIGBzdHJ1Y3QgbmV0YCBvYmplY3QsIGFuZCB0aGUgdW5kZXJseWluZyBgbWNhc3Rfc2tiYCBtZXNzYWdlIHN0cnVjdHVyZSBpc24mIzM5O3QgYWx0ZXJlZCBhdCBhbGwuIE5vIG5ldyBkYXRhIGlzIGludHJvZHVjZWQsIG5vIGV4aXN0aW5nIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGFmZmVjdGVkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBhcmUgaW1wYWN0ZWQuIFRoZSBkYXRhIHdpdGhpbiB0aGUgbWVzc2FnZSBpcyB1bmNoYW5nZWQsIGFuZCBJIHNlZSBubyByaXNrIG9mIG1lbW9yeSBsZWFrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHJldmlldyB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkmIzM5O3ZlIG1pc3NlZC4gQnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSB3ZWxsLXNjb3BlZCBjaGFuZ2UgZGVzaWduZWQgdG8gY29ycmVjdCBhIG5hbWVzcGFjZSBpc3N1ZSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c2ltX21jYXN0XyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jPTc5MD1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGh3c2ltX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgwMi1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6ODAzOnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYixcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODA0LVx0XHRcdFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgxMy1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6ODE0OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaHdzaW1fcGh5ICpwaHkpXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgxNS17XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MzItXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjgzMzpcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2cobWNhc3Rfc2tiLCBpbmZvKTtcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODM0LVx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9ODk2PXN0YXRpYyBpbnQgaHdzaW1fYWRkX29uZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy05NzktXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjk4MDpcdGh3c2ltX21jYXN0X25ld19yYWRpbyhpbmZvLCBwaHkpO1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy05ODEtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NDM3OD1zdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDM5OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQzOTk6c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NDAwLVx0XHRcdFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00NDEwPXN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ0OTE6c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5Mi1cdFx0XHRcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTExLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDUxMjpcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2cobWNhc3Rfc2tiLCBuZXQsIGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDUxMy1cdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01Njc1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYxOTQ6XHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYxOTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyMTE6c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMi1cdFx0XHRcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjM4Olx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIG5ldCwgaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTYyNDY9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyNDkte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjI1MDpcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI1MS1cdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVx1MDAzZWRlYnVnZnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYxCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgQ29uY2VybnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIG11bHRpY2FzdCBub3RpZmljYXRpb25zIGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLiBUaGUgZmlyc3Qgc3RlcCB3YXMgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIsIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCB1c2VzIG9mIGBod3NpbV9tY2FzdF8qYCBpbiB0aGF0IGZpbGUuIEdyZXBwaW5nIHRoZSBjb2RlIHNob3dlZCBhbGwgdGhlIHJlbGV2YW50IGNhbGxzLiBHb29kLCB0aGF0JiMzOTtzIGRvbmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSByZXF1aXJlbWVudHMgZm9yIEtNU0FOLiBJIG5lZWQgdG8gc2V0IGBOZWVkc0tNU0FOYCBhbmQgdGhlIGBLTVNBTlJlYXNvbmluZ2Agc3RyaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGNoYW5naW5nIHRoZSBtdWx0aWNhc3QgZnVuY3Rpb24gY2FsbHMgdG8gdGFyZ2V0IHRoZSBjb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlIHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AgaW5zdGVhZCBvZiBgZ2VubG1zZ19tdWx0aWNhc3RgICp3aGVuKiB0aGUgYGluZm9gIHBvaW50ZXIgaXMgTlVMTC4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggaXMganVzdCAqcGFzc2luZyogYSBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyLCBgd2lwaHlfbmV0KC4uLilgLCB0byBleGlzdGluZyBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGZ1bmN0aW9ucy4KCkNydWNpYWxseSwgaXQmIzM5O3MgKm5vdCogYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgbmV3IG1lbW9yeSwgbm90IG1vZGlmeWluZyBleGlzdGluZyBzdHJ1Y3R1cmUgZmllbGRzIGluIGEgd2F5IHRoYXQgY291bGQgaW50cm9kdWNlIG1lbW9yeSBoYXphcmRzLCBhbmQgaXQmIzM5O3Mgbm90IGNvcHlpbmcgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2luZyBidWZmZXIgYm91bmRhcnkgaXNzdWVzLCBvciBjcmVhdGluZyBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIEFueSBwb2ludGVyIHByb2JsZW1zIG9yIGxpZmV0aW1lIGlzc3VlcyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgbm9ybWFsIGRldGVjdG9ycywgc3VjaCBhcyBLQVNBTiwgS0FTTFIsIGFuZCBnZW5lcmFsIGNyYXNoIGR1bXBzLCBhcyB0aGV5IHdvdWxkIGJlIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZSBpbiB0aGVzZSBhcmVhcy4KCkdpdmVuIGFsbCBvZiB0aGF0LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBzYWZlIGNoYW5nZS4gT2theSwgdGltZSB0byBzZXQgdGhlIHJlc3VsdHMgd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIG1hYzgwMjExX2h3c2ltIHRvIHVzZSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIGluc3RlYWQgb2YgZ2VubG1zZ19tdWx0aWNhc3QoKSB3aGVuIGJyb2FkY2FzdGluZyBuZXcvZGVsZXRlZCByYWRpbyBuZXRsaW5rIG5vdGlmaWNhdGlvbnMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIGdlbmxfaW5mbywgcGFzc2luZyB0aGUgdGFyZ2V0IG5ldG5zIGZyb20gd2lwaHlfbmV0KGRhdGEtXHUwMDNlaHctXHUwMDNld2lwaHkpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWx0ZXIgZGF0YSBzZXJpYWxpemF0aW9uLCBtb2RpZnkgYnVmZmVyIGJvdW5kcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcy4gQmVjYXVzZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbWFjODAyMTFfaHdzaW0gdG8gdXNlIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgaW5zdGVhZCBvZiBnZW5sbXNnX211bHRpY2FzdCgpIHdoZW4gYnJvYWRjYXN0aW5nIG5ldy9kZWxldGVkIHJhZGlvIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZ2VubF9pbmZvLCBwYXNzaW5nIHRoZSB0YXJnZXQgbmV0bnMgZnJvbSB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhbHRlciBkYXRhIHNlcmlhbGl6YXRpb24sIG1vZGlmeSBidWZmZXIgYm91bmRzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0MS42NDgxODk1NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk2NjE1MDU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHdzaW1fbWNhc3RfY29uZmlnX21zZ1wiLFxuICAgIFwiaHdzaW1fbWNhc3RfbmV3X3JhZGlvXCIsXG4gICAgXCJod3NpbV9tY2FzdF9kZWxfcmFkaW9cIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX25ld19yYWRpb1wiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvXCIsXG4gICAgXCJod3NpbV9uZXdfcmFkaW9fbmxcIixcbiAgICBcImh3c2ltX2RlbF9yYWRpb19ubFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBtYWM4MDIxMV9od3NpbSB0byB1c2UgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSBpbnN0ZWFkIG9mIGdlbmxtc2dfbXVsdGljYXN0KCkgd2hlbiBicm9hZGNhc3RpbmcgbmV3L2RlbGV0ZWQgcmFkaW8gbmV0bGluayBub3RpZmljYXRpb25zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBnZW5sX2luZm8sIHBhc3NpbmcgdGhlIHRhcmdldCBuZXRucyBmcm9tIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWx0ZXIgZGF0YSBzZXJpYWxpemF0aW9uLCBtb2RpZnkgYnVmZmVyIGJvdW5kcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcy4gQmVjYXVzZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbydzIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIHZpYSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIHdoZW4gZ2VubF9pbmZvIGlzIE5VTEwuIG1hYzgwMjExX2h3c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChod3NpbS9ubDgwMjExKSBhbmQgbmV0bnMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmFtZXNwYWNlIGV4aXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEyOjQxLjY0ODE5NjQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5NjA5NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDAwOjEyOjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5AQCAtNDM5NiwxNSArNDM5NiwxNSBAQCBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XFxuIFxcdGJvb2wgYmFja2dyb3VuZF9yYWRhcjtcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYixcXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0aWYgKGluZm8pXFxuIFxcdFxcdGdlbmxfbm90aWZ5KFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxcbiBcXHRcXHRcXHQgICAgSFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRnZW5sbXNnX211bHRpY2FzdChcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG1jYXN0X3NrYiwgMCxcXG4tXFx0XFx0XFx0XFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLFxcbkBAIC00NDg4LDcgKzQ0ODgsOCBAQCBzdGF0aWMgaW50IGFwcGVuZF9yYWRpb19tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICptY2FzdF9za2I7XFxuQEAgLTQ1MDgsNyArNDUwOSw3IEBAIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIFxcbiBcXHRnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpO1xcbiBcXG4tXFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIGluZm8pO1xcbitcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcXG4gXFx0cmV0dXJuO1xcbiBcXG4gb3V0X2VycjpcXG5AQCAtNjE5MCw3ICs2MTkxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4gXFx0aHdzaW1fcmFkaW9zX2dlbmVyYXRpb24rKztcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xcbiBcXG4tXFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgaW5mbywgcGFyYW0pO1xcbitcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xcbiBcXG4gXFx0cmV0dXJuIGlkeDtcXG4gXFxuQEAgLTYyMDgsNyArNjIwOSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHR2b2lkICpkYXRhO1xcbkBAIC02MjM0LDcgKzYyMzUsNyBAQCBzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9kZWxfcmFkaW8oaW50IGlkLCBjb25zdCBjaGFyICpod25hbWUsXFxuIFxcbiBcXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xcbiBcXG4tXFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhza2IsIGluZm8pO1xcbitcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcXG4gXFxuIFxcdHJldHVybjtcXG4gXFxuQEAgLTYyNDYsNyArNjI0Nyw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4ge1xcbi1cXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIGluZm8pO1xcbitcXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLCBpbmZvKTtcXG4gXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXFx1MDAzZWRlYnVnZnMpO1xcbiBcXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVxcdTAwM2Vodyk7XFxuIFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVxcdTAwM2VkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0Mi4yNjg4NDAwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDcwNDgwMjI0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh3c2ltX21jYXN0X2NvbmZpZ19tc2dcIixcbiAgICBcImh3c2ltX21jYXN0X25ld19yYWRpb1wiLFxuICAgIFwiaHdzaW1fbWNhc3RfZGVsX3JhZGlvXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9cIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb1wiLFxuICAgIFwiaHdzaW1fbmV3X3JhZGlvX25sXCIsXG4gICAgXCJod3NpbV9kZWxfcmFkaW9fbmxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdWx0aWNhc3QgZXZlbnQgbm90aWZpY2F0aW9uIGxvZ2ljIGR1cmluZyByYWRpbyBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW4gbWFjODAyMTFfaHdzaW0gdG8gdGFyZ2V0IHRoZSByYWRpbydzIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIHZpYSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIHdoZW4gZ2VubF9pbmZvIGlzIE5VTEwuIG1hYzgwMjExX2h3c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHdpcmVsZXNzIGRyaXZlciB0aGF0IGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChod3NpbS9ubDgwMjExKSBhbmQgbmV0bnMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmFtZXNwYWNlIGV4aXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MTI6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtNDM5NiwxNSArNDM5NiwxNSBAQCBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XG4gXHRib29sIGJhY2tncm91bmRfcmFkYXI7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvKVxuIFx0XHRnZW5sX25vdGlmeShcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxuIFx0XHRcdCAgICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuIFx0ZWxzZVxuLVx0XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCAwLFxuLVx0XHRcdFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuK1x0XHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbmV0LCBtY2FzdF9za2IsIDAsXG4rXHRcdFx0XHRcdEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsXG5AQCAtNDQ4OCw3ICs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuK3N0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdCAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICptY2FzdF9za2I7XG5AQCAtNDUwOCw3ICs0NTA5LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcbiBcdGdlbmxtc2dfZW5kKG1jYXN0X3NrYiwgZGF0YSk7XG4gXG4tXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgaW5mbyk7XG4rXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcbiBcdHJldHVybjtcbiBcbiBvdXRfZXJyOlxuQEAgLTYxOTAsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG4gXG4tXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCBpbmZvLCBwYXJhbSk7XG4rXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbiBcbiBcdHJldHVybiBpZHg7XG4gXG5AQCAtNjIwOCw3ICs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK1x0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHZvaWQgKmRhdGE7XG5AQCAtNjIzNCw3ICs2MjM1LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuIFxuIFx0Z2VubG1zZ19lbmQoc2tiLCBkYXRhKTtcbiBcbi1cdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuIFxuIFx0cmV0dXJuO1xuIFxuQEAgLTYyNDYsNyArNjI0Nyw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbi1cdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuIFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG4gXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVx1MDAzZWh3KTtcbiBcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0Mi4yNjg4NDI5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNzc1ODEzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFyZ2V0IGlzIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AuIFJpZ2h0LCBzbyB0aGlzIGlzIHRoZSBgbWFjODAyMTFfaHdzaW1gIGRyaXZlciDigJMgdGhlIHNpbXVsYXRlZCBXaUZpIGRyaXZlciB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBpdHNlbGYuIEEgZ29vZCBjaG9pY2UgZm9yIGZ1enppbmcsIEknZCBzYXksIHBhcnRpY3VsYXJseSBnaXZlbiB0aGF0IGl04oCZcyBmcmVxdWVudGx5IHRhcmdldGVkIGJ5IHN5emthbGxlciB0aHJvdWdoIG5sODAyMTEgYW5kIHRoZSBod3NpbSBuZXRsaW5rIGludGVyZmFjZSAodGhhdCdzIHRoZSBgbWFjODAyMTFfaHdzaW1gIGdlbmwgZmFtaWx5KS4gTm93LCB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gVGltZSB0byBjYXJlZnVsbHkgcmVhZCB0aGUgY2hhbmdlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCB3aHksIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo0OS41NDY0Mjg0NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4NDMyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZToxOm9iai0kKENPTkZJR19NQUM4MDIxMV9IV1NJTSlcXHQrPSBtYWM4MDIxMV9od3NpbS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZS0yLW1hYzgwMjExX2h3c2ltLW9ianNcXHRcXHQrPSBtYWM4MDIxMV9od3NpbV9tYWluLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC04LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDo5OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjEwOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTExLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTIxNz1zdHJ1Y3QgaHdzaW1fdHhfcmF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjMwLSAqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzMTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1JUU19DVFM6IFVzZSBSVFMvQ1RTIGV4Y2hhbmdlIGZvciB0aGlzIHJhdGUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzMjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUOiBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uIGlzIHJlcXVpcmVkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzMtICpcXHRUaGlzIGlzIHNldCBpZiB0aGUgY3VycmVudCBCU1MgcmVxdWlyZXMgRVJQIHByb3RlY3Rpb24uXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNDogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOiBVc2Ugc2hvcnQgcHJlYW1ibGUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzNTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTOiBIVCByYXRlLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzY6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1M6IFZIVCBNQ1MgcmF0ZSwgaW4gdGhpcyBjYXNlIHRoZSBpZHggZmllbGQgaXNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjM3LSAqXFx0c3BsaXQgaW50byBhIGhpZ2hlciA0IGJpdHMgKE5zcykgYW5kIGxvd2VyIDQgYml0cyAoTUNTIG51bWJlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM4OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19HUkVFTl9GSUVMRDogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByYXRlIHNob3VsZCBiZSB1c2VkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTIzOS0gKlxcdGluIEdyZWVuZmllbGQgbW9kZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjQwOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ180MF9NSFpfV0lEVEg6IEluZGljYXRlcyBpZiB0aGUgQ2hhbm5lbCBXaWR0aCBzaG91bGQgYmVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQxLSAqXFx0NDAgTUh6LlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDI6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzgwX01IWl9XSURUSDogSW5kaWNhdGVzIDgwIE1IeiB0cmFuc21pc3Npb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjQzOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ18xNjBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgMTYwIE1IeiB0cmFuc21pc3Npb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ0LSAqXFx0KDgwKzgwIGlzbid0IHN1cHBvcnRlZCB5ZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDYtICpcXHR0aGUgYWRqYWNlbnQgMjAgTUh6IGNoYW5uZWxzLCBpZiB0aGUgY3VycmVudCBjaGFubmVsIHR5cGUgaXNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ3LSAqXFx0Tkw4MDIxMV9DSEFOX0hUNDBNSU5VUyBvciBOTDgwMjExX0NIQU5fSFQ0MFBMVVMuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0ODogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfU0hPUlRfR0k6IFNob3J0IEd1YXJkIGludGVydmFsIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlxcdHJhdGUuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjUxPWVudW0gaHdzaW1fdHhfcmF0ZV9mbGFncyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1MjpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUU1xcdFxcdD0gQklUKDApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNTM6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUXFx0XFx0PSBCSVQoMSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NDpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEVcXHQ9IEJJVCgyKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNTYtXFx0LyogcmF0ZSBpbmRleCBpcyBhbiBIVC9WSFQgTUNTIGluc3RlYWQgb2YgYW4gaW5kZXggKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU3OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX01DU1xcdFxcdFxcdD0gQklUKDMpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNTg6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTERcXHRcXHQ9IEJJVCg0KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU5OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSFxcdFxcdD0gQklUKDUpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjA6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEFcXHRcXHQ9IEJJVCg2KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYxOlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJXFx0XFx0PSBCSVQoNyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MjpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19WSFRfTUNTXFx0XFx0XFx0PSBCSVQoOCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MzpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEhcXHRcXHQ9IEJJVCg5KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY0OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEhcXHRcXHQ9IEJJVCgxMCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI2NS19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTMyOD1lbnVtIGh3c2ltX3JhdGVfaW5mb19hdHRyaWJ1dGVzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0zNDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjM0ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaC05LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjEwOiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9JX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaDoxMTojZGVmaW5lIF9fTUFDODAyMTFfSFdTSU1fSV9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaD0xNjU9dm9pZCBpZWVlODAyMTFfaHdzaW1fd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaDoxNjg6I2VuZGlmIC8qIF9fTUFDODAyMTFfSFdTSU1fSV9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTI9c3RhdGljIHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGNvbnN0IHU4ICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNzovKiBNQUM4MDIxMV9IV1NJTSBuZXRsaW5rIGZhbWlseSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxOC1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGh3c2ltX2dlbmxfZmFtaWx5O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHdzaW1fbWNncnBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI4Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgcG9saWN5ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjkwMjovKiBNQUM4MDIxMV9IV1NJTSB2aXJ0aW8gcXVldWVzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAzLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpod3NpbV92cXNbSFdTSU1fTlVNX1ZRU107XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0xNTc1PXN0YXRpYyBpbmxpbmUgdTE2IHRyYW5zX3R4X3JhdGVfZmxhZ3NfaWVlZTJod3NpbShzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTc5LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTgwOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTgxLVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODMtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg0OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4NS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfTUNTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODY6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX01DUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg3LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg4OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19HUkVFTl9GSUVMRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg5LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5MDpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTEtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTI6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX0RVUF9EQVRBO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTMtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTQ6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTUtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1ZIVF9NQ1MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5NjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTk3LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ184MF9NSFpfV0lEVEgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5ODpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTktXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzE2MF9NSFpfV0lEVEgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTYwMDpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNjAxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzQ4ND1zdGF0aWMgY29uc3QgY2hhciBtYWM4MDIxMV9od3NpbV9nc3RyaW5nc19zdGF0c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNDk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM0OTU6I2RlZmluZSBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOIEFSUkFZX1NJWkUobWFjODAyMTFfaHdzaW1fZ3N0cmluZ3Nfc3RhdHMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzQ5Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MDY9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfZXRfc3NldF9jb3VudChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MDktXFx0aWYgKHNzZXQgPT0gRVRIX1NTX1NUQVRTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MTA6XFx0XFx0cmV0dXJuIE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MTQ9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUyOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNTMwOlxcdFdBUk5fT04oaSAhPSBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNTMxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NDg9c3RhdGljIGNvbnN0IHU4IGlmdHlwZXNfZXh0X2NhcGFfYXBbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY1NzojZGVmaW5lIE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QU1xcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjU4LVxcdEZJRUxEX1BSRVBfQ09OU1QoSUVFRTgwMjExX01MRF9DQVBfT1BfVElEX1RPX0xJTktfTUFQX05FR19TVVBQLCBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjYzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiBtYWM4MDIxMV9od3NpbV9pZnR5cGVzX2V4dF9jYXBhW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjcwLVxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfRU1MX0NBUF9FTUxNUl9TVVBQT1JULFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjU2NzE6XFx0XFx0Lm1sZF9jYXBhX2FuZF9vcHMgPSBNQUM4MDIxMV9IV1NJTV9NTERfQ0FQQV9PUFMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY3Mi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzE0OD1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGh3c2ltX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTQ5OlxcdC5uYW1lID0gXFxcIk1BQzgwMjExX0hXU0lNXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTUwLVxcdC52ZXJzaW9uID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTc0Njg9c3RhdGljIHZvaWQgaHdzaW1fdmlydGlvX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0NzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzQ3NzovKiBNQUM4MDIxMV9IV1NJTSB2aXJ0aW8gZGV2aWNlIGlkIHRhYmxlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzQ3OC1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NDc5OlxcdHsgVklSVElPX0lEX01BQzgwMjExX0hXU0lNLCBWSVJUSU9fREVWX0FOWV9JRCB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc0ODAtXFx0eyAwIH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Nzg9c3RhdGljIHU2NCBod3NpbV9uYW5fZ2V0X21hc3Rlcl9yYW5rKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgzOlxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1VQKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04NC1cXHRcXHRtYXN0ZXJfcHJlZiA9IGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfcHJlZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9MjE2PXZvaWQgbWFjODAyMTFfaHdzaW1fbmFuX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0yNzMtXFx0aWYgKChzbG90ICE9IFNMT1RfMjRHSFpfRFcgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjI3NDpcXHQgICAgIGRhdGEtXFx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTI3NS1cXHQgICAgcnhfc3RhdHVzLmZyZXEgIT0gMjQzNylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDM2LVxcdFxcdCAgICAoY2cgPT0gb3duX2NnIFxcdTAwMjZcXHUwMDI2IGZyYW1lX2FtciBcXHUwMDNlIGN1cnJfYW1yKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NDM3OlxcdFxcdCAgICBkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTQzOC1cXHRcXHRcXHQvKiBBdm9pZCBhIHN0YXRlIHRyYW5zaXRpb24gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDY4LVxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NDY5OlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTQ3MC1cXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9NjEyPW1hYzgwMjExX2h3c2ltX25hbl9leGVjX3N0YXRlX3RyYW5zaXRpb25zKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjUtXFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNjIDMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MjY6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2Mjc6XFx0ZWxzZSBpZiAoZGF0YS1cXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjgtXFx0XFx0IGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNlPSAzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI5OlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYzMDpcXHRlbHNlIGlmIChkYXRhLVxcdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzEtXFx0XFx0IGRhdGEtXFx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXFx1MDAzZT0gMylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYzMjpcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMzOlxcdGVsc2UgaWYgKGRhdGEtXFx1MDAzZW5hbi5yb2xlID09IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzQtXFx0XFx0IGRhdGEtXFx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXFx1MDAzYyAzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjM1OlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjQxLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjQyOlxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY0My1cXHQgICAgIWhydGltZXJfYWN0aXZlKFxcdTAwMjZkYXRhLVxcdTAwM2VuYW4uZGlzY292ZXJ5X2JlYWNvbl90aW1lcikpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY1My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjY1NDpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9TQ0FOKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTU6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1dBUk1VUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY1Ni1cXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gTkFOX1dBUk1VUF9EV1NUO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NTktXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjY2MDpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVA7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NjEtXFx0XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJhbmRvbV9mYWN0b3JfdmFsaWRfZHdzdCA9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTY5NT1tYWM4MDIxMV9od3NpbV9uYW5fdHhfYmVhY29uKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTAtXFx0bmFuX2F0dHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKG1hc3Rlcl9pbmRpY2F0aW9uKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo3NTE6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTc1Mi1cXHRcXHRtYXN0ZXJfaW5kaWNhdGlvbi5tYXN0ZXJfcHJlZiA9IGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfcHJlZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Nzc0PW1hYzgwMjExX2h3c2ltX25hbl9zbG90X3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODA3LVxcdFxcdHR4X3N5bmNfYmVhY29uID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwODpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwOTpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgxMC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTg2Nz1tYWM4MDIxMV9od3NpbV9uYW5fZGlzY292ZXJ5X2JlYWNvbl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg3OS1cXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZkYXRhLVxcdTAwM2VuYW4uc3RhdGVfbG9jaykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgwOlxcdFxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjg4MTpcXHRcXHQgICAgZGF0YS1cXHUwMDNlbmFuLnJvbGUgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODgyLVxcdFxcdFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9OTA5PWludCBtYWM4MDIxMV9od3NpbV9uYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyNi1cXHRcXHQvKiBTdGFydCBpbiB0aGUgXFxcInNjYW5cXFwiIHBoYXNlIGFuZCBzdGF5IHRoZXJlIGZvciBhIGxpdHRsZSBiaXQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjkyNzpcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyOC1cXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTMwLVxcdFxcdGRhdGEtXFx1MDAzZW5hbi5tYXN0ZXJfcHJlZiA9IGNvbmYtXFx1MDAzZW1hc3Rlcl9wcmVmO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6OTMxOlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTMyLVxcdFxcdG1lbXNldChcXHUwMDI2ZGF0YS1cXHUwMDNlbmFuLmN1cnJlbnRfYW1pLCAwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0xMjI2PWJvb2wgbWFjODAyMTFfaHdzaW1fbmFuX3JlY2VpdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTEyMzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzoxMjM2OlxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0xMjM3LVxcdFxcdHJldHVybiBjaGFubmVsLVxcdTAwM2VjZW50ZXJfZnJlcSA9PSAyNDM3O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC02LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6NzojaWZuZGVmIF9fTUFDODAyMTFfSFdTSU1fTkFOX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjg6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX05BTl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC05LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9MTA9ZW51bSBtYWM4MDIxMV9od3NpbV9uYW5fcGhhc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTE6XFx0TUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMjpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTM6XFx0TUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1VQLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmgtMTQtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9MTY9ZW51bSBtYWM4MDIxMV9od3NpbV9uYW5fcm9sZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxNzpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxODpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTk6XFx0TUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0yMC19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaD05OT12b2lkIG1hYzgwMjExX2h3c2ltX25hbl9sb2NhbF9zY2hlZF9jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0xMDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMDI6I2VuZGlmIC8qIF9fTUFDODAyMTFfSFdTSU1fTkFOX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTI6NDkuNjMwMjc4NzA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg3NTI4MTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gVmlydHVhbCBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGp1aWN5IGRldGFpbHMgYWJvdXQgZmVhdHVyZSBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBhcmUga2VwdC4gVGhhdCdzIHRoZSBmaXJzdCBzdG9wIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kdWxlIGZpdHMgaW50byB0aGUgYnJvYWRlciB3aXJlbGVzcyBsYW5kc2NhcGUgYW5kIHdoYXQncyBjb25maWd1cmFibGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEyOjUzLjUwNTU2Mzc5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjb25maWcgTUFDODAyMTFfSFdTSU1cXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAgIDY6XFx0XFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gICA3OlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcXG4gICA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xcbiAgIDk6XFx0XFx0ICB0byB1c2UgdGhpcyB0b29sLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgMTI6XFx0XFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVklSVF9XSUZJXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XFxuICAxOTpcXHRcXHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTI6NTMuNTA1NjkzODQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5ODU0NDAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgdGltZSB0byByZWFsbHkgc2NydXRpbml6ZSB0aGlzIHBhdGNoLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBoYXBwZW5pbmcsIHNvIGxldCdzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBzaW5jZSBJJ3ZlIHdvcmtlZCBpbiB0aGlzIGFyZWEgYmVmb3JlLiBMZXQncyBzZWUgaG93IHRob3NlIGxpbmVzIGhhdmUgYmVlbiBtb2RpZmllZCwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIGNoYW5nZXMgd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzA4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo1NS41MDQyNDA4MjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM5MDpcXHRcXHR1MzIgaWZ0eXBlcztcXG40MzkxOlxcdFxcdHUzMiAqY2lwaGVycztcXG40MzkyOlxcdFxcdHU4IG5fY2lwaGVycztcXG40MzkzOlxcdFxcdGJvb2wgbWxvO1xcbjQzOTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpwbXNyX2NhcGE7XFxuNDM5NTpcXHRcXHRib29sIG5hbl9kZXZpY2U7XFxuNDM5NjpcXHRcXHRib29sIGJhY2tncm91bmRfcmFkYXI7XFxuNDM5NzpcXHR9O1xcbjQzOTg6XFx0XFxuNDM5OTpcXHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcXG40NDAwOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNDQwMTpcXHR7XFxuNDQwMjpcXHRcXHRpZiAoaW5mbylcXG40NDAzOlxcdFxcdFxcdGdlbmxfbm90aWZ5KFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxcbjQ0MDQ6XFx0XFx0XFx0XFx0ICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XFxuNDQwNTpcXHRcXHRlbHNlXFxuNDQwNjpcXHRcXHRcXHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxcbjQ0MDc6XFx0XFx0XFx0XFx0XFx0XFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcXG40NDA4OlxcdH1cXG40NDA5OlxcdFxcbjQ0MTA6XFx0c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG40NDExOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXFxuNDQxMjpcXHR7XFxuNDQxMzpcXHRcXHRpbnQgcmV0O1xcbjQ0MTQ6XFx0XFxuNDQxNTpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG40NDE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0MTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDE4OlxcdFxcbjQ0MTk6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VjaGFubmVscykge1xcbjQ0MjA6XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX0NIQU5ORUxTLCBwYXJhbS1cXHUwMDNlY2hhbm5lbHMpO1xcbjQ0MjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQyMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQ0MjM6XFx0XFx0fVxcbjQ0MjQ6XFx0XFxuNDQyNTpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19hbHBoYTIpIHtcXG40NDI2OlxcdFxcdFxcdHJldCA9IG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1JFR19ISU5UX0FMUEhBMiwgMixcXG40NDI3OlxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLVxcdTAwM2VyZWdfYWxwaGEyKTtcXG40NDI4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0Mjk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDMwOlxcdFxcdH1cXG40NDMxOlxcdFxcbjQ0MzI6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VyZWdkKSB7XFxuNDQzMzpcXHRcXHRcXHRpbnQgaTtcXG40NDM0OlxcdFxcbjQ0MzU6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkrKykge1xcbjQ0MzY6XFx0XFx0XFx0XFx0aWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tXFx1MDAzZXJlZ2QpXFxuNDQzNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40NDM4OlxcdFxcbjQ0Mzk6XFx0XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JFR19DVVNUT01fUkVHLCBpKTtcXG40NDQwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0NDE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ0NDM6XFx0XFx0XFx0fVxcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19zdHJpY3QpIHtcXG40NDQ3OlxcdFxcdFxcdHJldCA9IG5sYV9wdXRfZmxhZyhza2IsIEhXU0lNX0FUVFJfUkVHX1NUUklDVF9SRUcpO1xcbjQ0NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQ0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo1NS41MDQ2NDIxOTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5NTk2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc3BlY2lmaWVkIHNlY3Rpb25zIG9mIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgOlxuXG4qKkRpdmluZyBpbnRvIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGZvciBzb21lIHRhcmdldGVkIGludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgbW9yZSBncmFudWxhciBsb29rIGF0IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgc3BlY2lmaWMgYXNwZWN0cyBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0NTAwLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGNvZGUsIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIGNvZGUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIGxvb2sgYXQgc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBlcmhhcHMgYSBjcml0aWNhbCBmdW5jdGlvbiBjYWxsIHRoYXQncyBjYXVzaW5nIG1lIGlzc3Vlcy4gVGhlbiwgSSBuZWVkIGEgY2xlYXJlciBwaWN0dXJlIG9mIHNvbWUgcmVsYXRlZCBpbnRlcmFjdGlvbnMgYW5kIGZsb3dzIHNvIEkgd2lsbCBjaGVjayBvdXQgYXJvdW5kIGxpbmUgNjE4MCB0aHJvdWdoIDYyNjAuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcgZ2l2ZW4gbXkgZXhpc3RpbmcgZXhwZXJpZW5jZSB3aXRoIHJlbGF0ZWQgZHJpdmVycy4gV2l0aCBhIGNsb3NlciBsb29rIGF0IHRoZXNlIHNlY3Rpb25zLCBJIHNob3VsZCBnYWluIHRoZSBjbGFyaXR5IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEyOjU3Ljc4NDI0MTM0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ4NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ4NTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG40NDg2OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDQ4NzpcXHRcXHR9XFxuNDQ4ODpcXHRcXHRyZXR1cm4gMDtcXG40NDg5OlxcdH1cXG40NDkwOlxcdFxcbjQ0OTE6XFx0c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IG5ldCAqbmV0LFxcbjQ0OTI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbjQ0OTM6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXFxuNDQ5NDpcXHR7XFxuNDQ5NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiO1xcbjQ0OTY6XFx0XFx0dm9pZCAqZGF0YTtcXG40NDk3OlxcdFxcbjQ0OTg6XFx0XFx0bWNhc3Rfc2tiID0gZ2VubG1zZ19uZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbjQ0OTk6XFx0XFx0aWYgKCFtY2FzdF9za2IpXFxuNDUwMDpcXHRcXHRcXHRyZXR1cm47XFxuNDUwMTpcXHRcXG40NTAyOlxcdFxcdGRhdGEgPSBnZW5sbXNnX3B1dChtY2FzdF9za2IsIDAsIDAsIFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgMCxcXG40NTAzOlxcdFxcdFxcdFxcdCAgIEhXU0lNX0NNRF9ORVdfUkFESU8pO1xcbjQ1MDQ6XFx0XFx0aWYgKCFkYXRhKVxcbjQ1MDU6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjQ1MDY6XFx0XFxuNDUwNzpcXHRcXHRpZiAoYXBwZW5kX3JhZGlvX21zZyhtY2FzdF9za2IsIGlkLCBwYXJhbSkgXFx1MDAzYyAwKVxcbjQ1MDg6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjQ1MDk6XFx0XFxuNDUxMDpcXHRcXHRnZW5sbXNnX2VuZChtY2FzdF9za2IsIGRhdGEpO1xcbjQ1MTE6XFx0XFxuNDUxMjpcXHRcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcXG40NTEzOlxcdFxcdHJldHVybjtcXG40NTE0OlxcdFxcbjQ1MTU6XFx0b3V0X2VycjpcXG40NTE2OlxcdFxcdG5sbXNnX2ZyZWUobWNhc3Rfc2tiKTtcXG40NTE3OlxcdH1cXG40NTE4OlxcdFxcbjQ1MTk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc2JhbmRfaWZ0eXBlX2RhdGEgc2JhbmRfY2FwYV8yZ2h6W10gPSB7XFxuNDUyMDpcXHRcXHR7XFxuNDUyMTpcXHRcXHRcXHQudHlwZXNfbWFzayA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8XFxuNDUyMjpcXHRcXHRcXHRcXHQgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCksXFxuNDUyMzpcXHRcXHRcXHQuaGVfY2FwID0ge1xcbjQ1MjQ6XFx0XFx0XFx0XFx0Lmhhc19oZSA9IHRydWUsXFxuNDUyNTpcXHRcXHRcXHRcXHQuaGVfY2FwX2VsZW0gPSB7XFxuNDUyNjpcXHRcXHRcXHRcXHRcXHQubWFjX2NhcF9pbmZvWzBdID1cXG40NTI3OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMF9IVENfSEUsXFxuNDUyODpcXHRcXHRcXHRcXHRcXHQubWFjX2NhcF9pbmZvWzFdID1cXG40NTI5OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMV9URl9NQUNfUEFEX0RVUl8xNlVTIHxcXG40NTMwOlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMV9NVUxUSV9USURfQUdHX1JYX1FPU184LFxcbjQ1MzE6XFx0XFx0XFx0XFx0XFx0Lm1hY19jYXBfaW5mb1syXSA9XFxuNDUzMjpcXHRcXHRcXHRcXHRcXHRcXHRJRUVFODAyMTFfSEVfTUFDX0NBUDJfQlNSIHxcXG40NTMzOlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQMl9NVV9DQVNDQURJTkcgfFxcbjQ1MzQ6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX01BQ19DQVAyX0FDS19FTixcXG40NTM1OlxcdFxcdFxcdFxcdFxcdC5tYWNfY2FwX2luZm9bM10gPVxcbjQ1MzY6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX01BQ19DQVAzX09NSV9DT05UUk9MIHxcXG40NTM3OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9NQUNfQ0FQM19NQVhfQU1QRFVfTEVOX0VYUF9FWFRfMyxcXG40NTM4OlxcdFxcdFxcdFxcdFxcdC5tYWNfY2FwX2luZm9bNF0gPSBJRUVFODAyMTFfSEVfTUFDX0NBUDRfQU1TRFVfSU5fQU1QRFUsXFxuNDUzOTpcXHRcXHRcXHRcXHRcXHQucGh5X2NhcF9pbmZvWzBdID1cXG40NTQwOlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9IRV9QSFlfQ0FQMF9DSEFOTkVMX1dJRFRIX1NFVF80ME1IWl9JTl8yRyxcXG40NTQxOlxcdFxcdFxcdFxcdFxcdC5waHlfY2FwX2luZm9bMV0gPVxcbjQ1NDI6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX1BIWV9DQVAxX1BSRUFNQkxFX1BVTkNfUlhfTUFTSyB8XFxuNDU0MzpcXHRcXHRcXHRcXHRcXHRcXHRJRUVFODAyMTFfSEVfUEhZX0NBUDFfREVWSUNFX0NMQVNTX0EgfFxcbjQ1NDQ6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0hFX1BIWV9DQVAxX0xEUENfQ09ESU5HX0lOX1BBWUxPQUQgfFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMjo1Ny43ODUyNDExNjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MTA3NDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGltcGxpZWQgdGhvdWdodHMsIHByZXNlbnRlZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKlN0cmF0ZWdpYyBSZWFkaW5nIEZvY3VzKipcblxuUmlnaHQsIGxldCdzIHplcm8gaW4uIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjb252ZXJzYXRpb24gKHdoaWNoIEknbSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIFsqKmluc2VydCB5b3VyIGFzc3VtZWQgZmllbGQgaGVyZSwgZS5nLiwgcmVzZWFyY2gsIGFuYWx5c2lzLCBwcm9qZWN0IG1hbmFnZW1lbnQqKl0pLCBhIHNwZWNpZmljIHNlY3Rpb24gd2FycmFudHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgZm9jdXNpbmcgb24gdGhlIHJhbmdlIG9mIHBhZ2VzIG9yIGRhdGEgcG9pbnRzIGJldHdlZW4gNjE4MCBhbmQgNjI2MCBpcyBjcnVjaWFsLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBhcmd1bWVudHMsIG9yIGtleSBkYXRhLCBvciBjcnVjaWFsIHByb2NlZHVyYWwgc3RlcHMgYXJlIGNlbnRlcmVkLiBUaGlzIGZvY3VzIHdpbGwgYWxsb3cgZm9yIGFuIGVmZmljaWVudCBhbmQgdGFyZ2V0ZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWF0ZXJpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE3LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzowMC4wMjYzMTg5NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYxODA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG42MTgxOlxcdFxcdFxcdGlmIChpbmZvKSB7XFxuNjE4MjpcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJwZXJtIGFkZHIgYWxyZWFkeSBwcmVzZW50XFxcIik7XFxuNjE4MzpcXHRcXHRcXHRcXHROTF9TRVRfQkFEX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbjYxODQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9QRVJNX0FERFJdKTtcXG42MTg1OlxcdFxcdFxcdH1cXG42MTg2OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG42MTg3OlxcdFxcdFxcdGdvdG8gZmFpbGVkX2ZpbmFsX2luc2VydDtcXG42MTg4OlxcdFxcdH1cXG42MTg5OlxcdFxcbjYxOTA6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGF0YS1cXHUwMDNlbGlzdCwgXFx1MDAyNmh3c2ltX3JhZGlvcyk7XFxuNjE5MTpcXHRcXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xcbjYxOTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xcbjYxOTM6XFx0XFxuNjE5NDpcXHRcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xcbjYxOTU6XFx0XFxuNjE5NjpcXHRcXHRyZXR1cm4gaWR4O1xcbjYxOTc6XFx0XFxuNjE5ODpcXHRmYWlsZWRfZmluYWxfaW5zZXJ0OlxcbjYxOTk6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXFx1MDAzZWRlYnVnZnMpO1xcbjYyMDA6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cXHUwMDNlaHcpO1xcbjYyMDE6XFx0ZmFpbGVkX2h3OlxcbjYyMDI6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwMzpcXHRmYWlsZWRfYmluZDpcXG42MjA0OlxcdFxcdGRldmljZV91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwNTpcXHRmYWlsZWRfZHJ2ZGF0YTpcXG42MjA2OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGh3KTtcXG42MjA3OlxcdGZhaWxlZDpcXG42MjA4OlxcdFxcdHJldHVybiBlcnI7XFxuNjIwOTpcXHR9XFxuNjIxMDpcXHRcXG42MjExOlxcdHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG42MjEyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjYyMTM6XFx0e1xcbjYyMTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG42MjE1OlxcdFxcdHZvaWQgKmRhdGE7XFxuNjIxNjpcXHRcXHRpbnQgcmV0O1xcbjYyMTc6XFx0XFxuNjIxODpcXHRcXHRza2IgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XFxuNjIxOTpcXHRcXHRpZiAoIXNrYilcXG42MjIwOlxcdFxcdFxcdHJldHVybjtcXG42MjIxOlxcdFxcbjYyMjI6XFx0XFx0ZGF0YSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCAwLFxcbjYyMjM6XFx0XFx0XFx0XFx0ICAgSFdTSU1fQ01EX0RFTF9SQURJTyk7XFxuNjIyNDpcXHRcXHRpZiAoIWRhdGEpXFxuNjIyNTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMjY6XFx0XFxuNjIyNzpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG42MjI4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyMjk6XFx0XFx0XFx0Z290byBlcnJvcjtcXG42MjMwOlxcdFxcbjYyMzE6XFx0XFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkFESU9fTkFNRSwgc3RybGVuKGh3bmFtZSksXFxuNjIzMjpcXHRcXHRcXHQgICAgICBod25hbWUpO1xcbjYyMzM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjIzNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMzU6XFx0XFxuNjIzNjpcXHRcXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xcbjYyMzc6XFx0XFxuNjIzODpcXHRcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcXG42MjM5OlxcdFxcbjYyNDA6XFx0XFx0cmV0dXJuO1xcbjYyNDE6XFx0XFxuNjI0MjpcXHRlcnJvcjpcXG42MjQzOlxcdFxcdG5sbXNnX2ZyZWUoc2tiKTtcXG42MjQ0OlxcdH1cXG42MjQ1OlxcdFxcbjYyNDY6XFx0c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbjYyNDc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXFxuNjI0ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNjI0OTpcXHR7XFxuNjI1MDpcXHRcXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLCBpbmZvKTtcXG42MjUxOlxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVxcdTAwM2VkZWJ1Z2ZzKTtcXG42MjUyOlxcdFxcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjUzOlxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVxcdTAwM2VkZXYpO1xcbjYyNTQ6XFx0XFx0ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS1cXHUwMDNlZGV2KTtcXG42MjU1OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjU2OlxcdH1cXG42MjU3OlxcdFxcbjYyNTg6XFx0c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfcmFkaW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG42MjU5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDAuMDI2NTg5NTE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODQzNjY3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgTUFDODAyMTEgSFdTSU0gTXVsdGljYXN0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBtdWx0aWNhc3QgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGh3c2ltX21jYXN0X25ld19yYWRpb2AsIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gLCBhbmQgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBhcmUgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGVpciBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBtdWx0aWNhc3Qgb3BlcmF0aW9uLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGRvIHRoYXQgaXMgYSBnb29kIG9sZCBmYXNoaW9uZWQgZ3JlcCBzZWFyY2ggd2l0aGluIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgdGhlIGNvZGUgZmxvdyBhbmQgdXNhZ2UgcGF0dGVybnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDIuMTEwOTU4NDE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTMwODIzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdzaW1fbWNhc3RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQzNzg9c3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDM5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo0Mzk5OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0MDAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQ0MTA9c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0OTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDQ5MTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ1MTI6XFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDUxMy1cXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01Njc1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTkzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYxOTQ6XFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjExOnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjM4OlxcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MjQ2PXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyNTA6XFx0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXFx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI1MS1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cXHUwMDNlZGVidWdmcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjAyLjQyNDA0NDg2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzI4Mzk4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2hhbmdlcyBpbiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBod3NpbWAgbW9kdWxlLiBQcmV2aW91c2x5LCB0aGUgZnVuY3Rpb24gdG9vayBhIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIGEgYHN0cnVjdCBnZW5sX2luZm9gIGFzIGFyZ3VtZW50cy4gTm93LCBpdCBoYXMgYSBgc3RydWN0IG5ldCAqbmV0YCBhcmd1bWVudCBhcyB3ZWxsLiBUaGUga2V5IGRpZmZlcmVuY2Ugc2VlbXMgdG8gYmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljOiBpZiBgaW5mb2AgaXMgbm90IE5VTEwsIHRoZW4gYSBzdHJhaWdodGZvcndhcmQgYGdlbmxfbm90aWZ5YCBjYWxsIGlzIG1hZGUuIEhvd2V2ZXIsIGlmIGBpbmZvYCAqaXMqIE5VTEwsIHRoZSBmdW5jdGlvbiBub3cgY2FsbHMgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYC5cblxuVGhlIG9yaWdpbmFsIHZlcnNpb24gdXNlZCBgZ2VubG1zZ19tdWx0aWNhc3RgIHdoZW4gYGluZm9gIHdhcyBOVUxMLiBUaGUgdXBkYXRlIGluY29ycG9yYXRlcyBgX25ldG5zYCBtZWFuaW5nIHRoZXJlJ3Mgbm93IGFuIGV4cGxpY2l0IGBuZXRgIG5hbWVzcGFjZSBwcm92aWRlZCB0byB0aGUgYGdlbmxtc2dfbXVsdGljYXN0YCBjYWxsLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgbmV0IG5hbWVzcGFjZSBwcm92aWRlcyBpc29sYXRpb24gYW5kIHNlZ21lbnRhdGlvbiBvZiB0aGUgbmV0d29yayBzdGFjaywgc28gdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMgbWlnaHQgYmUgdGFyZ2V0ZWQgdG8gc3BlY2lmaWMgbmV0d29yayBuYW1lc3BhY2VzIG5vdywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZS5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsICp3aGVuKiBpcyBgaW5mb2AgTlVMTD8gVGhhdCdzIHRoZSBjcnVjaWFsIGNvbnRleHQuIEl0IGRpY3RhdGVzIHRoZSBiZWhhdmlvciBhbmQgaW1wbGljYXRpb24gb2YgdGhpcyBjaGFuZ2UuIEl0J3MgdGltZSB0byBleGFtaW5lIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGlzIGJlaW5nIGludm9rZWQsIHNwZWNpZmljYWxseSBmcm9tIGBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGFuZCBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYC4gS25vd2luZyB3aGVuIGBpbmZvYCBpcyBOVUxMIGluIHRob3NlIGNhbGxzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbiBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGludGVudCBvZiBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgaXMgdG8gc2VuZCBtZXNzYWdlcyB3aXRoaW4gYSBzcGVjaWZpYyBuZXR3b3JrIG5hbWVzcGFjZSwgb3IgcG90ZW50aWFsbHkgdG8gYWxsLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjA2LjE1MjQ0NzcyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzOTk2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjM9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY3NTpzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBod3NpbV9uZXdfcmFkaW9fcGFyYW1zICpwYXJhbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTY4MDY9c3RhdGljIGludCBod3NpbV9uZXdfcmFkaW9fbmwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTY5NTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6Njk1ODpcXHRyZXQgPSBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oaW5mbywgXFx1MDAyNnBhcmFtKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02OTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxMT1zdGF0aWMgaW50IF9faW5pdCBpbml0X21hYzgwMjExX2h3c2ltKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NjI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjc2MjU6XFx0XFx0ZXJyID0gbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKE5VTEwsIFxcdTAwMjZwYXJhbSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzYyNi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDYuMjI3ODUyMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1NzM1NzA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXIgQ29udGV4dCBvZiBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIHBhcmFtb3VudDsgaXQgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgaXRzIHJvbGUgaXMgd2l0aGluIHRoZSBicm9hZGVyIG1hYzgwMjExLWh3c2ltIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB2ZXJpZnlpbmcgaXRzIGNvcnJlY3QgYmVoYXZpb3IsIGRlYnVnZ2luZyBwb3RlbnRpYWwgaXNzdWVzLCBvciBldmVuIHJlZmFjdG9yaW5nIHRoZSBjb2RlLiBCeSBleGFtaW5pbmcgdGhlIGNhbGwgc2l0ZXMsIEkgY2FuIGdldCBhIG11Y2ggYmV0dGVyIGhhbmRsZSBvbiBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MDguMTg1MjEzMTM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxNjYwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTYyMTE9c3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjQ2OnN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjQ3LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjMwNT1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9mcmVlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MzE2LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MzE3OlxcdFxcdG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhkYXRhLCB3aXBoeV9uYW1lKGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjMxOC1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02OTY2PXN0YXRpYyBpbnQgaHdzaW1fZGVsX3JhZGlvX25sKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MDAxLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MDAyOlxcdFxcdG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhkYXRhLCB3aXBoeV9uYW1lKGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzAwMy1cXHRcXHRcXHRcXHRcXHQgaW5mbyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTYyPXN0YXRpYyB2b2lkIHJlbW92ZV91c2VyX3JhZGlvcyh1MzIgcG9ydGlkLCBpbnQgbmV0Z3JvdXApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTgwLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzE4MTpcXHRcXHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZW50cnksIHdpcGh5X25hbWUoZW50cnktXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4Mi1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MjM4PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaHdzaW1fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI2MC1cXHRcXHRsaXN0X2RlbChcXHUwMDI2ZGF0YS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI2MTpcXHRcXHRtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW8oZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjYyLVxcdFxcdFxcdFxcdFxcdCB3aXBoeV9uYW1lKGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjA4LjMwMzM4ODI3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjkzODA4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBod3NpbV9leGl0X25ldGAgYW5kIGByZW1vdmVfdXNlcl9yYWRpb3NgIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIHJlY2VudCBjaGFuZ2VzLCBhbmQgSSd2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyByZWdhcmRpbmcgYGh3c2ltX2V4aXRfbmV0YCBhbmQgYHJlbW92ZV91c2VyX3JhZGlvc2AuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgaG93IG11bHRpY2FzdCBtZXNzYWdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZXMgKG5ldG5zKSBleGl0IG9yIHdoZW4gcmFkaW9zIGFyZSByZW1vdmVkLiBQcmV2aW91c2x5LCBpZiB0aGUgYGluZm9gIHBvaW50ZXIgd2FzIGBOVUxMYCAod2hpY2ggaGFwcGVucyBpbiB0aGVzZSBzaXR1YXRpb25zKSwgYGdlbmxtc2dfbXVsdGljYXN0YCB3b3VsZCBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgcHJlc3VtYWJseSBgaW5pdF9uZXRgLiBOb3csIGl0J3MgY29ycmVjdGx5IHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2Agd2l0aCB0aGUgbmV0bnMgb2YgdGhlIGB3aXBoeWAhXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eSBhbmQgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIHJlYWNoYWJpbGl0eS4gSXMgYG1hYzgwMjExX2h3c2ltYCBldmVuIHJlbGV2YW50PyBBYnNvbHV0ZWx5LiBgbWFjODAyMTFfaHdzaW1gIGlzIGEgd2VsbC1rbm93biBzaW11bGF0ZWQgd2lyZWxlc3MgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCB1c2VkIGV4dGVuc2l2ZWx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kLCBjcnVjaWFsbHksIGl0J3MgYWxyZWFkeSBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyLiBBbnkgdXNlciBwcm9ncmFtLCBnaXZlbiB0aGUgcmlnaHQgY2FwYWJpbGl0aWVzIG9yIHRocm91Z2ggbmV0bGluay9uZXRucyBtYW5pcHVsYXRpb24sIGNhbiBjcmVhdGUgb3IgZGVsZXRlIHRoZXNlIHNpbXVsYXRlZCByYWRpb3MsIHNlbmQgTmV0bGluayBtZXNzYWdlcyB2aWEgY29tbWFuZHMgbGlrZSBgSFdTSU1fQ01EX05FV19SQURJT2AgYW5kIGBIV1NJTV9DTURfREVMX1JBRElPYCwgYW5kIHRyaWdnZXIgbmV0bnMgY3JlYXRpb24vZGVzdHJ1Y3Rpb24uIFNvY2tldCBjbG9zaW5nIChgcmVtb3ZlX3VzZXJfcmFkaW9zYCkgaXMgYWxzbyBhbiBlbnRyeSBwb2ludC4gVGhpcyBjb25maXJtcyB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGludGVyZmFjZXMuXG5cbk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBJdCB0b3VjaGVzIGV4ZWN1dGFibGUgY29kZSBpbiBhIHZpcnR1YWwgZHJpdmVyIGFuZCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBtdWx0aWNhc3QgbWVzc2FnZSBub3RpZmljYXRpb24gYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcyB3aGVuIHJhZGlvcyBhcmUgY3JlYXRlZCBvciBkZXN0cm95ZWQuIFRoaXMgY2hhbmdlIGluIG11bHRpY2FzdCBoYW5kbGluZyBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGluY29ycmVjdCBuYW1lc3BhY2UgY29udGV4dC4gVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIFllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIHRvIHNldCB1cCBteSBmdXp6aW5nIHRhcmdldC4gTG9va2luZyBhdCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGBNQUM4MDIxMV9IV1NJTWAgc2ltcGx5IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgd2hpY2ggbWFrZXMgdGhpbmdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGJ1aWxkLCB3aGljaCBsaWtlbHkgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3RhbmRhcmQgYG1hYzgwMjExYCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MTMuOTk3MjAwMDE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEzNTA2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjE0LjExODU1NTUyMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYxODM3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUsIHN0YXJ0aW5nIHJpZ2h0IGF0IHRoZSB0b3AsIGFyb3VuZCBsaW5lIDEuIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmb3VuZGF0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTUFDODAyMTEgd2lyZWxlc3Mgc3RhY2suIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIExpbnV4J3Mgd2lyZWxlc3MgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBhbmQgYnVpbGQgb3B0aW9ucyBoZXJlLiBXZSBhcmUgZ29pbmcgdG8gZmluZCB0aGUgbWFzdGVyIGtub2JzIGZvciBjb250cm9sbGluZyB0aGUgZmVhdHVyZSBzZXQgb2YgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCB3aWxsIGluZm9ybSB0aGUgc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIG5hdmlnYXRlIGEgcG90ZW50aWFsbHkgY29tcGxleCB3ZWIgb2YgZGVwZW5kZW5jaWVzIGFzIGl0IGlzIGxpa2VseSB0aGF0IGRpZmZlcmVudCB3aXJlbGVzcyBwcm90b2NvbHMgb3IgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIGdvaW5nIHRvIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoxNi4xODAzOTY1MjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoxNi4xODA1MTY5OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5OTg4NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBDRkc4MDIxMWAgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ0ZHODAyMTFgLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGhlcmUsIGdpdmVuIHRoZSBldm9sdXRpb24gb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzKio6IEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGluY2x1c2lvbiBvZiBgQ0ZHODAyMTFgLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLCBkcml2ZXJzLCBvciBnZW5lcmFsIHdpcmVsZXNzIGZlYXR1cmUgdG9nZ2xlcz9cbiogICAqKk1vZHVsZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMqKjogSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgdmFyaW91cyB3aXJlbGVzcyBtb2R1bGVzIChlLmcuLCBzcGVjaWZpYyByYWRpbyBmaXJtd2FyZSBzdXBwb3J0KSByZWx5IG9uIHRoaXMgZm91bmRhdGlvbmFsIGxheWVyLiBBIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGggaXMgZXNzZW50aWFsLlxuKiAgICoqQnVpbGQtdGltZSBpbXBsaWNhdGlvbnMqKjogSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhZmZlY3QgdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHByb2Nlc3MsIGZyb20gY29tcGlsYXRpb24gdGltZSB0byBpbWFnZSBzaXplLlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0cyoqOiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiBgQ0ZHODAyMTFgIGFuZCBvdGhlciB3aXJlbGVzcyBzdWJzeXN0ZW1zIChlLmcuLCBkZXByZWNhdGVkIG9yIGxlZ2FjeSB3aXJlbGVzcyBzdGFja3MpLlxuKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIVxuXG5UaGlzIGRlZXAgZGl2ZSBpcyBqdXN0IGFub3RoZXIgZGF5IGF0IHRoZSBvZmZpY2UgdG8gZW5zdXJlIGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgY29yZSBjb21wb25lbnQgaXMgdXNlZCwgYW5kIHRvIGZvcmVzZWUgYW55IGZ1dHVyZSBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBhc3N1bXB0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjE4Ljg4MDQwNzk4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0ODU5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MTguOTcyOTAxNzMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODIwODk4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2lyZWxlc3Mgb3B0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIGRyaXZlcnMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC93aXJlbGVzcy9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDE1IHRocm91Z2ggMzAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZXMgYXJlIGxvY2F0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGUgY2hvaWNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjIxLjA1NDk5NjQ5M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyMS4wNTUxMjE1MDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEwMTMyNzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNdWx0aWNhc3QgTm90aWZpY2F0aW9uIEhhbmRsaW5nIGluIG1hYzgwMjExX2h3c2ltKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBNQUM4MDIxMV9IV1NJTWAsIGBNQUM4MDIxMWAsIGFuZCBgQ0ZHODAyMTFgIGNvbmZpZ3VyYXRpb25zLiBTdGFuZGFyZCBuZXR3b3JraW5nIHN0dWZmIGxpa2UgYE5FVGAgYW5kIGBORVRMSU5LYCBzaG91bGQgYmUgaW4gcGxheSB0b28sIGJ1dCB0aG9zZSBhcmUgZXhwZWN0ZWQuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBmdW5jdGlvbnMgd2l0aGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ6IGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCwgYGh3c2ltX21jYXN0X25ld19yYWRpb2AsIGBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gLCBgaHdzaW1fbWNhc3RfZGVsX3JhZGlvYCwgYG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb2AsIGBod3NpbV9uZXdfcmFkaW9fbmxgLCBgaHdzaW1fZGVsX3JhZGlvX25sYCwgYGh3c2ltX2V4aXRfbmV0YCwgYW5kIGByZW1vdmVfdXNlcl9yYWRpb3NgLiBJJ3ZlIGNoZWNrZWQgYW5kIGNvbmZpcm1lZCB0aGVzZSBmdW5jdGlvbnMgYXJlIHN5bWJvbHMsIG5vdCBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQ7IHRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGF0IGltcGFjdHMgdGhlaXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBtb2RpZmljYXRpb24uXG5cbmBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW9gIGlzIGNhbGxlZCBieSBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGluaXRfbWFjODAyMTFfaHdzaW1gLiBgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvYCBpcyBjYWxsZWQgYnkgYG1hYzgwMjExX2h3c2ltX2ZyZWVgLCBgaHdzaW1fZGVsX3JhZGlvX25sYCwgYHJlbW92ZV91c2VyX3JhZGlvc2AsIGFuZCBgaHdzaW1fZXhpdF9uZXRgLiBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGh3c2ltX2RlbF9yYWRpb19ubGAgYXJlIG5ldGxpbmsgY2FsbGJhY2tzLCBzbyB0aG9zZSBhcmUga2V5IGVudHJ5IHBvaW50cy4gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGFyZSBzdGF0aWMgaGVscGVycy5cblxuSSd2ZSBhbHNvIGV4YW1pbmVkIHRoZSBjaGFuZ2VzIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnM6IGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBub3cgcGFzc2VzIGBuZXRgIHRvIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AuIGBod3NpbV9tY2FzdF9uZXdfcmFkaW9gIGFuZCBgaHdzaW1fbWNhc3RfZGVsX3JhZGlvYCBub3cgcmVjZWl2ZSBhbmQgdXNlIGBuZXRgIHRvIHBhc3MgdG8gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLiBgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvYCBhbmQgYG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpb2AgcGFzcyBgd2lwaHlfbmV0KC4uLilgIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGVscGVyIGZ1bmN0aW9ucy4gRmluYWxseSwgd2UgaGF2ZSB0aGUgbmV0bGluayBoYW5kbGVycyBgaHdzaW1fbmV3X3JhZGlvX25sYCBhbmQgYGh3c2ltX2RlbF9yYWRpb19ubGAuXG5cblRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgZGVhbGluZyB3aXRoIGFueXRoaW5nIGxpa2UgYGttYWxsb2NgIG9yIG11dGV4IGxvY2tzLCB3aGljaCBhcmUgdWJpcXVpdG91cyBhbmQgY2FuIGNhdXNlIHByb2JsZW1zIGluIGFueSBzaXR1YXRpb247IHRoZXkncmUgYWxsICpzcGVjaWZpYyogdG8gdGhlIGBtYWM4MDIxMV9od3NpbWAgdmlydHVhbCBkcml2ZXIuIFRoYXTigJlzIGdvb2QgZnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZS5cblxuU28sIHRoZSBwYXRjaCBpcyB1cGRhdGluZyBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIGhhbmRsaW5nIGluIGBtYWM4MDIxMV9od3NpbWAuIFdoZW4gcmFkaW9zIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQgd2l0aG91dCBhIHNwZWNpZmljIGdlbmxfaW5mbyBjb250ZXh0LCBpdCdzIG5vdyB1c2luZyBgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnNgIHdpdGggdGhlIHdpcGh5IG5ldHdvcmsgbmFtZXNwYWNlIGluc3RlYWQgb2YgYGdlbmxtc2dfbXVsdGljYXN0YC5cblxuSXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpczogYG1hYzgwMjExX2h3c2ltYCBpcyBhIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyIHRoYXQncyBlYXNpbHkgYWNjZXNzaWJsZSBhbmQgdGVzdGVkIHRocm91Z2ggbmV0bGluaywgZXNwZWNpYWxseSB3aXRoaW4gZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIGNhbiBoZWxwIHVzIHZlcmlmeSB0aGF0IG11bHRpY2FzdCBtZXNzYWdpbmcgYW5kIGxpZmVjeWNsZSBpbnRlcmFjdGlvbnMgYXJlIGNvcnJlY3QgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcyBkdXJpbmcgcmFkaW8gY3JlYXRpb24sIGRlbGV0aW9uLCBhbmQgbmV0bnMgdGVhcmRvd24uIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSB0byBmbGFnLCBsZXQncyBwcm9jZWVkLlxuXG5J4oCZbSBjb25maWRlbnQgd2l0aCB0aGVzZSBmaW5kaW5ncy4gTGV0J3Mgc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzY3LCJPdXRwdXRUb2tlbnMiOjI3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyOS4xNTY0NTE4NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0MDY1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJod3NpbV9tY2FzdF9jb25maWdfbXNnXCIsXG4gICAgXCJod3NpbV9tY2FzdF9uZXdfcmFkaW9cIixcbiAgICBcImh3c2ltX21jYXN0X2RlbF9yYWRpb1wiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9cIixcbiAgICBcImh3c2ltX25ld19yYWRpb19ubFwiLFxuICAgIFwiaHdzaW1fZGVsX3JhZGlvX25sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGljYXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBsb2dpYyBkdXJpbmcgcmFkaW8gY3JlYXRpb24gYW5kIGRlbGV0aW9uIGluIG1hYzgwMjExX2h3c2ltIHRvIHRhcmdldCB0aGUgcmFkaW8ncyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJod3NpbV9tY2FzdF9jb25maWdfbXNnXCIsXG4gICAgXCJod3NpbV9tY2FzdF9uZXdfcmFkaW9cIixcbiAgICBcImh3c2ltX21jYXN0X2RlbF9yYWRpb1wiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV9kZWxfcmFkaW9cIixcbiAgICBcImh3c2ltX25ld19yYWRpb19ubFwiLFxuICAgIFwiaHdzaW1fZGVsX3JhZGlvX25sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXVsdGljYXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBsb2dpYyBkdXJpbmcgcmFkaW8gY3JlYXRpb24gYW5kIGRlbGV0aW9uIGluIG1hYzgwMjExX2h3c2ltIHRvIHRhcmdldCB0aGUgcmFkaW8ncyB3aXBoeSBuZXR3b3JrIG5hbWVzcGFjZSB2aWEgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSB3aGVuIGdlbmxfaW5mbyBpcyBOVUxMLiBtYWM4MDIxMV9od3NpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB3aXJlbGVzcyBkcml2ZXIgdGhhdCBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoaHdzaW0vbmw4MDIxMSkgYW5kIG5ldG5zIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9ucyBhbmQgbXVsdGljYXN0IGhhbmRsaW5nIGR1cmluZyBjb25jdXJyZW50IHJhZGlvIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG5hbWVzcGFjZSBleGl0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyOS4zMTY4NjczMzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjk3NDYzOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MjkuMzE3NDExNzY4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjEyOTY5MTU1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgbWFjODAyMTFfaHdzaW0gdG8gdXNlIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCkgaW5zdGVhZCBvZiBnZW5sbXNnX211bHRpY2FzdCgpIHdoZW4gYnJvYWRjYXN0aW5nIG5ldy9kZWxldGVkIHJhZGlvIG5ldGxpbmsgbm90aWZpY2F0aW9ucyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZ2VubF9pbmZvLCBwYXNzaW5nIHRoZSB0YXJnZXQgbmV0bnMgZnJvbSB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGFsdGVyIGRhdGEgc2VyaWFsaXphdGlvbiwgbW9kaWZ5IGJ1ZmZlciBib3VuZHMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuIEJlY2F1c2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZkMGFlNTIwYmMzMTU3MWRmMGJiZjQ0ZGRiODJlODBiZTdlOGIxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MTI6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5kNzdmNTRkYWVmYzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtNDM5NiwxNSArNDM5NiwxNSBAQCBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyB7XG4gXHRib29sIGJhY2tncm91bmRfcmFkYXI7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXG4rc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfY29uZmlnX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbWNhc3Rfc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvKVxuIFx0XHRnZW5sX25vdGlmeShcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxuIFx0XHRcdCAgICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuIFx0ZWxzZVxuLVx0XHRnZW5sbXNnX211bHRpY2FzdChcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCAwLFxuLVx0XHRcdFx0ICBIV1NJTV9NQ0dSUF9DT05GSUcsIEdGUF9LRVJORUwpO1xuK1x0XHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbmV0LCBtY2FzdF9za2IsIDAsXG4rXHRcdFx0XHRcdEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXBwZW5kX3JhZGlvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWQsXG5AQCAtNDQ4OCw3ICs0NDg4LDggQEAgc3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuK3N0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhpbnQgaWQsIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdCAgc3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMgKnBhcmFtKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICptY2FzdF9za2I7XG5AQCAtNDUwOCw3ICs0NTA5LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfbmV3X3JhZGlvKGludCBpZCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcbiBcdGdlbmxtc2dfZW5kKG1jYXN0X3NrYiwgZGF0YSk7XG4gXG4tXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgaW5mbyk7XG4rXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKG1jYXN0X3NrYiwgbmV0LCBpbmZvKTtcbiBcdHJldHVybjtcbiBcbiBvdXRfZXJyOlxuQEAgLTYxOTAsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHdzaW1fcmFkaW9fbG9jayk7XG4gXG4tXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCBpbmZvLCBwYXJhbSk7XG4rXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcbiBcbiBcdHJldHVybiBpZHg7XG4gXG5AQCAtNjIwOCw3ICs2MjA5LDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK1x0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHZvaWQgKmRhdGE7XG5AQCAtNjIzNCw3ICs2MjM1LDcgQEAgc3RhdGljIHZvaWQgaHdzaW1fbWNhc3RfZGVsX3JhZGlvKGludCBpZCwgY29uc3QgY2hhciAqaHduYW1lLFxuIFxuIFx0Z2VubG1zZ19lbmQoc2tiLCBkYXRhKTtcbiBcbi1cdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xuIFxuIFx0cmV0dXJuO1xuIFxuQEAgLTYyNDYsNyArNjI0Nyw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqaHduYW1lLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbi1cdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCBpbmZvKTtcbitcdGh3c2ltX21jYXN0X2RlbF9yYWRpbyhkYXRhLVx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cdTAwM2Vody1cdTAwM2V3aXBoeSksIGluZm8pO1xuIFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXHUwMDNlZGVidWdmcyk7XG4gXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkYXRhLVx1MDAzZWh3KTtcbiBcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVx1MDAzZWRldik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzoyOS4zMTc0MTI4NzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA4NDA3NDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gbWVzc2FnaW5nIHdpdGhpbiB0aGUgYG1hYzgwMjExX2h3c2ltYCB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlci4gVGhlIGBkaWZmYCBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgIGZ1bmN0aW9uLiBUaGUgY2hhbmdlIGlzIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBzbyBsZXQncyBwYXJzZSB0aGlzIGNhcmVmdWxseS5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBzaWduYXR1cmUgd2FzOlxuXG5gYGBjXG5zdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXG5cdFx0XHRcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5gYGBcblxuQW5kIGl0J3MgYmVpbmcgbW9kaWZpZWQgdG86XG5cbmBgYGNcbnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxuXHRcdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuYGBgXG5cblRoZSBhZGRpdGlvbiBvZiB0aGUgYHN0cnVjdCBuZXQgKm5ldGAgYXJndW1lbnQgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBtZXNzYWdpbmcgaXMgYmVjb21pbmcgbmV0IG5hbWVzcGFjZSBhd2FyZS4gTm93LCB0aGUgZnVuY3Rpb24gYWNjZXB0cyBhIGBzdHJ1Y3QgbmV0YCBwb2ludGVyLiBUaGlzIGlzIGxpa2VseSBkb25lIHRvIGVuYWJsZSB0aGUgbXVsdGljYXN0IGNvbmZpZ3VyYXRpb24gdG8gYmUgc3BlY2lmaWMgdG8gdGhlIG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5MZXQncyBsb29rIGZ1cnRoZXIuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHRoZSBgZ2VubG1zZ19tdWx0aWNhc3RgIGNhbGwgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknZCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgaG93IGBod3NpbV9tY2FzdF9jb25maWdfbXNnYCBpcyAqY2FsbGVkKiB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBuZXRgIGlzIGJlaW5nIHBvcHVsYXRlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBuZXcgYGdlbmxtc2dfbXVsdGljYXN0X25ldG5zYCBjYWxsIGhhcy4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSBuZXR3b3JrIHNlZ21lbnRhdGlvbiBmb3Igb3VyIHZpcnR1YWwgZGV2aWNlcy5cblxuSW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2UgYXdhcmVuZXNzIGluIG11bHRpY2FzdCBjb25maWd1cmF0aW9uIG1lc3NhZ2luZyB3aXRoaW4gdGhlIGh3c2ltIGRyaXZlciwgcHJvYmFibHkgdG8gZW5oYW5jZSBuZXR3b3JrIGlzb2xhdGlvbiBvciB0byBzdXBwb3J0IG1vcmUgY29tcGxleCB2aXJ0dWFsaXplZCBuZXR3b3JraW5nIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1OSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjM1LjQwMTQ5MTk5NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM5MDpcXHRcXHR1MzIgaWZ0eXBlcztcXG40MzkxOlxcdFxcdHUzMiAqY2lwaGVycztcXG40MzkyOlxcdFxcdHU4IG5fY2lwaGVycztcXG40MzkzOlxcdFxcdGJvb2wgbWxvO1xcbjQzOTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpwbXNyX2NhcGE7XFxuNDM5NTpcXHRcXHRib29sIG5hbl9kZXZpY2U7XFxuNDM5NjpcXHRcXHRib29sIGJhY2tncm91bmRfcmFkYXI7XFxuNDM5NzpcXHR9O1xcbjQzOTg6XFx0XFxuNDM5OTpcXHRzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsIHN0cnVjdCBuZXQgKm5ldCxcXG40NDAwOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNDQwMTpcXHR7XFxuNDQwMjpcXHRcXHRpZiAoaW5mbylcXG40NDAzOlxcdFxcdFxcdGdlbmxfbm90aWZ5KFxcdTAwMjZod3NpbV9nZW5sX2ZhbWlseSwgbWNhc3Rfc2tiLCBpbmZvLFxcbjQ0MDQ6XFx0XFx0XFx0XFx0ICAgIEhXU0lNX01DR1JQX0NPTkZJRywgR0ZQX0tFUk5FTCk7XFxuNDQwNTpcXHRcXHRlbHNlXFxuNDQwNjpcXHRcXHRcXHRnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcXHUwMDI2aHdzaW1fZ2VubF9mYW1pbHksIG5ldCwgbWNhc3Rfc2tiLCAwLFxcbjQ0MDc6XFx0XFx0XFx0XFx0XFx0XFx0SFdTSU1fTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTtcXG40NDA4OlxcdH1cXG40NDA5OlxcdFxcbjQ0MTA6XFx0c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG40NDExOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaHdzaW1fbmV3X3JhZGlvX3BhcmFtcyAqcGFyYW0pXFxuNDQxMjpcXHR7XFxuNDQxMzpcXHRcXHRpbnQgcmV0O1xcbjQ0MTQ6XFx0XFxuNDQxNTpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG40NDE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0MTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDE4OlxcdFxcbjQ0MTk6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VjaGFubmVscykge1xcbjQ0MjA6XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX0NIQU5ORUxTLCBwYXJhbS1cXHUwMDNlY2hhbm5lbHMpO1xcbjQ0MjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQyMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQ0MjM6XFx0XFx0fVxcbjQ0MjQ6XFx0XFxuNDQyNTpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19hbHBoYTIpIHtcXG40NDI2OlxcdFxcdFxcdHJldCA9IG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1JFR19ISU5UX0FMUEhBMiwgMixcXG40NDI3OlxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLVxcdTAwM2VyZWdfYWxwaGEyKTtcXG40NDI4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0Mjk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDMwOlxcdFxcdH1cXG40NDMxOlxcdFxcbjQ0MzI6XFx0XFx0aWYgKHBhcmFtLVxcdTAwM2VyZWdkKSB7XFxuNDQzMzpcXHRcXHRcXHRpbnQgaTtcXG40NDM0OlxcdFxcbjQ0MzU6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkrKykge1xcbjQ0MzY6XFx0XFx0XFx0XFx0aWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tXFx1MDAzZXJlZ2QpXFxuNDQzNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40NDM4OlxcdFxcbjQ0Mzk6XFx0XFx0XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBIV1NJTV9BVFRSX1JFR19DVVNUT01fUkVHLCBpKTtcXG40NDQwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQ0NDE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40NDQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ0NDM6XFx0XFx0XFx0fVxcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHRpZiAocGFyYW0tXFx1MDAzZXJlZ19zdHJpY3QpIHtcXG40NDQ3OlxcdFxcdFxcdHJldCA9IG5sYV9wdXRfZmxhZyhza2IsIEhXU0lNX0FUVFJfUkVHX1NUUklDVF9SRUcpO1xcbjQ0NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDQ0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzozNS40MDIwMjI0MzZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwODg0MDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBwZXJzcGVjdGl2ZSBvbiBleGFtaW5pbmcgbGluZXMgNjE4MCB0byA2MjYwIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2A6XG5cbioqRGl2aW5nIGludG8gYG1hYzgwMjExX2h3c2ltX21haW4uY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGBod3NpbWAgbW9kdWxlLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBsaW5lcyA2MTgwIHRocm91Z2ggNjI2MCwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgYmxvY2sgb2YgY29kZS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyBhbmQgcGF0aCwgSSdtIGd1ZXNzaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGludGVyZmFjZSBzaW11bGF0aW9uLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgb3IgcGVyaGFwcyB0cmFjayBkb3duIGEgYnVnLCBvciB1bmRlcnN0YW5kIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTUFDODAyMTEgY29yZS5cblxuSSBleHBlY3QgdG8gc2VlIHNvbWV0aGluZyByZWxhdGVkIHRvIGVpdGhlciBoYXJkd2FyZSBzaW11bGF0aW9uIGJlaGF2aW9yLCBtYXliZSBwYWNrZXQgaW5qZWN0aW9uLCByYXRlIGNvbnRyb2wgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBraW5kIG9mIGVycm9yIG1hbmFnZW1lbnQgb3IgZXZlbnQgcHJvY2Vzc2luZy4gU2luY2UgSSBrbm93IHRoaXMgY29kZSBwcmV0dHkgd2VsbCwgSSdtIGV4cGVjdGluZyB0byBlaXRoZXIgcmVmcmVzaCBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHNpbXVsYXRpb24sIG9yIHBvc3NpYmx5IHNwb3QgYSBwb3RlbnRpYWwgYXJlYSBmb3Igb3B0aW1pemF0aW9uIG9yIGEgc3VidGxlIGJ1Zy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGZ1bmN0aW9ucyBjYWxsZWQsIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgaGVscCBkZWZpbmUgdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IHNwZWNpZmljIGNvZGUgcmFuZ2UuIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucyB3aXRoIGtlcm5lbCB0aW1pbmcuIEkgYW0gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGludGVycnVwdCBhbmQgRE1BIGludGVyYWN0aW9ucyBpZiB0aGV5IGFyZSByZWxldmFudCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGUuIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgYmxvY2ssIEkgY2FuIGxpa2VseSBpZGVudGlmeSB0aGUgZ2VuZXJhbCBjb250cm9sIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzaW11bGF0aW9uIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODk0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDoxMzozOC42MTA4NjU0MjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYxODA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG42MTgxOlxcdFxcdFxcdGlmIChpbmZvKSB7XFxuNjE4MjpcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJwZXJtIGFkZHIgYWxyZWFkeSBwcmVzZW50XFxcIik7XFxuNjE4MzpcXHRcXHRcXHRcXHROTF9TRVRfQkFEX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbjYxODQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9QRVJNX0FERFJdKTtcXG42MTg1OlxcdFxcdFxcdH1cXG42MTg2OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZod3NpbV9yYWRpb19sb2NrKTtcXG42MTg3OlxcdFxcdFxcdGdvdG8gZmFpbGVkX2ZpbmFsX2luc2VydDtcXG42MTg4OlxcdFxcdH1cXG42MTg5OlxcdFxcbjYxOTA6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGF0YS1cXHUwMDNlbGlzdCwgXFx1MDAyNmh3c2ltX3JhZGlvcyk7XFxuNjE5MTpcXHRcXHRod3NpbV9yYWRpb3NfZ2VuZXJhdGlvbisrO1xcbjYxOTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmh3c2ltX3JhZGlvX2xvY2spO1xcbjYxOTM6XFx0XFxuNjE5NDpcXHRcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaWR4LCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbywgcGFyYW0pO1xcbjYxOTU6XFx0XFxuNjE5NjpcXHRcXHRyZXR1cm4gaWR4O1xcbjYxOTc6XFx0XFxuNjE5ODpcXHRmYWlsZWRfZmluYWxfaW5zZXJ0OlxcbjYxOTk6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhdGEtXFx1MDAzZWRlYnVnZnMpO1xcbjYyMDA6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGF0YS1cXHUwMDNlaHcpO1xcbjYyMDE6XFx0ZmFpbGVkX2h3OlxcbjYyMDI6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwMzpcXHRmYWlsZWRfYmluZDpcXG42MjA0OlxcdFxcdGRldmljZV91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZWRldik7XFxuNjIwNTpcXHRmYWlsZWRfZHJ2ZGF0YTpcXG42MjA2OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGh3KTtcXG42MjA3OlxcdGZhaWxlZDpcXG42MjA4OlxcdFxcdHJldHVybiBlcnI7XFxuNjIwOTpcXHR9XFxuNjIxMDpcXHRcXG42MjExOlxcdHN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG42MjEyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjYyMTM6XFx0e1xcbjYyMTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG42MjE1OlxcdFxcdHZvaWQgKmRhdGE7XFxuNjIxNjpcXHRcXHRpbnQgcmV0O1xcbjYyMTc6XFx0XFxuNjIxODpcXHRcXHRza2IgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XFxuNjIxOTpcXHRcXHRpZiAoIXNrYilcXG42MjIwOlxcdFxcdFxcdHJldHVybjtcXG42MjIxOlxcdFxcbjYyMjI6XFx0XFx0ZGF0YSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXFx1MDAyNmh3c2ltX2dlbmxfZmFtaWx5LCAwLFxcbjYyMjM6XFx0XFx0XFx0XFx0ICAgSFdTSU1fQ01EX0RFTF9SQURJTyk7XFxuNjIyNDpcXHRcXHRpZiAoIWRhdGEpXFxuNjIyNTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMjY6XFx0XFxuNjIyNzpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkFESU9fSUQsIGlkKTtcXG42MjI4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyMjk6XFx0XFx0XFx0Z290byBlcnJvcjtcXG42MjMwOlxcdFxcbjYyMzE6XFx0XFx0cmV0ID0gbmxhX3B1dChza2IsIEhXU0lNX0FUVFJfUkFESU9fTkFNRSwgc3RybGVuKGh3bmFtZSksXFxuNjIzMjpcXHRcXHRcXHQgICAgICBod25hbWUpO1xcbjYyMzM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjIzNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjYyMzU6XFx0XFxuNjIzNjpcXHRcXHRnZW5sbXNnX2VuZChza2IsIGRhdGEpO1xcbjYyMzc6XFx0XFxuNjIzODpcXHRcXHRod3NpbV9tY2FzdF9jb25maWdfbXNnKHNrYiwgbmV0LCBpbmZvKTtcXG42MjM5OlxcdFxcbjYyNDA6XFx0XFx0cmV0dXJuO1xcbjYyNDE6XFx0XFxuNjI0MjpcXHRlcnJvcjpcXG42MjQzOlxcdFxcdG5sbXNnX2ZyZWUoc2tiKTtcXG42MjQ0OlxcdH1cXG42MjQ1OlxcdFxcbjYyNDY6XFx0c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZGVsX3JhZGlvKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbjYyNDc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpod25hbWUsXFxuNjI0ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNjI0OTpcXHR7XFxuNjI1MDpcXHRcXHRod3NpbV9tY2FzdF9kZWxfcmFkaW8oZGF0YS1cXHUwMDNlaWR4LCBod25hbWUsIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLCBpbmZvKTtcXG42MjUxOlxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLVxcdTAwM2VkZWJ1Z2ZzKTtcXG42MjUyOlxcdFxcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjUzOlxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihkYXRhLVxcdTAwM2VkZXYpO1xcbjYyNTQ6XFx0XFx0ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS1cXHUwMDNlZGV2KTtcXG42MjU1OlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KGRhdGEtXFx1MDAzZWh3KTtcXG42MjU2OlxcdH1cXG42MjU3OlxcdFxcbjYyNTg6XFx0c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9nZXRfcmFkaW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG42MjU5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MTM6MzguNjExMjcwMjY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NDM5ODMzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBoZXJlIGludm9sdmVzIHVwZGF0aW5nIHRoZSBgaHdzaW1fbWNhc3RfY29uZmlnX21zZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGEgYHN0cnVjdCBuZXQgKm5ldGAgYXJndW1lbnQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCB3aXRoIHRoZSBvcmlnaW5hbCBsb2dpYyBzdGlsbCBwcmVzZW50IHdpdGhpbiBhbiBgaWYgKGluZm8pYCBibG9jay4gV2hlbiBhIGBnZW5sX2luZm9gIGlzIHByZXNlbnQsIHRoZSBjYWxsIHRvIGBnZW5sX25vdGlmeWAgcmVtYWlucyB1bmNoYW5nZWQuIFRoZSBhZGRlZCBgbmV0YCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHdoZW4gYGluZm9gIGlzIGBOVUxMYC4gSW4gdGhpcyBgaW5mbyA9PSBOVUxMYCBjYXNlLCB3aGVyZSBwcmV2aW91c2x5IHRoZSBjb2RlIHVzZWQgdGhlIGRlZmF1bHQgbXVsdGljYXN0IGJlaGF2aW9yLCBpdCBub3cgZXhwbGljaXRseSB0YXJnZXRzIHRoZSBjb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlIHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AuXG5cblRoZSBkcml2aW5nIG1vdGl2YXRpb24gaXMgY2xlYXI6IHRvIGVuc3VyZSBtdWx0aWNhc3QgbWVzc2FnZXMgcmVsYXRlZCB0byByYWRpbyBjb25maWd1cmF0aW9uIGFyZSBzZW50IHRvIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB3aGVyZSB0aGUgd2lwaHkgYWN0dWFsbHkgKmxpdmVzKiwgcmF0aGVyIHRoYW4gZGVmYXVsdGluZyB0byBgaW5pdF9uZXRgLiBUaGlzIGlzIGNyaXRpY2FsIHdoZW4gcmFkaW9zIGFyZSBjcmVhdGVkIG9yIGRlc3Ryb3llZCBvdXRzaWRlIG9mIGEgZGlyZWN0IGdlbmVyaWMgbmV0bGluayByZXF1ZXN0IGNvbnRleHQg4oCTIGEgY29tbW9uIHNjZW5hcmlvIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGNsZWFudXAsIG9yIHdoZW4gdHJpZ2dlcmVkIHRocm91Z2ggc3lzZnMgb3Igb3RoZXIgaW50ZXJuYWwgbWVjaGFuaXNtcy4gYGh3c2ltX21jYXN0X25ld19yYWRpb2AgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIHBhc3MgYG5ldGAgKG9idGFpbmVkIGZyb20gYHdpcGh5X25ldChkYXRhLVx1MDAzZWh3LVx1MDAzZXdpcGh5KWApIGludG8gYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogc2VjdXJpdHkgYW5kIHN0YWJpbGl0eS4gSSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBpcyB0aGVyZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gSSdtIGNvbmZpZGVudCB0aGVyZSBpc24ndC4gVGhlIG1vZGlmaWNhdGlvbiBzaW1wbHkgcGFzc2VzIGEgcG9pbnRlciB0byBhIHZhbGlkIGBzdHJ1Y3QgbmV0YCBvYmplY3QsIGFuZCB0aGUgdW5kZXJseWluZyBgbWNhc3Rfc2tiYCBtZXNzYWdlIHN0cnVjdHVyZSBpc24ndCBhbHRlcmVkIGF0IGFsbC4gTm8gbmV3IGRhdGEgaXMgaW50cm9kdWNlZCwgbm8gZXhpc3RpbmcgY29uZGl0aW9uYWwgbG9naWMgaXMgYWZmZWN0ZWQgYnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgYm91bmRzIGFyZSBpbXBhY3RlZC4gVGhlIGRhdGEgd2l0aGluIHRoZSBtZXNzYWdlIGlzIHVuY2hhbmdlZCwgYW5kIEkgc2VlIG5vIHJpc2sgb2YgbWVtb3J5IGxlYWtzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgbmVlZCB0byBxdWlja2x5IHJldmlldyB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgYGh3c2ltX21jYXN0X2NvbmZpZ19tc2dgLCBgaHdzaW1fbWNhc3RfbmV3X3JhZGlvYCwgYW5kIGBod3NpbV9tY2FzdF9kZWxfcmFkaW9gIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkndmUgbWlzc2VkLiBCdXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgbGlrZSBhIHdlbGwtc2NvcGVkIGNoYW5nZSBkZXNpZ25lZCB0byBjb3JyZWN0IGEgbmFtZXNwYWNlIGlzc3VlIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjQ0LjA1NTI1NjgxNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxODU4MTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod3NpbV9tY2FzdF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYz03OTA9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBod3NpbV9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTgwMi1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjgwMzpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9jb25maWdfbXNnKHN0cnVjdCBza19idWZmICptY2FzdF9za2IsXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MDQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODEzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6ODE0OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X25ld19yYWRpbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaHdzaW1fcGh5ICpwaHkpXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy04MzItXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYzo4MzM6XFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIGluZm8pO1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtODM0LVxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9ODk2PXN0YXRpYyBpbnQgaHdzaW1fYWRkX29uZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTk3OS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjk4MDpcXHRod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW5mbywgcGh5KTtcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTk4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQzNzg9c3RydWN0IGh3c2ltX25ld19yYWRpb19wYXJhbXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDM5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo0Mzk5OnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc3RydWN0IHNrX2J1ZmYgKm1jYXN0X3NrYiwgc3RydWN0IG5ldCAqbmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0MDAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQ0MTA9c3RhdGljIGludCBhcHBlbmRfcmFkaW9fbXNnKHN0cnVjdCBza19idWZmICpza2IsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ0OTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDQ5MTpzdGF0aWMgdm9pZCBod3NpbV9tY2FzdF9uZXdfcmFkaW8oaW50IGlkLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDQ5Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00NTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ1MTI6XFx0aHdzaW1fbWNhc3RfY29uZmlnX21zZyhtY2FzdF9za2IsIG5ldCwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDUxMy1cXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01Njc1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTkzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYxOTQ6XFx0aHdzaW1fbWNhc3RfbmV3X3JhZGlvKGlkeCwgd2lwaHlfbmV0KGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSksIGluZm8sIHBhcmFtKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIxMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjExOnN0YXRpYyB2b2lkIGh3c2ltX21jYXN0X2RlbF9yYWRpbyhpbnQgaWQsIGNvbnN0IGNoYXIgKmh3bmFtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02MjEyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjIzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2MjM4OlxcdGh3c2ltX21jYXN0X2NvbmZpZ19tc2coc2tiLCBuZXQsIGluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyMzktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MjQ2PXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2RlbF9yYWRpbyhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTYyNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjYyNTA6XFx0aHdzaW1fbWNhc3RfZGVsX3JhZGlvKGRhdGEtXFx1MDAzZWlkeCwgaHduYW1lLCB3aXBoeV9uZXQoZGF0YS1cXHUwMDNlaHctXFx1MDAzZXdpcGh5KSwgaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjI1MS1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGF0YS1cXHUwMDNlZGVidWdmcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjQ2LjU3Mzg0NTkwNloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDQwNDU4MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBDb25jZXJucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBtdWx0aWNhc3Qgbm90aWZpY2F0aW9ucyBpbiBgbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gVGhlIGZpcnN0IHN0ZXAgd2FzIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIsIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCB1c2VzIG9mIGBod3NpbV9tY2FzdF8qYCBpbiB0aGF0IGZpbGUuIEdyZXBwaW5nIHRoZSBjb2RlIHNob3dlZCBhbGwgdGhlIHJlbGV2YW50IGNhbGxzLiBHb29kLCB0aGF0J3MgZG9uZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSByZXF1aXJlbWVudHMgZm9yIEtNU0FOLiBJIG5lZWQgdG8gc2V0IGBOZWVkc0tNU0FOYCBhbmQgdGhlIGBLTVNBTlJlYXNvbmluZ2Agc3RyaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGNoYW5naW5nIHRoZSBtdWx0aWNhc3QgZnVuY3Rpb24gY2FsbHMgdG8gdGFyZ2V0IHRoZSBjb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlIHVzaW5nIGBnZW5sbXNnX211bHRpY2FzdF9uZXRuc2AgaW5zdGVhZCBvZiBgZ2VubG1zZ19tdWx0aWNhc3RgICp3aGVuKiB0aGUgYGluZm9gIHBvaW50ZXIgaXMgTlVMTC4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggaXMganVzdCAqcGFzc2luZyogYSBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyLCBgd2lwaHlfbmV0KC4uLilgLCB0byBleGlzdGluZyBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGZ1bmN0aW9ucy5cblxuQ3J1Y2lhbGx5LCBpdCdzICpub3QqIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIG5ldyBtZW1vcnksIG5vdCBtb2RpZnlpbmcgZXhpc3Rpbmcgc3RydWN0dXJlIGZpZWxkcyBpbiBhIHdheSB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgaGF6YXJkcywgYW5kIGl0J3Mgbm90IGNvcHlpbmcgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGludHJvZHVjaW5nIGJ1ZmZlciBib3VuZGFyeSBpc3N1ZXMsIG9yIGNyZWF0aW5nIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gQW55IHBvaW50ZXIgcHJvYmxlbXMgb3IgbGlmZXRpbWUgaXNzdWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBub3JtYWwgZGV0ZWN0b3JzLCBzdWNoIGFzIEtBU0FOLCBLQVNMUiwgYW5kIGdlbmVyYWwgY3Jhc2ggZHVtcHMsIGFzIHRoZXkgd291bGQgYmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2UgaW4gdGhlc2UgYXJlYXMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUuIFRoaXMgbG9va3MgbGlrZSBhIHNhZmUgY2hhbmdlLiBPa2F5LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjEsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjEzOjUwLjYxNDMwNzI2M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBtYWM4MDIxMV9od3NpbSB0byB1c2UgZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoKSBpbnN0ZWFkIG9mIGdlbmxtc2dfbXVsdGljYXN0KCkgd2hlbiBicm9hZGNhc3RpbmcgbmV3L2RlbGV0ZWQgcmFkaW8gbmV0bGluayBub3RpZmljYXRpb25zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBnZW5sX2luZm8sIHBhc3NpbmcgdGhlIHRhcmdldCBuZXRucyBmcm9tIHdpcGh5X25ldChkYXRhLVxcdTAwM2Vody1cXHUwMDNld2lwaHkpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWx0ZXIgZGF0YSBzZXJpYWxpemF0aW9uLCBtb2RpZnkgYnVmZmVyIGJvdW5kcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcy4gQmVjYXVzZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG1hYzgwMjExX2h3c2ltIHRvIHVzZSBnZW5sbXNnX211bHRpY2FzdF9uZXRucygpIGluc3RlYWQgb2YgZ2VubG1zZ19tdWx0aWNhc3QoKSB3aGVuIGJyb2FkY2FzdGluZyBuZXcvZGVsZXRlZCByYWRpbyBuZXRsaW5rIG5vdGlmaWNhdGlvbnMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIGdlbmxfaW5mbywgcGFzc2luZyB0aGUgdGFyZ2V0IG5ldG5zIGZyb20gd2lwaHlfbmV0KGRhdGEtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhbHRlciBkYXRhIHNlcmlhbGl6YXRpb24sIG1vZGlmeSBidWZmZXIgYm91bmRzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[1] Phase: Succeeded StartedAt: 2026-09-06 00:14:03 +0000 UTC FinishedAt: 2026-09-06 00:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 00:14:03 +0000 UTC FinishedAt: 2026-09-06 00:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2] Phase: Succeeded StartedAt: 2026-09-06 00:14:03 +0000 UTC FinishedAt: 2026-09-06 03:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 00:14:03 +0000 UTC FinishedAt: 2026-09-06 03:53:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 00:14:03 +0000 UTC FinishedAt: 2026-09-06 00:14:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 00:14:03 +0000 UTC FinishedAt: 2026-09-06 00:14:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowslrzb/series-workflowslrzb-convert-artifact-541024998/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 00:14:13 +0000 UTC FinishedAt: 2026-09-06 00:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 00:14:13 +0000 UTC FinishedAt: 2026-09-06 00:30:11 +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:*cfbe2fe2-bd9a-4266-a975-59373d38548c,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-workflowslrzb/series-workflowslrzb-convert-artifact-541024998/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": "9cf5036e-dca5-4953-b76e-5aa2c248c7de", "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-workflowslrzb/series-workflowslrzb-build-action-4164944508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 00:14:13 +0000 UTC FinishedAt: 2026-09-06 00:30:01 +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:*cfbe2fe2-bd9a-4266-a975-59373d38548c,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-workflowslrzb/series-workflowslrzb-convert-artifact-541024998/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": "9cf5036e-dca5-4953-b76e-5aa2c248c7de", "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-workflowslrzb/series-workflowslrzb-build-action-4164944508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 00:30:11 +0000 UTC FinishedAt: 2026-09-06 00:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 00:30:11 +0000 UTC FinishedAt: 2026-09-06 00:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 00:30:11 +0000 UTC FinishedAt: 2026-09-06 00:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 00:30:11 +0000 UTC FinishedAt: 2026-09-06 00:30:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowslrzb/series-workflowslrzb-convert-artifact-1045226553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 00:30:21 +0000 UTC FinishedAt: 2026-09-06 00:32:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 00:30:21 +0000 UTC FinishedAt: 2026-09-06 00:31:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9cf5036e-dca5-4953-b76e-5aa2c248c7de,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-workflowslrzb/series-workflowslrzb-build-action-4164944508/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-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 00:32:01 +0000 UTC FinishedAt: 2026-09-06 00:32:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 00:32:01 +0000 UTC FinishedAt: 2026-09-06 00:32:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 00:32:01 +0000 UTC FinishedAt: 2026-09-06 00:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 00:32:01 +0000 UTC FinishedAt: 2026-09-06 00:48:59 +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:*cfbe2fe2-bd9a-4266-a975-59373d38548c,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-workflowslrzb/series-workflowslrzb-convert-artifact-1045226553/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": "23bab250-a5d3-417b-94ac-f6b755d3de22", "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-workflowslrzb/series-workflowslrzb-build-action-50904341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 00:32:01 +0000 UTC FinishedAt: 2026-09-06 00:48:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cfbe2fe2-bd9a-4266-a975-59373d38548c,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-workflowslrzb/series-workflowslrzb-convert-artifact-1045226553/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": "23bab250-a5d3-417b-94ac-f6b755d3de22", "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-workflowslrzb/series-workflowslrzb-build-action-50904341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 00:48:59 +0000 UTC FinishedAt: 2026-09-06 00:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 00:48:59 +0000 UTC FinishedAt: 2026-09-06 00:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 00:48:59 +0000 UTC FinishedAt: 2026-09-06 00:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 00:48:59 +0000 UTC FinishedAt: 2026-09-06 00:51:00 +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:*23bab250-a5d3-417b-94ac-f6b755d3de22,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-workflowslrzb/series-workflowslrzb-build-action-50904341/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-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 03:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 03:53:38 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"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:*9cf5036e-dca5-4953-b76e-5aa2c248c7de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23bab250-a5d3-417b-94ac-f6b755d3de22,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-workflowslrzb/series-workflowslrzb-build-action-4164944508/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-workflowslrzb/series-workflowslrzb-build-action-50904341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 00:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 00:51:14 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"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-workflowslrzb/series-workflowslrzb-convert-artifact-4278788270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 00:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 00:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 00:51:10 +0000 UTC FinishedAt: 2026-09-06 00:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 00:51:21 +0000 UTC FinishedAt: 2026-09-06 03:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslrzb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_mcast_config_msg","hwsim_mcast_new_radio","hwsim_mcast_del_radio","mac80211_hwsim_new_radio","mac80211_hwsim_del_radio","hwsim_new_radio_nl","hwsim_del_radio_nl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"f5ec3f50-9c0b-4e30-9779-e11d2206533d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 00:51:21 +0000 UTC FinishedAt: 2026-09-06 03:53:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9cf5036e-dca5-4953-b76e-5aa2c248c7de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23bab250-a5d3-417b-94ac-f6b755d3de22,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-workflowslrzb/series-workflowslrzb-build-action-4164944508/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-workflowslrzb/series-workflowslrzb-build-action-50904341/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-workflowslrzb/series-workflowslrzb-convert-artifact-4278788270/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,}