Name: series-workflowbhkw8 Phase: Succeeded StartedAt: 2026-07-02 19:00:49 +0000 UTC FinishedAt: 2026-07-02 23:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[0] Phase: Succeeded StartedAt: 2026-07-02 19:00:49 +0000 UTC FinishedAt: 2026-07-02 19:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 19:00:49 +0000 UTC FinishedAt: 2026-07-02 19:14:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLAB_BUCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLAB_BUCKETS" ], "series_id": "efeab196-ca15-4961-93f0-417e73a0baff" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pskb_expand_head", "pskb_extract" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMQUJfQlVDS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgdGhlIHNlcGFyYXRlIGJ1Y2tldCBhbGxvY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDcwOWRkYjQ0YjVjODBjOTkwZTEwODk5MzA3NTdhOWE3ZWU1MjQ5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTk6MTI6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggMThkYWJiNGU5Y2ZhMGUuLjlkYzVhODU0ODY4MTJkIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtNTg2LDYgJiM0Mzs1ODYsOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChuYXBpX2J1aWxkX3NrYik7XG4gXG4mIzQzO3N0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuIHtcbiBcdGlmICghZ2ZwX3BmbWVtYWxsb2NfYWxsb3dlZChmbGFncykpXG5AQCAtNTkzLDcgJiM0Mzs1OTUsOCBAQCBzdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuIFx0aWYgKCFvYmpfc2l6ZSlcbiBcdFx0cmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShuZXRfaG90ZGF0YS5za2Jfc21hbGxfaGVhZF9jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBmbGFncywgbm9kZSk7XG4tXHRyZXR1cm4ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSwgZmxhZ3MsIG5vZGUpO1xuJiM0MztcdHJldHVybiBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBmbGFncywgbm9kZSk7XG4gfVxuIFxuIC8qXG5AQCAtNjM0LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuIFx0ICogVHJ5IGEgcmVndWxhciBhbGxvY2F0aW9uLCB3aGVuIHRoYXQgZmFpbHMgYW5kIHdlJiMzOTtyZSBub3QgZW50aXRsZWRcbiBcdCAqIHRvIHRoZSByZXNlcnZlcywgZmFpbC5cbiBcdCAqL1xuLVx0b2JqID0ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSxcbiYjNDM7XHRvYmogPSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXG4gXHRcdFx0XHRcdGZsYWdzIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTixcbiBcdFx0XHRcdFx0bm9kZSk7XG4gXHRpZiAobGlrZWx5KG9iaikpXG5AQCAtNTIxNSw2ICYjNDM7NTIxOCw3IEBAIHZvaWQgX19pbml0IHNrYl9pbml0KHZvaWQpXG4gXHRcdFx0XHRcdFx0MCxcbiBcdFx0XHRcdFx0XHRTS0JfU01BTExfSEVBRF9IRUFEUk9PTSxcbiBcdFx0XHRcdFx0XHROVUxMKTtcbiYjNDM7XHRza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcJiMzNDtza2JfZGF0YVwmIzM0OywgU0xBQl9QQU5JQywgMCwgSU5UX01BWCwgTlVMTCk7XG4gXHRza2JfZXh0ZW5zaW9uc19pbml0KCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMQUJfQlVDS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgdGhlIHNlcGFyYXRlIGJ1Y2tldCBhbGxvY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNzA5ZGRiNDRiNWM4MGM5OTBlMTA4OTkzMDc1N2E5YTdlZTUyNDlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxOToxMjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMThkYWJiNGU5Y2ZhMGUuLjlkYzVhODU0ODY4MTJkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNTg2LDYgJiM0Mzs1ODYsOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSkKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9idWlsZF9za2IpOwogCiYjNDM7c3RhdGljIGttZW1fYnVja2V0cyAqc2tiX2RhdGFfYnVja2V0cyBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBzdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCWlmICghZ2ZwX3BmbWVtYWxsb2NfYWxsb3dlZChmbGFncykpCkBAIC01OTMsNyAmIzQzOzU5NSw4IEBAIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiAJaWYgKCFvYmpfc2l6ZSkKIAkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShuZXRfaG90ZGF0YS5za2Jfc21hbGxfaGVhZF9jYWNoZSwKIAkJCQkJICAgICBmbGFncywgbm9kZSk7Ci0JcmV0dXJuIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIob2JqX3NpemUsIGZsYWdzLCBub2RlKTsKJiM0MzsJcmV0dXJuIGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSwKJiM0MzsJCQkJCQkgICAgZmxhZ3MsIG5vZGUpOwogfQogCiAvKgpAQCAtNjM0LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLAogCSAqIFRyeSBhIHJlZ3VsYXIgYWxsb2NhdGlvbiwgd2hlbiB0aGF0IGZhaWxzIGFuZCB3ZSYjMzk7cmUgbm90IGVudGl0bGVkCiAJICogdG8gdGhlIHJlc2VydmVzLCBmYWlsLgogCSAqLwotCW9iaiA9IGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIob2JqX3NpemUsCiYjNDM7CW9iaiA9IGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSwKIAkJCQkJZmxhZ3MgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOLAogCQkJCQlub2RlKTsKIAlpZiAobGlrZWx5KG9iaikpCkBAIC01MjE1LDYgJiM0Mzs1MjE4LDcgQEAgdm9pZCBfX2luaXQgc2tiX2luaXQodm9pZCkKIAkJCQkJCTAsCiAJCQkJCQlTS0JfU01BTExfSEVBRF9IRUFEUk9PTSwKIAkJCQkJCU5VTEwpOwomIzQzOwlza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZSgmIzM0O3NrYl9kYXRhJiMzNDssIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpOwogCXNrYl9leHRlbnNpb25zX2luaXQoKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0aW5rZXJpbmcgd2l0aCBgbmV0L2NvcmUvc2tidWZmLmNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgYmVjYXVzZSB3ZSYjMzk7cmUgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBza2JfZGF0YV9idWNrZXRzYCwgd2hpY2ggaXMgYSBga21lbV9idWNrZXRzICpgLCBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYGttZW1fYnVja2V0c19jcmVhdGVgIHdpdGhpbiBgc2tiX2luaXRgLiBUaGlzIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmQgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgc3RyYXRlZ3kgZm9yIFNLQiBkYXRhLCByZXBsYWNpbmcgdGhlIGdlbmVyaWMgYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIGNhbGxzIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCB3aXRoIGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlIGltcGFjdGluZyBob3cgd2UgaGFuZGxlIFNLQiBkYXRhLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEFic29sdXRlbHksIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEFueSBjaGFuZ2UgYXQgdGhpcyBsZXZlbCBpcyBhIHBvdGVudGlhbCB2ZWN0b3IuIE15IGluaXRpYWwgZm9jdXMgZ29lcyB0byBga21hbGxvY19wZm1lbWFsbG9jYCBhbmQgYGttYWxsb2NfcmVzZXJ2ZWAg4oCTIHRoZXkgc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBXYWl0LCB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyEgT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0LiBZZXAsIHRoZXkgYXJlLiBTbywgd2hpbGUgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCB0YXJnZXRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8mIzM5O3MgY2FsbGluZyAqdGhlbSouIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgd2hhdCYjMzk7cyB1bHRpbWF0ZWx5IHRyaWdnZXJpbmcgdGhlc2UgYWxsb2NhdGlvbiByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBgX19hbGxvY19za2JgLCBgYnVpbGRfc2tiYCwgZXRjLiwgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgdGhhdCB1bHRpbWF0ZWx5IGNhbGwgdGhlc2Ugc3RhdGljIGFsbG9jYXRpb24gcm91dGluZXMuIExldCYjMzk7cyBzZWUgd2hvIHRoZSBjYWxsZXJzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21hbGxvY19wZm1lbWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NTg5PXN0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xubmV0L2NvcmUvc2tidWZmLmMtNTkwLVxubmV0L2NvcmUvc2tidWZmLmM6NTkxOnN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXG5uZXQvY29yZS9za2J1ZmYuYy01OTIte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYwOT1zdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYyNi1cdFx0XHRza2ItXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XG5uZXQvY29yZS9za2J1ZmYuYzo2Mjc6XHRcdHJldHVybiBrbWFsbG9jX3BmbWVtYWxsb2MoMCwgZmxhZ3MsIG5vZGUpO1xubmV0L2NvcmUvc2tidWZmLmMtNjI4LVx0fVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0OC1cdFx0c2tiLVx1MDAzZXBmbWVtYWxsb2MgPSB0cnVlO1xubmV0L2NvcmUvc2tidWZmLmM6NjQ5Olx0b2JqID0ga21hbGxvY19wZm1lbWFsbG9jKG9ial9zaXplLCBmbGFncywgbm9kZSk7XG5uZXQvY29yZS9za2J1ZmYuYy02NTAtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWUsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgYGttYWxsb2NfcmVzZXJ2ZWAgQ2FsbGVyczogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhlc2UgYGttYWxsb2NfcmVzZXJ2ZWAgY2FsbGVycy4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgc2VlIGl0LCBpcyByZXNvdXJjZSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGtlcm5lbCBtZW1vcnkgc3BhY2UuIGBrbWFsbG9jX3Jlc2VydmVgIGlzbiYjMzk7dCBhIGZ1bmN0aW9uIEkgdHlwaWNhbGx5IHNlZSB1c2VkIGluIGV2ZXJ5ZGF5IGNvZGUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7d2h5IGhlcmU/JiMzNDsgYW5kICYjMzQ7d2hhdCYjMzk7cyB0aGUgY29udGV4dD8mIzM0Oy4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGtlcm5lbCByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMuIElzIHRoaXMgZm9yIGhpZ2gtYXZhaWxhYmlsaXR5PyBQZXJoYXBzIGl0IGlzIGEgcHJlLWVtcHRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneT8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdyb3VwIHRoZXNlIGNhbGxlcnMgYmFzZWQgb24gdGhlaXIgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIHN1YnN5c3RlbXMgdGhleSBiZWxvbmcgdG8uIEFyZSB3ZSBsb29raW5nIGF0IGRyaXZlciBjb2RlLCBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMsIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlLCBvciBzb21ldGhpbmcgbW9yZSBlc290ZXJpYz8gRWFjaCBhcmVhIGdpdmVzIG1lIGEgZGlmZmVyZW50IGxlbnMgdG8gdmlldyB0aGUgdXNhZ2UgdGhyb3VnaC4KCklmIEkgd2VyZSB0byBsb29rIGludG8gYSBwcm9ibGVtYXRpYyBhcmVhLCBJIHdvdWxkIGxvb2sgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cy4gSXMgdGhlcmUgYSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgaXMgYmVpbmcgcmVzZXJ2ZWQgZm9yIGEgc2luZ2xlIHB1cnBvc2U/IElmIHNvLCBkb2VzIGl0IGhhdmUgYSBoaWdoIGNvbnRlbnRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXNlcnZlZCBtZW1vcnkgYmVpbmcgaGVsZCwgYW5kIGZvciBob3cgbG9uZz8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGZyYWdtZW50YXRpb24/CgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgc2l6ZSBhbmQgcXVhbnRpdHkgb2YgdGhlc2UgcmVzZXJ2YXRpb25zLiBMYXJnZSBhbGxvY2F0aW9ucyBhcmUgb2Z0ZW4gaW5kaWNhdGl2ZSBvZiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBzdHJ1Y3R1cmUgKGFuIGlub2RlIHBlcmhhcHMpIG9yIHRlbXBvcmFyeSBidWZmZXIuIFNtYWxsIGFsbG9jYXRpb25zIG1pZ2h0IGJlIGZvciBjb250cm9sIHN0cnVjdHVyZXMuIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGNhbGxzIHdpbGwgYmUgaW1wb3J0YW50LiBGcmVxdWVudCByZXNlcnZhdGlvbnMsIGV2ZW4gc21hbGwgb25lcywgY291bGQgc2lnbmFsIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4KCkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHJlc2VydmF0aW9ucyBhcmUgaGFwcGVuaW5nIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHRydWx5IG5lY2Vzc2FyeS4gSXMgdGhpcyBhIHByZWVtcHRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgcGVyZm9ybWFuY2UsIG9yIGEgd29ya2Fyb3VuZCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IEFyZSB0aGV5IGd1YXJkaW5nIGFnYWluc3QgYSBrbm93biBwb3RlbnRpYWwgRG9TIHZlY3Rvcj8gT2Z0ZW4sIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBpbXBsZW1lbnQgdGhlIHJlcXVpcmVtZW50LCBJJiMzOTttIHN1cmUgSSYjMzk7ZCBmaW5kIGl0LgoKVWx0aW1hdGVseSwgSSYjMzk7bSBkaWdnaW5nIGZvciBpbmVmZmljaWVuY2llcywgcG90ZW50aWFsIGJ1Z3MsIG9yIGRlc2lnbiBmbGF3cyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIHRvIG9wdGltaXplLCByZWZhY3Rvciwgb3IgcGVyaGFwcyBldmVuIHJld3JpdGUgdGhlc2UgYXJlYXMgdG8gdXNlIG1vcmUgbW9kZXJuIGtlcm5lbCBtZWNoYW5pc21zLCByZWR1Y2luZyBvdmVyaGVhZCBhbmQgaW1wcm92aW5nIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlc2UgdXNlcyBhcmUgbGVnaXRpbWF0ZSBvciBhcmUgaGlkaW5nIGEgbGFyZ2VyIGlzc3VlIHRoYXQgd2lsbCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttYWxsb2NfcmVzZXJ2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTU5MT1zdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYwMi0vKlxubmV0L2NvcmUvc2tidWZmLmM6NjAzOiAqIGttYWxsb2NfcmVzZXJ2ZSBpcyBhIHdyYXBwZXIgYXJvdW5kIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIgdGhhdCB0ZWxsc1xubmV0L2NvcmUvc2tidWZmLmMtNjA0LSAqIHRoZSBjYWxsZXIgaWYgZW1lcmdlbmN5IHBmbWVtYWxsb2MgcmVzZXJ2ZXMgYXJlIGJlaW5nIHVzZWQuIElmIGl0IGlzIGFuZFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYwOC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjYwOTpzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxubmV0L2NvcmUvc2tidWZmLmMtNjEwLVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02Nzc9c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTctXHQgKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjcxODpcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIG5vZGUsIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MTktXHRpZiAodW5saWtlbHkoIWRhdGEpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyOTE9aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjMwOC1cbm5ldC9jb3JlL3NrYnVmZi5jOjIzMDk6XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtMjMxMC1cdGlmICghZGF0YSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02ODEzPXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjgyMy1cbm5ldC9jb3JlL3NrYnVmZi5jOjY4MjQ6XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtNjgyNS1cdGlmICghZGF0YSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02OTM0PXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjk0NS1cbm5ldC9jb3JlL3NrYnVmZi5jOjY5NDY6XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtNjk0Ny1cdGlmICghZGF0YSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzY2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdHdlYWtpbmcgaG93IGBza2JgIGRhdGEgbWVtb3J5IGlzIGFsbG9jYXRlZCwgc3BlY2lmaWNhbGx5IHN3aXRjaGluZyBpdCBvdmVyIHRvIHVzZSBhIGRlZGljYXRlZCBga21lbWAgYnVja2V0LiBGdW5jdGlvbmFsbHksIHRoaXMgKmlzKiBhIGNoYW5nZSDigJMgd2UmIzM5O3JlIGFsdGVyaW5nIHRoZSBhbGxvY2F0b3IgaXRzZWxmLCBub3QganVzdCBzdGlja2luZyB3aXRoIHRoZSBnZW5lcmFsIGBrbWFsbG9jYCBtZXRob2QuIEJ1dCwgaXQgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IGFsbG9jYXRpb24gZGV0YWlsLiBJdCBkb2VzbiYjMzk7dCBhY3R1YWxseSB0b3VjaCBhbnkgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgbG9naWMuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0ICpkb24mIzM5O3QqIGFsdGVyIGV4ZWN1dGlvbi4gRG9lcyB0aGlzIGNvdW50PyBJdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGFsbG9jYXRvciBmdW5jdGlvbiBiZWluZyBjYWxsZWQuCgpXYWl0LCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludDogdGhpcyBpcyBhIHNlY3VyaXR5IG1pdGlnYXRpb24uIGBrbWVtX2J1Y2tldHNgIGFyZSB1c2VkIGZvciBoZWFwIGlzb2xhdGlvbiwgc28gdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHdheSB3ZSBhcHByb2FjaCBmdXp6aW5nIHRoaXMgY29kZS4gSXQgcHJvYmFibHkgd29u4oCZdCBiZSB0aGF0IGZydWl0ZnVsIGZvciBnZW5lcmFsIGZ1enppbmcuIFVubGVzcyB3ZSYjMzk7cmUgc3BlY2lmaWNhbGx5IGh1bnRpbmcgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB0aGlzIG5ldyBhbGxvY2F0aW9uIG1ldGhvZCBtaWdodCBub3cgbWl0aWdhdGUgb3IgY2F1c2UgdG8gYmVoYXZlIGRpZmZlcmVudGx5LgoKTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgcmVsYXRlZCBjb25maWdzLiBDb3VsZCBgQ09ORklHX1NMQUJfQlVDS0VUU2AgYmUgaW52b2x2ZWQgaGVyZT8gSSYjMzk7bGwgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2J1Y2tldHNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTg2OT12b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqcCk7XG5pbmNsdWRlL2xpbnV4L3NsYWIuaC04NzAtXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4NzE6a21lbV9idWNrZXRzICprbWVtX2J1Y2tldHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg3Mi1cdFx0XHRcdCAgdW5zaWduZWQgaW50IHVzZXJvZmZzZXQsIHVuc2lnbmVkIGludCB1c2Vyc2l6ZSxcbi0tXG5pcGMvbXNndXRpbC5jPTQ0PXN0YXRpYyBpbnQgX19pbml0IGluaXRfbXNnX2J1Y2tldHModm9pZClcbmlwYy9tc2d1dGlsLmMtNDUte1xuaXBjL21zZ3V0aWwuYzo0NjpcdG1zZ19idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcJiMzNDttc2dfbXNnXCYjMzQ7LCBTTEFCX0FDQ09VTlQsXG5pcGMvbXNndXRpbC5jLTQ3LVx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgbXNnX21zZyksXG4tLVxubW0vc2xhYl9jb21tb24uYz00MDQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2J1Y2tldHNfY2FjaGUgX19yb19hZnRlcl9pbml0O1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDA2LS8qKlxubW0vc2xhYl9jb21tb24uYzo0MDc6ICoga21lbV9idWNrZXRzX2NyZWF0ZSAtIENyZWF0ZSBhIHNldCBvZiBjYWNoZXMgdGhhdCBoYW5kbGUgZHluYW1pYyBzaXplZFxubW0vc2xhYl9jb21tb24uYy00MDgtICpcdFx0XHQgYWxsb2NhdGlvbnMgdmlhIGttZW1fYnVja2V0c19hbGxvYygpXG4tLVxubW0vc2xhYl9jb21tb24uYy00MjQtICovXG5tbS9zbGFiX2NvbW1vbi5jOjQyNTprbWVtX2J1Y2tldHMgKmttZW1fYnVja2V0c19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc2xhYl9mbGFnc190IGZsYWdzLFxubW0vc2xhYl9jb21tb24uYy00MjYtXHRcdFx0XHQgIHVuc2lnbmVkIGludCB1c2Vyb2Zmc2V0LFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNTAyLX1cbm1tL3NsYWJfY29tbW9uLmM6NTAzOkVYUE9SVF9TWU1CT0woa21lbV9idWNrZXRzX2NyZWF0ZSk7XG5tbS9zbGFiX2NvbW1vbi5jLTUwNC1cbi0tXG5tbS91dGlsLmM9MjAwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfdXNlcl9idWNrZXRzKHZvaWQpXG5tbS91dGlsLmMtMjAxLXtcbm1tL3V0aWwuYzoyMDI6XHR1c2VyX2J1Y2tldHMgPSBrbWVtX2J1Y2tldHNfY3JlYXRlKFwmIzM0O21lbWR1cF91c2VyXCYjMzQ7LCAwLCAwLCBJTlRfTUFYLCBOVUxMKTtcbm1tL3V0aWwuYy0yMDMtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTE5Mz12b2lkIF9faW5pdCBza2JfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUyMjAtXHRcdFx0XHRcdFx0TlVMTCk7XG5uZXQvY29yZS9za2J1ZmYuYzo1MjIxOlx0c2tiX2RhdGFfYnVja2V0cyA9IGttZW1fYnVja2V0c19jcmVhdGUoXCYjMzQ7c2tiX2RhdGFcJiMzNDssIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtNTIyMi1cdHNrYl9leHRlbnNpb25zX2luaXQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBrbWVtX2J1Y2tldHNfY3JlYXRlYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGttZW1fYnVja2V0c19jcmVhdGVgIGZ1bmN0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGtub2IsIHNvbWV0aGluZyBJIG1pZ2h0IGJlIGFibGUgdG8gdHdlYWssIHRoYXQgZGlyZWN0bHkgY29udHJvbHMgaXRzIGJlaGF2aW9yIG9yIHBhcmFtZXRlcnMuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBzbyBmaW5kaW5nIHRoZSByaWdodCBjb25maWcgd291bGQgZ2l2ZSBtZSBzZXJpb3VzIGNvbnRyb2wgb3ZlciBpdHMgcGVyZm9ybWFuY2UuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYnVja2V0IHNpemVzLCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBvdmVyYWxsIG1lbW9yeSBsaW1pdHMg4oCTIHRoaW5ncyBJJiMzOTt2ZSB0d2Vha2VkIGJlZm9yZSB3aXRoIG90aGVyIG1lbW9yeSBhbGxvY2F0b3JzLiBTbywgSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgdGhlIGxvdy1oYW5naW5nIGZydWl0IHdoZW4gaXQgY29tZXMgdG8gaW5mbHVlbmNpbmcgaG93IGBrbWVtX2J1Y2tldHNfY3JlYXRlYCBvcGVyYXRlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgaW4gdGhlIGtlcm5lbCBjb25maWcgdGhhdCBJIGNhbiBtb2RpZnkgd2l0aG91dCB0b28gbXVjaCByaXNrPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2J1Y2tldHNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQwNi0vKipcbm1tL3NsYWJfY29tbW9uLmM6NDA3OiAqIGttZW1fYnVja2V0c19jcmVhdGUgLSBDcmVhdGUgYSBzZXQgb2YgY2FjaGVzIHRoYXQgaGFuZGxlIGR5bmFtaWMgc2l6ZWRcbm1tL3NsYWJfY29tbW9uLmMtNDA4LSAqXHRcdFx0IGFsbG9jYXRpb25zIHZpYSBrbWVtX2J1Y2tldHNfYWxsb2MoKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDI0LSAqL1xubW0vc2xhYl9jb21tb24uYzo0MjU6a21lbV9idWNrZXRzICprbWVtX2J1Y2tldHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcbm1tL3NsYWJfY29tbW9uLmMtNDI2LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgdXNlcm9mZnNldCxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTUwMi19XG5tbS9zbGFiX2NvbW1vbi5jOjUwMzpFWFBPUlRfU1lNQk9MKGttZW1fYnVja2V0c19jcmVhdGUpO1xubW0vc2xhYl9jb21tb24uYy01MDQtXG4tLVxubW0vdXRpbC5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3VzZXJfYnVja2V0cyh2b2lkKVxubW0vdXRpbC5jLTIwMS17XG5tbS91dGlsLmM6MjAyOlx0dXNlcl9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcJiMzNDttZW1kdXBfdXNlclwmIzM0OywgMCwgMCwgSU5UX01BWCwgTlVMTCk7XG5tbS91dGlsLmMtMjAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDkwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6CgoqKkNoZWNraW5nIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBga21lbV9idWNrZXRzX2NyZWF0ZWAgaXMgY29uZGl0aW9uYWwgb24gYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgbWUgdHJvdWJsZXNob290IHBvdGVudGlhbCBpc3N1ZXMsIHVuZGVyc3RhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBtYXliZSBldmVuIG9wdGltaXplIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TTEFCX0JVQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTEwMT1DT05GSUdfWlNNQUxMT0NfU1RBVD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTAyOkNPTkZJR19TTEFCX0JVQ0tFVFM9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTEwMy1DT05GSUdfU0xVQl9TVEFUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTk1PUNPTkZJR19aU01BTExPQ19TVEFUPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo5NjpDT05GSUdfU0xBQl9CVUNLRVRTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy05Ny0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD05MTI9dW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxNS0gKiBUaGVzZSBtYWNyb3MgYWxsb3cgZGVjbGFyaW5nIGEga21lbV9idWNrZXRzICogcGFyYW1ldGVyIGFsb25nc2lkZSBzaXplLCB3aGljaFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE2OiAqIGNhbiBiZSBjb21waWxlZCBvdXQgd2l0aCBDT05GSUdfU0xBQl9CVUNLRVRTPW4gc28gdGhhdCBhIGxhcmdlIG51bWJlciBvZiBjYWxsXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MTctICogc2l0ZXMgZG9uJiMzOTt0IGhhdmUgdG8gcGFzcyBOVUxMLlxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTE4LSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE5OiNpZmRlZiBDT05GSUdfU0xBQl9CVUNLRVRTXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MjAtI2RlZmluZSBERUNMX0JVQ0tFVF9QQVJBTVMoX3NpemUsIF9iKVx0c2l6ZV90IChfc2l6ZSksIGttZW1fYnVja2V0cyAqKF9iKVxuLS1cbmtlcm5lbC9jb25maWdzL2hhcmRlbmluZy5jb25maWc9MjI9Q09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORUQ9eVxua2VybmVsL2NvbmZpZ3MvaGFyZGVuaW5nLmNvbmZpZzoyMzpDT05GSUdfU0xBQl9CVUNLRVRTPXlcbmtlcm5lbC9jb25maWdzL2hhcmRlbmluZy5jb25maWctMjQtQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1I9eVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQyMC0gKiBSZXR1cm46IGEgcG9pbnRlciB0byB0aGUgY2FjaGUgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLiBXaGVuXG5tbS9zbGFiX2NvbW1vbi5jOjQyMTogKiBDT05GSUdfU0xBQl9CVUNLRVRTIGlzIG5vdCBlbmFibGVkLCBaRVJPX1NJWkVfUFRSIGlzIHJldHVybmVkLCBhbmRcbm1tL3NsYWJfY29tbW9uLmMtNDIyLSAqIHN1YnNlcXVlbnQgY2FsbHMgdG8ga21lbV9idWNrZXRzX2FsbG9jKCkgd2lsbCBmYWxsIGJhY2sgdG8ga21hbGxvYygpLlxuLS1cbm1tL3NsYWJfY29tbW9uLmM9NDI1PWttZW1fYnVja2V0cyAqa21lbV9idWNrZXRzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXG4tLVxubW0vc2xhYl9jb21tb24uYy00NDAtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6NDQxOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTEFCX0JVQ0tFVFMpKVxubW0vc2xhYl9jb21tb24uYy00NDItXHRcdHJldHVybiBaRVJPX1NJWkVfUFRSO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9OTk0PXZvaWQgX19pbml0IGNyZWF0ZV9rbWFsbG9jX2NhY2hlcyh2b2lkKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTAxOS1cbm1tL3NsYWJfY29tbW9uLmM6MTAyMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTEFCX0JVQ0tFVFMpKVxubW0vc2xhYl9jb21tb24uYy0xMDIxLVx0XHRrbWVtX2J1Y2tldHNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtrbWFsbG9jX2J1Y2tldHNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgQ09ORklHX1NMQUJfQlVDS0VUU2AgSW1wYWN0IG9uIE5ldHdvcmtpbmcqKgoKT2theSwgc28gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIGBrbWVtX2J1Y2tldHNfY3JlYXRlYCByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYCwgYW5kIGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIHJldmVydHMgdG8gYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLiBUbyB0ZXN0IHRoZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyBlbmFibGVkIGR1cmluZyB0ZXN0aW5nLgoKTm93LCBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCBpcyB1c2VkIGJ5IGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCwgYm90aCBvZiB3aGljaCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGZpbmQgdGhlIGV4cG9ydGVkIG9yIGdsb2JhbCBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBjYWxsIHRoZXNlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZSBgX19hbGxvY19za2JgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgLCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zLiBHaXZlbiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgZnV6emluZyBzZWVtcyBsaWtlIGEgdmFsaWQgYXBwcm9hY2ggdG8gc3RyZXNzLXRlc3QgaXQuCgpGb2N1c2luZyBvbiBzcGVjaWZpYyBzeW1ib2xzIGZvciBmdXp6aW5nLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBfX2FsbG9jX3NrYmAgYW5kIGBwc2tiX2V4cGFuZF9oZWFkYC4gSG93ZXZlciwgYF9fYWxsb2Nfc2tiYCBpcyBhICp2ZXJ5KiBob3QtcGF0aCBmdW5jdGlvbiwgYW5kIHRoZSBkaXJlY3Rpb25zIHN1Z2dlc3QgYXZvaWRpbmcgdGhvc2UuIGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbHNvIHF1aXRlIGNvbW1vbi4gTWF5YmUgSSBzaG91bGQgaG9sZCBvZmYgb24gbGlzdGluZyBhbnkgaWYgdGhleSBhcmUgYWxsIGhvdCBwYXRocz8gTGV0JiMzOTtzIHNlZSBpZiB0aGUgb3RoZXIgdHdvIGFyZSBsZXNzIGNvbW1vbi4KCmBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYCBzZWVtIGxlc3MgZnJlcXVlbnRseSBjYWxsZWQuIEkgc2hvdWxkIGxvb2sgaW50byB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02ODEwPUVYUE9SVF9TWU1CT0woYWxsb2Nfc2tiX3dpdGhfZnJhZ3MpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXHUwMDNjIGhlYWRsZW4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4MTM6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXHRcdFx0XHQgICAgY29uc3QgaW50IGhlYWRsZW4sIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDIyLVx0aWYgKGxlbiBcdTAwM2MgaGVhZGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMjM6XHRcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MDI0LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqUG90ZW50aWFsIERhdGEgQ2FydmluZyBGdW5jdGlvbnMgYW5kIFRoZWlyIENhbGxlcnMqKgoKSG1tLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgZGF0YSBpcyBoYW5kbGVkIHdoZW4gYSBwYWNrZXQgaXMgY29waWVkIG9uIHdyaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IEkgYmVsaWV2ZSBgcHNrYl9jYXJ2ZWAgbWlnaHQgYmUgaW52b2tlZCBieSBgc2tiX2Nvd19kYXRhYCB3aGVuIGEgcGFja2V0IG5lZWRzIGl0cyBkYXRhIGNhcnZlZCBvciBtYXliZSBpdCYjMzk7cyBgcHNrYl9leHRyYWN0YCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBmdW5jdGlvbiBjYWxscyBmb3IgdGhlIENvcHktT24tV3JpdGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bza2JfY2FydmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02ODEwPUVYUE9SVF9TWU1CT0woYWxsb2Nfc2tiX3dpdGhfZnJhZ3MpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXHUwMDNjIGhlYWRsZW4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4MTM6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXHRcdFx0XHQgICAgY29uc3QgaW50IGhlYWRsZW4sIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzUtXG5uZXQvY29yZS9za2J1ZmYuYzo2ODc2OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLCBnZnBfdCBnZnApO1xubmV0L2NvcmUvc2tidWZmLmMtNjg3Ny1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzgtLyogY2FydmUgb3V0IHRoZSBmaXJzdCBlYXQgYnl0ZXMgZnJvbSBza2ImIzM5O3MgZnJhZ19saXN0LiBNYXkgcmVjdXJzZSBpbnRvXG5uZXQvY29yZS9za2J1ZmYuYzo2ODc5OiAqIHBza2JfY2FydmUoKVxubmV0L2NvcmUvc2tidWZmLmMtNjg4MC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4ODE6c3RhdGljIGludCBwc2tiX2NhcnZlX2ZyYWdfbGlzdChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8sIGludCBlYXQsXG5uZXQvY29yZS9za2J1ZmYuYy02ODgyLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjkwOS1cdFx0XHR9XG5uZXQvY29yZS9za2J1ZmYuYzo2OTEwOlx0XHRcdGlmIChwc2tiX2NhcnZlKGxpc3QsIGVhdCwgZ2ZwX21hc2spIFx1MDAzYyAwKSB7XG5uZXQvY29yZS9za2J1ZmYuYy02OTExLVx0XHRcdFx0a2ZyZWVfc2tiKGNsb25lKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02OTMzLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjkzNDpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNjkzNS1cdFx0XHRcdCAgICAgICBpbnQgcG9zLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02OTkwLVx0Lyogc3BsaXQgbGluZSBpcyBpbiBmcmFnIGxpc3QgKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY5OTE6XHRpZiAoayA9PSAwIFx1MDAyNlx1MDAyNiBwc2tiX2NhcnZlX2ZyYWdfbGlzdChzaGluZm8sIG9mZiAtIHBvcywgZ2ZwX21hc2spKSB7XG5uZXQvY29yZS9za2J1ZmYuYy02OTkyLVx0XHQvKiBza2JfZnJhZ191bnJlZigpIGlzIG5vdCBuZWVkZWQgaGVyZSBhcyBzaGluZm8tXHUwMDNlbnJfZnJhZ3MgPSAwLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMTctLyogcmVtb3ZlIGxlbiBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNrYiAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzAxODpzdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxubmV0L2NvcmUvc2tidWZmLmMtNzAxOS17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzAyMi1cdGlmIChsZW4gXHUwMDNjIGhlYWRsZW4pXG5uZXQvY29yZS9za2J1ZmYuYzo3MDIzOlx0XHRyZXR1cm4gcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHNrYiwgbGVuLCBoZWFkbGVuLCBnZnApO1xubmV0L2NvcmUvc2tidWZmLmMtNzAyNC1cdGVsc2Vcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMjU6XHRcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MDI2LX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDMxPXN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDM4LVxubmV0L2NvcmUvc2tidWZmLmM6NzAzOTpcdGlmIChwc2tiX2NhcnZlKGNsb25lLCBvZmYsIGdmcCkgXHUwMDNjIDAgfHxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDAtXHQgICAgcHNrYl90cmltKGNsb25lLCB0b19jb3B5KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjkzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgU3RhY2s6IEEgUmVjdXJzaXZlIERpdmUqKgoKT2theSwgc28gYHBza2JfZXh0cmFjdGAgaXMgY2FsbGluZyBpdHNlbGYuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IHRoZSByZWN1cnNpb24/JiMzNDsgSXMgdGhpcyBpbnRlbnRpb25hbCwgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIG9yIGEgcG90ZW50aWFsIGJ1ZyB0aGF0JiMzOTtzIGNyZWF0aW5nIGFuIGluZmluaXRlIGxvb3A/IEdpdmVuIHRoYXQgYHBza2JfZXh0cmFjdGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGl0c2VsZiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHRyYWNlIGl0IGFuZCBkZXRlcm1pbmUgd2hlcmUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlIOKAkyBJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYHBza2JfZXh0cmFjdGAgaXMgYmVpbmcgY2FsbGVkIGluIHRoZSBjb2RlYmFzZSB0byBwcm9wZXJseSBhbmFseXplIHRoaXMgYW5kLCBwZXJoYXBzLCByZWZpbmUgdGhpcyBjcml0aWNhbCBmdW5jdGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGNvZGUsIGdpdmVuIHRoZSBjYWxsIHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2V4dHJhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPWludCBza2JfbXBsc19kZWNfdHRsKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk0OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IHRvX2NvcHksXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyOTUtXHRcdFx0ICAgICBnZnBfdCBnZnApO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDMwLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzAzMTpzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9leHRyYWN0KHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsXG5uZXQvY29yZS9za2J1ZmYuYy03MDMyLVx0XHRcdCAgICAgaW50IHRvX2NvcHksIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcwNDY6RVhQT1JUX1NZTUJPTChwc2tiX2V4dHJhY3QpO1xubmV0L2NvcmUvc2tidWZmLmMtNzA0Ny1cbi0tXG5uZXQvcmRzL3RjcF9yZWN2LmM9MTU1PXN0YXRpYyBpbnQgcmRzX3RjcF9kYXRhX3JlY3YocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jLTIxOC1cbm5ldC9yZHMvdGNwX3JlY3YuYzoyMTk6XHRcdFx0Y2xvbmUgPSBwc2tiX2V4dHJhY3Qoc2tiLCBvZmZzZXQsIHRvX2NvcHksIGFyZy1cdTAwM2VnZnApO1xubmV0L3Jkcy90Y3BfcmVjdi5jLTIyMC1cdFx0XHRpZiAoIWNsb25lKSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTUzMj1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYwLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU2MTogKiBpcHRmc19wc2tiX2V4dHJhY3Rfc2VxKCkgLSBDcmVhdGUgYW5kIGxvYWQgZGF0YSBpbnRvIGEgbmV3IHNrX2J1ZmYuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYyLSAqIEBza2JsZW46IHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIGBza2JgLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NzY9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Nzc6aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTc4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTQyPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzMC1cdFx0XHRcdFx0XHRcdCBza2JzZXEsIGlwaGxlbikpKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTEzMTpcdFx0XHRcdHNrYiA9IGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoaXBsZW4sIHNrYnNlcSwgZGF0YSwgY2FwdHVyZWxlbik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzMi1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTS0IgQWxsb2NhdGlvbiBQb2ludHMgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgZnV6emluZyBlZmZvcnRzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCBjaGFuZ2luZyB0aGUgU0tCIGRhdGEgYWxsb2NhdG9yLiBJbml0aWFsbHksIEkgd2FzIGNvbnNpZGVyaW5nIGBwc2tiX2V4dHJhY3RgLCBzaW5jZSBpdCYjMzk7cyB1c2VkIGluIFJEUyBhbmQgWEZSTSwgYW5kIEkga25vdyBpdCBsZXZlcmFnZXMgYHBza2JfY2FydmVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBrbWFsbG9jX3Jlc2VydmVgLiBBbHNvLCBJJiMzOTtkIG5vdGVkIHRoYXQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgIGFyZSBhbHNvIGluIHBsYXkgaGVyZS4KClRoZW4sIEkgd2FzIGNvbnNpZGVyaW5nIGBwc2tiX2V4cGFuZF9oZWFkYCwgYmVjYXVzZSB0aGF0IGFuZCBgX19hbGxvY19za2JgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIFNLQiBhbGxvY2F0aW9uLCBhbmQgdGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBfX2FsbG9jX3NrYmAgYXJlIGxpa2VseSB0byBiZSBob3Qgc3BvdHMuIEJ1dCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IHRoZSBzY29wZSBvZiB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgdGhlIGFsbG9jYXRpb24gY2hhbmdlIHdpbGwgYmUgaGl0IGJ5ICphbnkqIFNLQiBhbGxvY2F0aW9uLiBTbywgdGFyZ2V0aW5nIHNwZWNpZmljIG9ic2N1cmUgZnVuY3Rpb25zIG1pZ2h0IGJlIGxlc3MgaW1wb3J0YW50IHRoYW4ganVzdCBlbnN1cmluZyBnZW5lcmFsIFNLQiBhbGxvY2F0aW9uIGhhcHBlbnMgZHVyaW5nIHRlc3RpbmcuCgpCdXQsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBMaXN0aW5nIGBfX2FsbG9jX3NrYmAgd291bGQgZGVmaW5pdGVseSBza2V3IHRoaW5ncywgc28gSSBzaG91bGQgb21pdCB0aGF0LgoKT2theSwgbGV0JiMzOTtzIHJldmlzaXQgYHBza2JfZXhwYW5kX2hlYWRgLiBJdCYjMzk7cyBsZXNzIGhvdCB0aGFuIGBfX2FsbG9jX3NrYmAsIGJ1dCBzdGlsbCB1c2VkIGEgbG90LiBUaGVuIHRoZXJlJiMzOTtzIGBwc2tiX2V4dHJhY3RgLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCBhIGhvdCBmdW5jdGlvbi4gSXQgYWxzbyBjYWxscyBga21hbGxvY19yZXNlcnZlYC4gSSBjb3VsZCBmdXp6IHRob3NlLiBHaXZlbiB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9ucywgSSB0aGluayB0aGF0IGxpc3RpbmcgYHBza2JfZXh0cmFjdGAgYW5kIGBwc2tiX2V4cGFuZF9oZWFkYCB3aWxsIHByb3ZpZGUgYSBnb29kIGJhbGFuY2Ugb2YgY292ZXJhZ2Ugd2l0aG91dCBvdmVyLWVtcGhhc2l6aW5nIHRoZSBtb3N0IGNvbW1vbiBhbGxvY2F0aW9uIHBhdGhzLiBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIGJlc3Qgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX3BmbWVtYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz01ODk9c3RhdGljIGttZW1fYnVja2V0cyAqc2tiX2RhdGFfYnVja2V0cyBfX3JvX2FmdGVyX2luaXQ7XG5uZXQvY29yZS9za2J1ZmYuYy01OTAtXG5uZXQvY29yZS9za2J1ZmYuYzo1OTE6c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbm5ldC9jb3JlL3NrYnVmZi5jLTU5Mi17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjI2LVx0XHRcdHNrYi1cdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcbm5ldC9jb3JlL3NrYnVmZi5jOjYyNzpcdFx0cmV0dXJuIGttYWxsb2NfcGZtZW1hbGxvYygwLCBmbGFncywgbm9kZSk7XG5uZXQvY29yZS9za2J1ZmYuYy02MjgtXHR9XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQ4LVx0XHRza2ItXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XG5uZXQvY29yZS9za2J1ZmYuYzo2NDk6XHRvYmogPSBrbWFsbG9jX3BmbWVtYWxsb2Mob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTY1MC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBga21hbGxvY19yZXNlcnZlYCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFJpZ2h0LCBhbmQgYGttYWxsb2NfcmVzZXJ2ZWAgaXMgaW52b2tlZCBieSBgX19hbGxvY19za2JgLCBhbmQgdGhlbiBieSBhIGNsdXN0ZXIgb2YgcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgcHNrYl9leHBhbmRfaGVhZGAsIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgLCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAuICBUaGVyZWZvcmUsIGlmIEkmIzM5O20gdHJ5aW5nIHRvIG5hcnJvdyBkb3duIGludGVyZXN0aW5nIHN5bWJvbHMsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHBza2JfZXh0cmFjdGAgKGJlY2F1c2UgaXQgY2FsbHMgYHBza2JfY2FydmVgKSwgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYCBzZWVtIHRvIGJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLgoKSG1tLCBidXQgd2FpdC4gYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgIGFyZSAqc3RhdGljKiBmdW5jdGlvbnMuICBEb2VzIHRoYXQgcG9zZSBhIHByb2JsZW0gZm9yIGZ1enppbmc/ICBDYW4gd2UgaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0PyAgWWVzLCBzeXprYWxsZXIgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgaXQgc2hvdWxkIGJlIGZpbmUuIFRoYXQmIzM5O3MgZ29vZC4KClNvIHRoZW4sIGBwc2tiX2V4dHJhY3RgIGFuZCBgcHNrYl9leHBhbmRfaGVhZGAgYXJlIGV4cG9ydGVkIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBsaXN0aW5nLiAgTGV0JiMzOTtzIGFkZCB0aG9zZSB0byB0aGUgbGlzdC4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zPyBgQ09ORklHX1NMQUJfQlVDS0VUU2Agc2VlbXMgcmVsZXZhbnQgaGVyZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHRvIGV2ZW4gZXhpc3QuIFllcCwgdGhhdCYjMzk7cyByZXF1aXJlZC4gIEdvb2QsIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLiAgQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSBkZXBlbmRlbmNpZXM/IE5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdC4gIExldCYjMzk7cyBjaGVjayB3aGF0IGBDT05GSUdfU0xBQl9CVUNLRVRTYCBkZXBlbmRzIG9uLCB0byBzZWUgaWYgd2UgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0xBQl9CVUNLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG4tLVxubW0vS2NvbmZpZy0yMjAtXG5tbS9LY29uZmlnOjIyMTpjb25maWcgU0xBQl9CVUNLRVRTXG5tbS9LY29uZmlnLTIyMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBTTEFCX0JVQ0tFVFMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIHNvbWV0aGluZywgYW5kIHRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWZ0ZXIgYFNMQUJfQlVDS0VUU2AuIEl0JiMzOTtzIGEga2V5IHZhcmlhYmxlIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLiBXaGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgaXRzIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBTTEFCIGFsbG9jYXRvciBhcmNoaXRlY3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFx0aGVscFxuIDIxNjpcdFx0ICBNYW55IGtlcm5lbCBoZWFwIGF0dGFja3MgdHJ5IHRvIHRhcmdldCBzbGFiIGNhY2hlIG1ldGFkYXRhIGFuZFxuIDIxNzpcdFx0ICBvdGhlciBpbmZyYXN0cnVjdHVyZS4gVGhpcyBvcHRpb25zIG1ha2VzIG1pbm9yIHBlcmZvcm1hbmNlXG4gMjE4Olx0XHQgIHNhY3JpZmljZXMgdG8gaGFyZGVuIHRoZSBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgYWdhaW5zdCBjb21tb25cbiAyMTk6XHRcdCAgZnJlZWxpc3QgZXhwbG9pdCBtZXRob2RzLlxuIDIyMDpcdFxuIDIyMTpcdGNvbmZpZyBTTEFCX0JVQ0tFVFNcbiAyMjI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG4gMjIzOlx0XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbiAyMjQ6XHRcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxuIDIyNTpcdFx0aGVscFxuIDIyNjpcdFx0ICBLZXJuZWwgaGVhcCBhdHRhY2tzIGZyZXF1ZW50bHkgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gY3JlYXRlXG4gMjI3Olx0XHQgIHNwZWNpZmljYWxseS1zaXplZCBhbGxvY2F0aW9ucyB3aXRoIHVzZXItY29udHJvbGxlZCBjb250ZW50c1xuIDIyODpcdFx0ICB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGludG8gdGhlIHNhbWUga21hbGxvYyBidWNrZXQgYXMgYVxuIDIyOTpcdFx0ICB0YXJnZXQgb2JqZWN0LiBUbyBhdm9pZCBzaGFyaW5nIHRoZXNlIGFsbG9jYXRpb24gYnVja2V0cyxcbiAyMzA6XHRcdCAgcHJvdmlkZSBhbiBleHBsaWNpdGx5IHNlcGFyYXRlZCBzZXQgb2YgYnVja2V0cyB0byBiZSB1c2VkIGZvclxuIDIzMTpcdFx0ICB1c2VyLWNvbnRyb2xsZWQgYWxsb2NhdGlvbnMuIFRoaXMgbWF5IHZlcnkgc2xpZ2h0bHkgaW5jcmVhc2VcbiAyMzI6XHRcdCAgbWVtb3J5IGZyYWdtZW50YXRpb24sIHRob3VnaCBpbiBwcmFjdGljZSBpdCYjMzk7cyBvbmx5IGEgaGFuZGZ1bFxuIDIzMzpcdFx0ICBvZiBleHRyYSBwYWdlcyBzaW5jZSB0aGUgYnVsayBvZiB1c2VyLWNvbnRyb2xsZWQgYWxsb2NhdGlvbnNcbiAyMzQ6XHRcdCAgYXJlIHJlbGF0aXZlbHkgbG9uZy1saXZlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogRnV6emluZyB0aGUgU0tCIERhdGEgQWxsb2NhdG9yIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIGAhU0xVQl9USU5ZYCwgbWVhbmluZyB3ZSBuZWVkIGBTTEFCX0JVQ0tFVFNgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhpcyBuZXcgY29kZSBwYXRoIHdoZXJlIHRoZSBjaGFuZ2UgZnJvbSBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaXMgbWFkZSB0byB1c2luZyBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCwgYW5kIHRoZXJlZm9yZSBga21lbV9idWNrZXRzX2NyZWF0ZWAuIElmIGBTTEFCX0JVQ0tFVFNgIGlzbiYjMzk7dCBzZXQsIHRoZW4gYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgc2ltcGx5IGZhbGxzIGJhY2sgdG8gYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLCBzbyBlbmFibGluZyBgU0xBQl9CVUNLRVRTYCBpcyBjcml0aWNhbCBmb3IgdGVzdGluZyB0aGUgcGF0Y2guIEl0JiMzOTtzIGFsd2F5cyBjb21waWxlZC4KClRoZSBwYXRjaCBpdHNlbGYgaXMgcmVsYXRpdmVseSBzaW1wbGU6IGl0IHN3YXBzIG91dCB0aGUgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIHRoZSBjYWxsIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGZyb20gdGhlIG9sZCBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgY2FsbCB0byB1c2UgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaW5zdGVhZCwgcGFzc2luZyBpbiBgc2tiX2RhdGFfYnVja2V0c2AuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY2hhbmdlIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBTS0IgZGF0YSwgbWVhbmluZyBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nISBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3Igb2YgU0tCIGRhdGEgYnVmZmVycy4gQW55IGJ1Z3MgaW4gdGhpcyAqbmV3KiBhbGxvY2F0b3Igb3IgaXRzIGludGVyYWN0aW9uIHdpdGggU0tCIGFsbG9jYXRpb24gY291bGQgYmUgZXhwb3NlZCB0aHJvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgaG93IGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgU0tCIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSB0aGUgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzLCBsaWtlIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfZXh0cmFjdGAsIGFzIHRoZXkgYXJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB3aGljaCBleGVyY2lzZSB0aGUgZGF0YSBidWZmZXIuIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBpbXBvcnRhbnQgdGhpbmdzIHRvIHJlbWVtYmVyIGFyZToKCiogICBGb2N1cyBzaG91bGQgYmUgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuCiogICBUaGUgZXNzZW50aWFsIGNvbmZpZyBuZWVkZWQgaXMgYFNMQUJfQlVDS0VUU2AuCiogICBUaGUgY2hhbmdlIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9MTA1MT12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1OC1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTk6I2RlZmluZSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoX2IsIF9zaXplLCBfZmxhZ3MsIF9ub2RlKVx0XFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNjAtXHRhbGxvY19ob29rcyhfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJfbm9wcm9mKFBBU1NfS01BTExPQ19QQVJBTVMoX3NpemUsIF9iLCBfX2ttYWxsb2NfdG9rZW4oX3NpemUpKSwgX2ZsYWdzLCBfbm9kZSwgX1JFVF9JUF8pKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNjItI2RlZmluZSBrbWVtX2J1Y2tldHNfYWxsb2NfdHJhY2tfY2FsbGVyKF9iLCBfc2l6ZSwgX2ZsYWdzKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE2MzpcdGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihfYiwgX3NpemUsIF9mbGFncywgTlVNQV9OT19OT0RFKVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE2NC1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01OTE9c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01OTctXHRcdFx0XHRcdCAgICAgZmxhZ3MsIG5vZGUpO1xubmV0L2NvcmUvc2tidWZmLmM6NTk4Olx0cmV0dXJuIGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSxcbm5ldC9jb3JlL3NrYnVmZi5jLTU5OS1cdFx0XHRcdFx0XHQgICAgZmxhZ3MsIG5vZGUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYwOT1zdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYzOS1cdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjQwOlx0b2JqID0ga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNrYl9kYXRhX2J1Y2tldHMsIG9ial9zaXplLFxubmV0L2NvcmUvc2tidWZmLmMtNjQxLVx0XHRcdFx0XHRmbGFncyB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDA2CgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTGFieXJpbnRoIG9mIExpbnV4IE1lbW9yeSBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGlzIGNydWNpYWwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgZGVmaW5lZC4gSG1tLCBJIHZhZ3VlbHkgcmVjYWxsIGl0IGJlaW5nIGEgY29yZSBMaW51eCBjb25zdHJ1Y3QuLi4gWWVzLCBpdCBjbGlja3MhIEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc2xhYi5oYC4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gaGVhZGVyIGZvciB0aGUgc2xhYiBhbGxvY2F0b3IsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBhbG1vc3QgY2VydGFpbmx5IGRlYWxpbmcgd2l0aCBoZXJlLiBPa2F5LCBnb29kLiBIYXZpbmcgdGhlIGxvY2F0aW9uIGhlbHBzIGVub3Jtb3VzbHk7IGl0IGF2b2lkcyB3YXN0aW5nIHRpbWUgY2hhc2luZyBmYWxzZSBsZWFkcy4KCk5vdywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgd291bGQgYmUgdG8gYXBwbHkgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhpcyB0b29sLCBJIGJlbGlldmUsIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgcmVxdWlyZSBmcm9tIHRoZSBoZWFkZXIgZmlsZSwgYW5kIHdpbGwgYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIG91dHB1dCBpbiBhIHdheSB0aGF0IEkgY2FuIGZ1cnRoZXIgYW5hbHlzZS4gSSYjMzk7bGwgdXRpbGl6ZSB0aGlzIHRvIGRldGVybWluZSB0aGUgZnVuY3Rpb25zIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMQUJfQlVDS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgdGhlIHNlcGFyYXRlIGJ1Y2tldCBhbGxvY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTEFCX0JVQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3Bza2JfZXh0cmFjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdG9yIHVzZWQgZm9yIFNLQiBkYXRhIGJ1ZmZlcnMgdG8gdXNlIGEgZGVkaWNhdGVkIGttZW0gYnVja2V0IChgc2tiX2RhdGFfYnVja2V0c2ApIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMga21hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIFNLQiByZWFsbG9jYXRpb24gYW5kIGV4dHJhY3Rpb24gcGF0aHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBhbGxvY2F0aW9uIGJlaGF2aW9yLiBgQ09ORklHX1NMQUJfQlVDS0VUU2AgaXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZW5hYmxlIHRoZSBzZXBhcmF0ZSBidWNrZXQgYWxsb2NhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEyOjQ1LjY4NDE5ODA5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODEyNzYxMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMQUJfQlVDS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaydzIG1lbW9yeSBtYW5hZ2VtZW50LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBTS0IgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvci4gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgc2VwYXJhdGUgYnVja2V0IGFsbG9jYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEyOjQ1LjY4NDIxMTMwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzMzI5NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDcwOWRkYjQ0YjVjODBjOTkwZTEwODk5MzA3NTdhOWE3ZWU1MjQ5YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE5OjEyOjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCAxOGRhYmI0ZTljZmEwZS4uOWRjNWE4NTQ4NjgxMmQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC01ODYsNiArNTg2LDggQEAgc3RydWN0IHNrX2J1ZmYgKm5hcGlfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuYXBpX2J1aWxkX3NrYik7XFxuIFxcbitzdGF0aWMga21lbV9idWNrZXRzICpza2JfZGF0YV9idWNrZXRzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuIHtcXG4gXFx0aWYgKCFnZnBfcGZtZW1hbGxvY19hbGxvd2VkKGZsYWdzKSlcXG5AQCAtNTkzLDcgKzU5NSw4IEBAIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuIFxcdGlmICghb2JqX3NpemUpXFxuIFxcdFxcdHJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUobmV0X2hvdGRhdGEuc2tiX3NtYWxsX2hlYWRfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgZmxhZ3MsIG5vZGUpO1xcbi1cXHRyZXR1cm4ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSwgZmxhZ3MsIG5vZGUpO1xcbitcXHRyZXR1cm4ga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNrYl9kYXRhX2J1Y2tldHMsIG9ial9zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIG5vZGUpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC02MzQsNyArNjM3LDcgQEAgc3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4gXFx0ICogVHJ5IGEgcmVndWxhciBhbGxvY2F0aW9uLCB3aGVuIHRoYXQgZmFpbHMgYW5kIHdlJ3JlIG5vdCBlbnRpdGxlZFxcbiBcXHQgKiB0byB0aGUgcmVzZXJ2ZXMsIGZhaWwuXFxuIFxcdCAqL1xcbi1cXHRvYmogPSBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKG9ial9zaXplLFxcbitcXHRvYmogPSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXFxuIFxcdFxcdFxcdFxcdFxcdGZsYWdzIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTixcXG4gXFx0XFx0XFx0XFx0XFx0bm9kZSk7XFxuIFxcdGlmIChsaWtlbHkob2JqKSlcXG5AQCAtNTIxNSw2ICs1MjE4LDcgQEAgdm9pZCBfX2luaXQgc2tiX2luaXQodm9pZClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0MCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0U0tCX1NNQUxMX0hFQURfSEVBRFJPT00sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbitcXHRza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwic2tiX2RhdGFcXFwiLCBTTEFCX1BBTklDLCAwLCBJTlRfTUFYLCBOVUxMKTtcXG4gXFx0c2tiX2V4dGVuc2lvbnNfaW5pdCgpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo0Ni4zMzg1NzE1MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MTU4Mzc4MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMQUJfQlVDS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaydzIG1lbW9yeSBtYW5hZ2VtZW50LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBTS0IgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvci4gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgc2VwYXJhdGUgYnVja2V0IGFsbG9jYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDcwOWRkYjQ0YjVjODBjOTkwZTEwODk5MzA3NTdhOWE3ZWU1MjQ5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTk6MTI6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCAxOGRhYmI0ZTljZmEwZS4uOWRjNWE4NTQ4NjgxMmQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC01ODYsNiArNTg2LDggQEAgc3RydWN0IHNrX2J1ZmYgKm5hcGlfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmFwaV9idWlsZF9za2IpO1xuIFxuK3N0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xuK1xuIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXG4ge1xuIFx0aWYgKCFnZnBfcGZtZW1hbGxvY19hbGxvd2VkKGZsYWdzKSlcbkBAIC01OTMsNyArNTk1LDggQEAgc3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbiBcdGlmICghb2JqX3NpemUpXG4gXHRcdHJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUobmV0X2hvdGRhdGEuc2tiX3NtYWxsX2hlYWRfY2FjaGUsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MsIG5vZGUpO1xuLVx0cmV0dXJuIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcbitcdHJldHVybiBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXG4rXHRcdFx0XHRcdFx0ICAgIGZsYWdzLCBub2RlKTtcbiB9XG4gXG4gLypcbkBAIC02MzQsNyArNjM3LDcgQEAgc3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbiBcdCAqIFRyeSBhIHJlZ3VsYXIgYWxsb2NhdGlvbiwgd2hlbiB0aGF0IGZhaWxzIGFuZCB3ZSdyZSBub3QgZW50aXRsZWRcbiBcdCAqIHRvIHRoZSByZXNlcnZlcywgZmFpbC5cbiBcdCAqL1xuLVx0b2JqID0ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSxcbitcdG9iaiA9IGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSxcbiBcdFx0XHRcdFx0ZmxhZ3MgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOLFxuIFx0XHRcdFx0XHRub2RlKTtcbiBcdGlmIChsaWtlbHkob2JqKSlcbkBAIC01MjE1LDYgKzUyMTgsNyBAQCB2b2lkIF9faW5pdCBza2JfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHRcdDAsXG4gXHRcdFx0XHRcdFx0U0tCX1NNQUxMX0hFQURfSEVBRFJPT00sXG4gXHRcdFx0XHRcdFx0TlVMTCk7XG4rXHRza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcInNrYl9kYXRhXCIsIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpO1xuIFx0c2tiX2V4dGVuc2lvbnNfaW5pdCgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEyOjQ2LjMzODU3MzY0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzkyNDkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRpbmtlcmluZyB3aXRoIGBuZXQvY29yZS9za2J1ZmYuY2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyBiZWNhdXNlIHdlJ3JlIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGBza2JfZGF0YV9idWNrZXRzYCwgd2hpY2ggaXMgYSBga21lbV9idWNrZXRzICpgLCBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYGttZW1fYnVja2V0c19jcmVhdGVgIHdpdGhpbiBgc2tiX2luaXRgLiBUaGlzIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmQgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgc3RyYXRlZ3kgZm9yIFNLQiBkYXRhLCByZXBsYWNpbmcgdGhlIGdlbmVyaWMgYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIGNhbGxzIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCB3aXRoIGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtZW1vcnkgYWxsb2NhdGlvbiBjaGFuZ2UgaW1wYWN0aW5nIGhvdyB3ZSBoYW5kbGUgU0tCIGRhdGEsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4gQW55IGNoYW5nZSBhdCB0aGlzIGxldmVsIGlzIGEgcG90ZW50aWFsIHZlY3Rvci4gTXkgaW5pdGlhbCBmb2N1cyBnb2VzIHRvIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCDigJMgdGhleSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIFdhaXQsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljISBPa2F5LCBsZXQncyB2ZXJpZnkgdGhhdC4gWWVwLCB0aGV5IGFyZS4gU28sIHdoaWxlIHRoZXkncmUgdGhlIGRpcmVjdCB0YXJnZXRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8ncyBjYWxsaW5nICp0aGVtKi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSB3aGF0J3MgdWx0aW1hdGVseSB0cmlnZ2VyaW5nIHRoZXNlIGFsbG9jYXRpb24gcm91dGluZXMuIFNwZWNpZmljYWxseSwgYF9fYWxsb2Nfc2tiYCwgYGJ1aWxkX3NrYmAsIGV0Yy4sIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIHRoYXQgdWx0aW1hdGVseSBjYWxsIHRoZXNlIHN0YXRpYyBhbGxvY2F0aW9uIHJvdXRpbmVzLiBMZXQncyBzZWUgd2hvIHRoZSBjYWxsZXJzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo1MS44Nzc4MjU3ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNTAxNDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jX3BmbWVtYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTg5PXN0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU5MC1cXG5uZXQvY29yZS9za2J1ZmYuYzo1OTE6c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcXG5uZXQvY29yZS9za2J1ZmYuYy01OTIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MjYtXFx0XFx0XFx0c2tiLVxcdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcXG5uZXQvY29yZS9za2J1ZmYuYzo2Mjc6XFx0XFx0cmV0dXJuIGttYWxsb2NfcGZtZW1hbGxvYygwLCBmbGFncywgbm9kZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjI4LVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OC1cXHRcXHRza2ItXFx1MDAzZXBmbWVtYWxsb2MgPSB0cnVlO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY0OTpcXHRvYmogPSBrbWFsbG9jX3BmbWVtYWxsb2Mob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02NTAtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo1My40ODI4NDQwNzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE4MzQ0NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIG1vbm9sb2d1ZSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgYGttYWxsb2NfcmVzZXJ2ZWAgQ2FsbGVyczogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoZXNlIGBrbWFsbG9jX3Jlc2VydmVgIGNhbGxlcnMuIFRoZSBjb3JlIGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgcmVzb3VyY2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBrZXJuZWwgbWVtb3J5IHNwYWNlLiBga21hbGxvY19yZXNlcnZlYCBpc24ndCBhIGZ1bmN0aW9uIEkgdHlwaWNhbGx5IHNlZSB1c2VkIGluIGV2ZXJ5ZGF5IGNvZGUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIFwid2h5IGhlcmU/XCIgYW5kIFwid2hhdCdzIHRoZSBjb250ZXh0P1wiLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwga2VybmVsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ2llcy4gSXMgdGhpcyBmb3IgaGlnaC1hdmFpbGFiaWxpdHk/IFBlcmhhcHMgaXQgaXMgYSBwcmUtZW1wdGl2ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5P1xuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBncm91cCB0aGVzZSBjYWxsZXJzIGJhc2VkIG9uIHRoZWlyIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBzdWJzeXN0ZW1zIHRoZXkgYmVsb25nIHRvLiBBcmUgd2UgbG9va2luZyBhdCBkcml2ZXIgY29kZSwgbmV0d29yayBzdGFjayBjb21wb25lbnRzLCBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIG1vcmUgZXNvdGVyaWM/IEVhY2ggYXJlYSBnaXZlcyBtZSBhIGRpZmZlcmVudCBsZW5zIHRvIHZpZXcgdGhlIHVzYWdlIHRocm91Z2guXG5cbklmIEkgd2VyZSB0byBsb29rIGludG8gYSBwcm9ibGVtYXRpYyBhcmVhLCBJIHdvdWxkIGxvb2sgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cy4gSXMgdGhlcmUgYSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgaXMgYmVpbmcgcmVzZXJ2ZWQgZm9yIGEgc2luZ2xlIHB1cnBvc2U/IElmIHNvLCBkb2VzIGl0IGhhdmUgYSBoaWdoIGNvbnRlbnRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXNlcnZlZCBtZW1vcnkgYmVpbmcgaGVsZCwgYW5kIGZvciBob3cgbG9uZz8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGZyYWdtZW50YXRpb24/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNpemUgYW5kIHF1YW50aXR5IG9mIHRoZXNlIHJlc2VydmF0aW9ucy4gTGFyZ2UgYWxsb2NhdGlvbnMgYXJlIG9mdGVuIGluZGljYXRpdmUgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgb2Ygc3RydWN0dXJlIChhbiBpbm9kZSBwZXJoYXBzKSBvciB0ZW1wb3JhcnkgYnVmZmVyLiBTbWFsbCBhbGxvY2F0aW9ucyBtaWdodCBiZSBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzLiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjYWxscyB3aWxsIGJlIGltcG9ydGFudC4gRnJlcXVlbnQgcmVzZXJ2YXRpb25zLCBldmVuIHNtYWxsIG9uZXMsIGNvdWxkIHNpZ25hbCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHJlc2VydmF0aW9ucyBhcmUgaGFwcGVuaW5nIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHRydWx5IG5lY2Vzc2FyeS4gSXMgdGhpcyBhIHByZWVtcHRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgcGVyZm9ybWFuY2UsIG9yIGEgd29ya2Fyb3VuZCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IEFyZSB0aGV5IGd1YXJkaW5nIGFnYWluc3QgYSBrbm93biBwb3RlbnRpYWwgRG9TIHZlY3Rvcj8gT2Z0ZW4sIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBpbXBsZW1lbnQgdGhlIHJlcXVpcmVtZW50LCBJJ20gc3VyZSBJJ2QgZmluZCBpdC5cblxuVWx0aW1hdGVseSwgSSdtIGRpZ2dpbmcgZm9yIGluZWZmaWNpZW5jaWVzLCBwb3RlbnRpYWwgYnVncywgb3IgZGVzaWduIGZsYXdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEknbSBsb29raW5nIGZvciBjbHVlcyB0byBvcHRpbWl6ZSwgcmVmYWN0b3IsIG9yIHBlcmhhcHMgZXZlbiByZXdyaXRlIHRoZXNlIGFyZWFzIHRvIHVzZSBtb3JlIG1vZGVybiBrZXJuZWwgbWVjaGFuaXNtcywgcmVkdWNpbmcgb3ZlcmhlYWQgYW5kIGltcHJvdmluZyBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIHVzZXMgYXJlIGxlZ2l0aW1hdGUgb3IgYXJlIGhpZGluZyBhIGxhcmdlciBpc3N1ZSB0aGF0IHdpbGwgY2F1c2UgcHJvYmxlbXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTI6NTguMDAxMTkwNDk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzEzNTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jX3Jlc2VydmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTkxPXN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MDItLypcXG5uZXQvY29yZS9za2J1ZmYuYzo2MDM6ICoga21hbGxvY19yZXNlcnZlIGlzIGEgd3JhcHBlciBhcm91bmQga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlciB0aGF0IHRlbGxzXFxubmV0L2NvcmUvc2tidWZmLmMtNjA0LSAqIHRoZSBjYWxsZXIgaWYgZW1lcmdlbmN5IHBmbWVtYWxsb2MgcmVzZXJ2ZXMgYXJlIGJlaW5nIHVzZWQuIElmIGl0IGlzIGFuZFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjA4LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjYwOTpzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTYxMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02Nzc9c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNy1cXHQgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MTg6XFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIG5vZGUsIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzE5LVxcdGlmICh1bmxpa2VseSghZGF0YSkpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjkxPWludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjMwOC1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMzA5OlxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMTAtXFx0aWYgKCFkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjgxMz1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjgyMy1cXG5uZXQvY29yZS9za2J1ZmYuYzo2ODI0OlxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MjUtXFx0aWYgKCFkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjkzND1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjk0NS1cXG5uZXQvY29yZS9za2J1ZmYuYzo2OTQ2OlxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY5NDctXFx0aWYgKCFkYXRhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo1OC4zODgzMzAzNDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU4NDIyMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0d2Vha2luZyBob3cgYHNrYmAgZGF0YSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgc3dpdGNoaW5nIGl0IG92ZXIgdG8gdXNlIGEgZGVkaWNhdGVkIGBrbWVtYCBidWNrZXQuIEZ1bmN0aW9uYWxseSwgdGhpcyAqaXMqIGEgY2hhbmdlIOKAkyB3ZSdyZSBhbHRlcmluZyB0aGUgYWxsb2NhdG9yIGl0c2VsZiwgbm90IGp1c3Qgc3RpY2tpbmcgd2l0aCB0aGUgZ2VuZXJhbCBga21hbGxvY2AgbWV0aG9kLiBCdXQsIGl0IGlzIGFuIGludGVybmFsIG1lbW9yeSBhbGxvY2F0aW9uIGRldGFpbC4gSXQgZG9lc24ndCBhY3R1YWxseSB0b3VjaCBhbnkgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sncyBsb2dpYy5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCAqZG9uJ3QqIGFsdGVyIGV4ZWN1dGlvbi4gRG9lcyB0aGlzIGNvdW50PyBJdCdzIG1vZGlmeWluZyB0aGUgYWxsb2NhdG9yIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC5cblxuV2FpdCwgaGVyZSdzIGEgY3J1Y2lhbCBwb2ludDogdGhpcyBpcyBhIHNlY3VyaXR5IG1pdGlnYXRpb24uIGBrbWVtX2J1Y2tldHNgIGFyZSB1c2VkIGZvciBoZWFwIGlzb2xhdGlvbiwgc28gdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHdheSB3ZSBhcHByb2FjaCBmdXp6aW5nIHRoaXMgY29kZS4gSXQgcHJvYmFibHkgd29u4oCZdCBiZSB0aGF0IGZydWl0ZnVsIGZvciBnZW5lcmFsIGZ1enppbmcuIFVubGVzcyB3ZSdyZSBzcGVjaWZpY2FsbHkgaHVudGluZyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyB0aGF0IHRoaXMgbmV3IGFsbG9jYXRpb24gbWV0aG9kIG1pZ2h0IG5vdyBtaXRpZ2F0ZSBvciBjYXVzZSB0byBiZWhhdmUgZGlmZmVyZW50bHkuXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgcmVsYXRlZCBjb25maWdzLiBDb3VsZCBgQ09ORklHX1NMQUJfQlVDS0VUU2AgYmUgaW52b2x2ZWQgaGVyZT8gSSdsbCBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjA0LjE0Njc1NTA1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ5MzQ0NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fYnVja2V0c19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTg2OT12b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqcCk7XFxuaW5jbHVkZS9saW51eC9zbGFiLmgtODcwLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjg3MTprbWVtX2J1Y2tldHMgKmttZW1fYnVja2V0c19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc2xhYl9mbGFnc190IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg3Mi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCB1c2Vyb2Zmc2V0LCB1bnNpZ25lZCBpbnQgdXNlcnNpemUsXFxuLS1cXG5pcGMvbXNndXRpbC5jPTQ0PXN0YXRpYyBpbnQgX19pbml0IGluaXRfbXNnX2J1Y2tldHModm9pZClcXG5pcGMvbXNndXRpbC5jLTQ1LXtcXG5pcGMvbXNndXRpbC5jOjQ2OlxcdG1zZ19idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwibXNnX21zZ1xcXCIsIFNMQUJfQUNDT1VOVCxcXG5pcGMvbXNndXRpbC5jLTQ3LVxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBtc2dfbXNnKSxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDA2LS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6NDA3OiAqIGttZW1fYnVja2V0c19jcmVhdGUgLSBDcmVhdGUgYSBzZXQgb2YgY2FjaGVzIHRoYXQgaGFuZGxlIGR5bmFtaWMgc2l6ZWRcXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC0gKlxcdFxcdFxcdCBhbGxvY2F0aW9ucyB2aWEga21lbV9idWNrZXRzX2FsbG9jKClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDI0LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NDI1OmttZW1fYnVja2V0cyAqa21lbV9idWNrZXRzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXFxubW0vc2xhYl9jb21tb24uYy00MjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgdXNlcm9mZnNldCxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTAyLX1cXG5tbS9zbGFiX2NvbW1vbi5jOjUwMzpFWFBPUlRfU1lNQk9MKGttZW1fYnVja2V0c19jcmVhdGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtNTA0LVxcbi0tXFxubW0vdXRpbC5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3VzZXJfYnVja2V0cyh2b2lkKVxcbm1tL3V0aWwuYy0yMDEte1xcbm1tL3V0aWwuYzoyMDI6XFx0dXNlcl9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwibWVtZHVwX3VzZXJcXFwiLCAwLCAwLCBJTlRfTUFYLCBOVUxMKTtcXG5tbS91dGlsLmMtMjAzLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE5Mz12b2lkIF9faW5pdCBza2JfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTIyMC1cXHRcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo1MjIxOlxcdHNrYl9kYXRhX2J1Y2tldHMgPSBrbWVtX2J1Y2tldHNfY3JlYXRlKFxcXCJza2JfZGF0YVxcXCIsIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMjItXFx0c2tiX2V4dGVuc2lvbnNfaW5pdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzowNy4xOTYxMTY0NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQyODAwMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBga21lbV9idWNrZXRzX2NyZWF0ZWAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBga21lbV9idWNrZXRzX2NyZWF0ZWAgZnVuY3Rpb24sIGFuZCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgd2hldGhlciB0aGVyZSdzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBrbm9iLCBzb21ldGhpbmcgSSBtaWdodCBiZSBhYmxlIHRvIHR3ZWFrLCB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIGl0cyBiZWhhdmlvciBvciBwYXJhbWV0ZXJzLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCwgc28gZmluZGluZyB0aGUgcmlnaHQgY29uZmlnIHdvdWxkIGdpdmUgbWUgc2VyaW91cyBjb250cm9sIG92ZXIgaXRzIHBlcmZvcm1hbmNlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYnVja2V0IHNpemVzLCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBvdmVyYWxsIG1lbW9yeSBsaW1pdHMg4oCTIHRoaW5ncyBJJ3ZlIHR3ZWFrZWQgYmVmb3JlIHdpdGggb3RoZXIgbWVtb3J5IGFsbG9jYXRvcnMuIFNvLCBJIG5lZWQgdG8ga25vdzogd2hhdCdzIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCB3aGVuIGl0IGNvbWVzIHRvIGluZmx1ZW5jaW5nIGhvdyBga21lbV9idWNrZXRzX2NyZWF0ZWAgb3BlcmF0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGluIHRoZSBrZXJuZWwgY29uZmlnIHRoYXQgSSBjYW4gbW9kaWZ5IHdpdGhvdXQgdG9vIG11Y2ggcmlzaz8gSSBuZWVkIHRvIGtub3cgd2hlcmUgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjEwLjEzODkxODY0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDE5MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fYnVja2V0c19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDA2LS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6NDA3OiAqIGttZW1fYnVja2V0c19jcmVhdGUgLSBDcmVhdGUgYSBzZXQgb2YgY2FjaGVzIHRoYXQgaGFuZGxlIGR5bmFtaWMgc2l6ZWRcXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC0gKlxcdFxcdFxcdCBhbGxvY2F0aW9ucyB2aWEga21lbV9idWNrZXRzX2FsbG9jKClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDI0LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NDI1OmttZW1fYnVja2V0cyAqa21lbV9idWNrZXRzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXFxubW0vc2xhYl9jb21tb24uYy00MjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgdXNlcm9mZnNldCxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTAyLX1cXG5tbS9zbGFiX2NvbW1vbi5jOjUwMzpFWFBPUlRfU1lNQk9MKGttZW1fYnVja2V0c19jcmVhdGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtNTA0LVxcbi0tXFxubW0vdXRpbC5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3VzZXJfYnVja2V0cyh2b2lkKVxcbm1tL3V0aWwuYy0yMDEte1xcbm1tL3V0aWwuYzoyMDI6XFx0dXNlcl9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwibWVtZHVwX3VzZXJcXFwiLCAwLCAwLCBJTlRfTUFYLCBOVUxMKTtcXG5tbS91dGlsLmMtMjAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoxMC4yOTk5NDM1NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1NjE2MDUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBrbWVtX2J1Y2tldHNfY3JlYXRlYCBpcyBjb25kaXRpb25hbCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBjcnVjaWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgbWUgdHJvdWJsZXNob290IHBvdGVudGlhbCBpc3N1ZXMsIHVuZGVyc3RhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBtYXliZSBldmVuIG9wdGltaXplIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcyBvciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoxMi44NTYxMDY4M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMDk4MTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0xBQl9CVUNLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTAxPUNPTkZJR19aU01BTExPQ19TVEFUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTAyOkNPTkZJR19TTEFCX0JVQ0tFVFM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xMDMtQ09ORklHX1NMVUJfU1RBVFM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTk1PUNPTkZJR19aU01BTExPQ19TVEFUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6OTY6Q09ORklHX1NMQUJfQlVDS0VUUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTk3LSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldFxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9OTEyPXVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxNS0gKiBUaGVzZSBtYWNyb3MgYWxsb3cgZGVjbGFyaW5nIGEga21lbV9idWNrZXRzICogcGFyYW1ldGVyIGFsb25nc2lkZSBzaXplLCB3aGljaFxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjkxNjogKiBjYW4gYmUgY29tcGlsZWQgb3V0IHdpdGggQ09ORklHX1NMQUJfQlVDS0VUUz1uIHNvIHRoYXQgYSBsYXJnZSBudW1iZXIgb2YgY2FsbFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxNy0gKiBzaXRlcyBkb24ndCBoYXZlIHRvIHBhc3MgTlVMTC5cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MTgtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE5OiNpZmRlZiBDT05GSUdfU0xBQl9CVUNLRVRTXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTIwLSNkZWZpbmUgREVDTF9CVUNLRVRfUEFSQU1TKF9zaXplLCBfYilcXHRzaXplX3QgKF9zaXplKSwga21lbV9idWNrZXRzICooX2IpXFxuLS1cXG5rZXJuZWwvY29uZmlncy9oYXJkZW5pbmcuY29uZmlnPTIyPUNPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEPXlcXG5rZXJuZWwvY29uZmlncy9oYXJkZW5pbmcuY29uZmlnOjIzOkNPTkZJR19TTEFCX0JVQ0tFVFM9eVxcbmtlcm5lbC9jb25maWdzL2hhcmRlbmluZy5jb25maWctMjQtQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1I9eVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz00MDQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2J1Y2tldHNfY2FjaGUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy00MjAtICogUmV0dXJuOiBhIHBvaW50ZXIgdG8gdGhlIGNhY2hlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4gV2hlblxcbm1tL3NsYWJfY29tbW9uLmM6NDIxOiAqIENPTkZJR19TTEFCX0JVQ0tFVFMgaXMgbm90IGVuYWJsZWQsIFpFUk9fU0laRV9QVFIgaXMgcmV0dXJuZWQsIGFuZFxcbm1tL3NsYWJfY29tbW9uLmMtNDIyLSAqIHN1YnNlcXVlbnQgY2FsbHMgdG8ga21lbV9idWNrZXRzX2FsbG9jKCkgd2lsbCBmYWxsIGJhY2sgdG8ga21hbGxvYygpLlxcbi0tXFxubW0vc2xhYl9jb21tb24uYz00MjU9a21lbV9idWNrZXRzICprbWVtX2J1Y2tldHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDQwLVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NDQxOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU0xBQl9CVUNLRVRTKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTQ0Mi1cXHRcXHRyZXR1cm4gWkVST19TSVpFX1BUUjtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9OTk0PXZvaWQgX19pbml0IGNyZWF0ZV9rbWFsbG9jX2NhY2hlcyh2b2lkKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMDE5LVxcbm1tL3NsYWJfY29tbW9uLmM6MTAyMDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xBQl9CVUNLRVRTKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTEwMjEtXFx0XFx0a21lbV9idWNrZXRzX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImttYWxsb2NfYnVja2V0c1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjE1LjQ4NzA5MTc3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjY5MTA0MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENPTkZJR19TTEFCX0JVQ0tFVFNgIEltcGFjdCBvbiBOZXR3b3JraW5nKipcblxuT2theSwgc28gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gSWYgaXQncyBkaXNhYmxlZCwgYGttZW1fYnVja2V0c19jcmVhdGVgIHJldHVybnMgYFpFUk9fU0laRV9QVFJgLCBhbmQgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgcmV2ZXJ0cyB0byBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAuIFRvIHRlc3QgdGhlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIGVuYWJsZWQgZHVyaW5nIHRlc3RpbmcuXG5cbk5vdywgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaXMgdXNlZCBieSBga21hbGxvY19wZm1lbWFsbG9jYCBhbmQgYGttYWxsb2NfcmVzZXJ2ZWAsIGJvdGggb2Ygd2hpY2ggYXJlIHN0YXRpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaW5kIHRoZSBleHBvcnRlZCBvciBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgY2FsbCB0aGVzZS4gTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWUgYF9fYWxsb2Nfc2tiYCwgYHBza2JfZXhwYW5kX2hlYWRgLCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCwgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gR2l2ZW4gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGZ1enppbmcgc2VlbXMgbGlrZSBhIHZhbGlkIGFwcHJvYWNoIHRvIHN0cmVzcy10ZXN0IGl0LlxuXG5Gb2N1c2luZyBvbiBzcGVjaWZpYyBzeW1ib2xzIGZvciBmdXp6aW5nLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBfX2FsbG9jX3NrYmAgYW5kIGBwc2tiX2V4cGFuZF9oZWFkYC4gSG93ZXZlciwgYF9fYWxsb2Nfc2tiYCBpcyBhICp2ZXJ5KiBob3QtcGF0aCBmdW5jdGlvbiwgYW5kIHRoZSBkaXJlY3Rpb25zIHN1Z2dlc3QgYXZvaWRpbmcgdGhvc2UuIGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbHNvIHF1aXRlIGNvbW1vbi4gTWF5YmUgSSBzaG91bGQgaG9sZCBvZmYgb24gbGlzdGluZyBhbnkgaWYgdGhleSBhcmUgYWxsIGhvdCBwYXRocz8gTGV0J3Mgc2VlIGlmIHRoZSBvdGhlciB0d28gYXJlIGxlc3MgY29tbW9uLlxuXG5gcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAgc2VlbSBsZXNzIGZyZXF1ZW50bHkgY2FsbGVkLiBJIHNob3VsZCBsb29rIGludG8gd2hlcmUgdGhleSBhcmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoyMi4xNTYxOTgxMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTQ1MzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NjgxMD1FWFBPUlRfU1lNQk9MKGFsbG9jX3NrYl93aXRoX2ZyYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXFx1MDAzYyBoZWFkbGVuICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjgxMzpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBoZWFkbGVuLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjItXFx0aWYgKGxlbiBcXHUwMDNjIGhlYWRsZW4pXFxubmV0L2NvcmUvc2tidWZmLmM6NzAyMzpcXHRcXHRyZXR1cm4gcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHNrYiwgbGVuLCBoZWFkbGVuLCBnZnApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjQtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoyMi41MDc2NTY3MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNzg4NjczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqUG90ZW50aWFsIERhdGEgQ2FydmluZyBGdW5jdGlvbnMgYW5kIFRoZWlyIENhbGxlcnMqKlxuXG5IbW0sIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgZGF0YSBpcyBoYW5kbGVkIHdoZW4gYSBwYWNrZXQgaXMgY29waWVkIG9uIHdyaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IEkgYmVsaWV2ZSBgcHNrYl9jYXJ2ZWAgbWlnaHQgYmUgaW52b2tlZCBieSBgc2tiX2Nvd19kYXRhYCB3aGVuIGEgcGFja2V0IG5lZWRzIGl0cyBkYXRhIGNhcnZlZCBvciBtYXliZSBpdCdzIGBwc2tiX2V4dHJhY3RgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGZ1bmN0aW9uIGNhbGxzIGZvciB0aGUgQ29weS1Pbi1Xcml0ZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjI2LjA0NTU0NTkzNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDY3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfY2FydmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NjgxMD1FWFBPUlRfU1lNQk9MKGFsbG9jX3NrYl93aXRoX2ZyYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXFx1MDAzYyBoZWFkbGVuICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjgxMzpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBoZWFkbGVuLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzUtXFxubmV0L2NvcmUvc2tidWZmLmM6Njg3NjpzdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZiwgZ2ZwX3QgZ2ZwKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02ODc3LVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzgtLyogY2FydmUgb3V0IHRoZSBmaXJzdCBlYXQgYnl0ZXMgZnJvbSBza2IncyBmcmFnX2xpc3QuIE1heSByZWN1cnNlIGludG9cXG5uZXQvY29yZS9za2J1ZmYuYzo2ODc5OiAqIHBza2JfY2FydmUoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4ODAtICovXFxubmV0L2NvcmUvc2tidWZmLmM6Njg4MTpzdGF0aWMgaW50IHBza2JfY2FydmVfZnJhZ19saXN0KHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbywgaW50IGVhdCxcXG5uZXQvY29yZS9za2J1ZmYuYy02ODgyLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjkwOS1cXHRcXHRcXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6NjkxMDpcXHRcXHRcXHRpZiAocHNrYl9jYXJ2ZShsaXN0LCBlYXQsIGdmcF9tYXNrKSBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9za2J1ZmYuYy02OTExLVxcdFxcdFxcdFxcdGtmcmVlX3NrYihjbG9uZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02OTMzLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY5MzQ6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy02OTM1LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgcG9zLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY5OTAtXFx0Lyogc3BsaXQgbGluZSBpcyBpbiBmcmFnIGxpc3QgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2OTkxOlxcdGlmIChrID09IDAgXFx1MDAyNlxcdTAwMjYgcHNrYl9jYXJ2ZV9mcmFnX2xpc3Qoc2hpbmZvLCBvZmYgLSBwb3MsIGdmcF9tYXNrKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY5OTItXFx0XFx0Lyogc2tiX2ZyYWdfdW5yZWYoKSBpcyBub3QgbmVlZGVkIGhlcmUgYXMgc2hpbmZvLVxcdTAwM2Vucl9mcmFncyA9IDAuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDE3LS8qIHJlbW92ZSBsZW4gYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBza2IgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDE4OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbGVuLCBnZnBfdCBnZnApXFxubmV0L2NvcmUvc2tidWZmLmMtNzAxOS17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDIyLVxcdGlmIChsZW4gXFx1MDAzYyBoZWFkbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMjM6XFx0XFx0cmV0dXJuIHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihza2IsIGxlbiwgaGVhZGxlbiwgZ2ZwKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDI0LVxcdGVsc2VcXG5uZXQvY29yZS9za2J1ZmYuYzo3MDI1OlxcdFxcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzAyNi19XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MDMxPXN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzgtXFxubmV0L2NvcmUvc2tidWZmLmM6NzAzOTpcXHRpZiAocHNrYl9jYXJ2ZShjbG9uZSwgb2ZmLCBnZnApIFxcdTAwM2MgMCB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDAtXFx0ICAgIHBza2JfdHJpbShjbG9uZSwgdG9fY29weSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTM6MjYuMTY5MDE5MDk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjczMzAyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFN0YWNrOiBBIFJlY3Vyc2l2ZSBEaXZlKipcblxuT2theSwgc28gYHBza2JfZXh0cmFjdGAgaXMgY2FsbGluZyBpdHNlbGYuIFRoYXQncyBhIGJpdCBvZiBhIGhlYWQtc2NyYXRjaGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHkgdGhlIHJlY3Vyc2lvbj9cIiBJcyB0aGlzIGludGVudGlvbmFsLCBhIGRlbGliZXJhdGUgZGVzaWduIGNob2ljZSwgb3IgYSBwb3RlbnRpYWwgYnVnIHRoYXQncyBjcmVhdGluZyBhbiBpbmZpbml0ZSBsb29wPyBHaXZlbiB0aGF0IGBwc2tiX2V4dHJhY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBpdHNlbGYsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIExldCdzIHRyYWNlIGl0IGFuZCBkZXRlcm1pbmUgd2hlcmUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlIOKAkyBJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYHBza2JfZXh0cmFjdGAgaXMgYmVpbmcgY2FsbGVkIGluIHRoZSBjb2RlYmFzZSB0byBwcm9wZXJseSBhbmFseXplIHRoaXMgYW5kLCBwZXJoYXBzLCByZWZpbmUgdGhpcyBjcml0aWNhbCBmdW5jdGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGNvZGUsIGdpdmVuIHRoZSBjYWxsIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyOTMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoyOS4yMzYzNTE4MjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjA3MjA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9leHRyYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyOTM9aW50IHNrYl9tcGxzX2RlY190dGwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk0OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IHRvX2NvcHksXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Mjk1LVxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzAtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzAzMTpzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9leHRyYWN0KHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzMi1cXHRcXHRcXHQgICAgIGludCB0b19jb3B5LCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ2OkVYUE9SVF9TWU1CT0wocHNrYl9leHRyYWN0KTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ3LVxcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jPTE1NT1zdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jLTIxOC1cXG5uZXQvcmRzL3RjcF9yZWN2LmM6MjE5OlxcdFxcdFxcdGNsb25lID0gcHNrYl9leHRyYWN0KHNrYiwgb2Zmc2V0LCB0b19jb3B5LCBhcmctXFx1MDAzZWdmcCk7XFxubmV0L3Jkcy90Y3BfcmVjdi5jLTIyMC1cXHRcXHRcXHRpZiAoIWNsb25lKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTMyPWlwdGZzX3Bza2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICp0cGwsIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2MC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTYxOiAqIGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoKSAtIENyZWF0ZSBhbmQgbG9hZCBkYXRhIGludG8gYSBuZXcgc2tfYnVmZi5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYyLSAqIEBza2JsZW46IHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIGBza2JgLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU3Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Nzc6aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTQyPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTMwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBza2JzZXEsIGlwaGxlbikpKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjExMzE6XFx0XFx0XFx0XFx0c2tiID0gaXB0ZnNfcHNrYl9leHRyYWN0X3NlcShpcGxlbiwgc2tic2VxLCBkYXRhLCBjYXB0dXJlbGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzMi1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjMxLjg1NzA4MDcxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQxODIyNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTS0IgQWxsb2NhdGlvbiBQb2ludHMgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IGZ1enppbmcgZWZmb3J0cyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggY2hhbmdpbmcgdGhlIFNLQiBkYXRhIGFsbG9jYXRvci4gSW5pdGlhbGx5LCBJIHdhcyBjb25zaWRlcmluZyBgcHNrYl9leHRyYWN0YCwgc2luY2UgaXQncyB1c2VkIGluIFJEUyBhbmQgWEZSTSwgYW5kIEkga25vdyBpdCBsZXZlcmFnZXMgYHBza2JfY2FydmVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBrbWFsbG9jX3Jlc2VydmVgLiBBbHNvLCBJJ2Qgbm90ZWQgdGhhdCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAgYXJlIGFsc28gaW4gcGxheSBoZXJlLlxuXG5UaGVuLCBJIHdhcyBjb25zaWRlcmluZyBgcHNrYl9leHBhbmRfaGVhZGAsIGJlY2F1c2UgdGhhdCBhbmQgYF9fYWxsb2Nfc2tiYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciBTS0IgYWxsb2NhdGlvbiwgYW5kIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCBgX19hbGxvY19za2JgIGFyZSBsaWtlbHkgdG8gYmUgaG90IHNwb3RzLiBCdXQgbm93IHRoYXQgSSB0aGluayBhYm91dCB0aGUgc2NvcGUgb2YgdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHRoZSBhbGxvY2F0aW9uIGNoYW5nZSB3aWxsIGJlIGhpdCBieSAqYW55KiBTS0IgYWxsb2NhdGlvbi4gU28sIHRhcmdldGluZyBzcGVjaWZpYyBvYnNjdXJlIGZ1bmN0aW9ucyBtaWdodCBiZSBsZXNzIGltcG9ydGFudCB0aGFuIGp1c3QgZW5zdXJpbmcgZ2VuZXJhbCBTS0IgYWxsb2NhdGlvbiBoYXBwZW5zIGR1cmluZyB0ZXN0aW5nLlxuXG5CdXQsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBMaXN0aW5nIGBfX2FsbG9jX3NrYmAgd291bGQgZGVmaW5pdGVseSBza2V3IHRoaW5ncywgc28gSSBzaG91bGQgb21pdCB0aGF0LlxuXG5Pa2F5LCBsZXQncyByZXZpc2l0IGBwc2tiX2V4cGFuZF9oZWFkYC4gSXQncyBsZXNzIGhvdCB0aGFuIGBfX2FsbG9jX3NrYmAsIGJ1dCBzdGlsbCB1c2VkIGEgbG90LiBUaGVuIHRoZXJlJ3MgYHBza2JfZXh0cmFjdGAsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IGEgaG90IGZ1bmN0aW9uLiBJdCBhbHNvIGNhbGxzIGBrbWFsbG9jX3Jlc2VydmVgLiBJIGNvdWxkIGZ1enogdGhvc2UuIEdpdmVuIHRoZSBwcm9tcHQncyBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgdGhhdCBsaXN0aW5nIGBwc2tiX2V4dHJhY3RgIGFuZCBgcHNrYl9leHBhbmRfaGVhZGAgd2lsbCBwcm92aWRlIGEgZ29vZCBiYWxhbmNlIG9mIGNvdmVyYWdlIHdpdGhvdXQgb3Zlci1lbXBoYXNpemluZyB0aGUgbW9zdCBjb21tb24gYWxsb2NhdGlvbiBwYXRocy4gSSB0aGluayB0aGF0J3MgdGhlIGJlc3Qgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzozOC42OTg5MDUzMjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA5MzY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jX3BmbWVtYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTg5PXN0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU5MC1cXG5uZXQvY29yZS9za2J1ZmYuYzo1OTE6c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcXG5uZXQvY29yZS9za2J1ZmYuYy01OTIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MjYtXFx0XFx0XFx0c2tiLVxcdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcXG5uZXQvY29yZS9za2J1ZmYuYzo2Mjc6XFx0XFx0cmV0dXJuIGttYWxsb2NfcGZtZW1hbGxvYygwLCBmbGFncywgbm9kZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjI4LVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OC1cXHRcXHRza2ItXFx1MDAzZXBmbWVtYWxsb2MgPSB0cnVlO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY0OTpcXHRvYmogPSBrbWFsbG9jX3BmbWVtYWxsb2Mob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02NTAtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzozOC44NDQwMDQxMzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMjczMzg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBga21hbGxvY19yZXNlcnZlYCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gUmlnaHQsIGFuZCBga21hbGxvY19yZXNlcnZlYCBpcyBpbnZva2VkIGJ5IGBfX2FsbG9jX3NrYmAsIGFuZCB0aGVuIGJ5IGEgY2x1c3RlciBvZiBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnM6IGBwc2tiX2V4cGFuZF9oZWFkYCwgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYC4gIFRoZXJlZm9yZSwgaWYgSSdtIHRyeWluZyB0byBuYXJyb3cgZG93biBpbnRlcmVzdGluZyBzeW1ib2xzLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBwc2tiX2V4dHJhY3RgIChiZWNhdXNlIGl0IGNhbGxzIGBwc2tiX2NhcnZlYCksIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgLCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAgc2VlbSB0byBiZSB0aGUgcHJpbWUgY2FuZGlkYXRlcy5cblxuSG1tLCBidXQgd2FpdC4gYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgIGFyZSAqc3RhdGljKiBmdW5jdGlvbnMuICBEb2VzIHRoYXQgcG9zZSBhIHByb2JsZW0gZm9yIGZ1enppbmc/ICBDYW4gd2UgaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0PyAgWWVzLCBzeXprYWxsZXIgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgaXQgc2hvdWxkIGJlIGZpbmUuIFRoYXQncyBnb29kLlxuXG5TbyB0aGVuLCBgcHNrYl9leHRyYWN0YCBhbmQgYHBza2JfZXhwYW5kX2hlYWRgIGFyZSBleHBvcnRlZCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggbGlzdGluZy4gIExldCdzIGFkZCB0aG9zZSB0byB0aGUgbGlzdC5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/IGBDT05GSUdfU0xBQl9CVUNLRVRTYCBzZWVtcyByZWxldmFudCBoZXJlLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIHRoaXMgcGFydCBvZiB0aGUgY29kZSB0byBldmVuIGV4aXN0LiBZZXAsIHRoYXQncyByZXF1aXJlZC4gIEdvb2QsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuICBBcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlncyB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVuY2llcz8gTmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0LiAgTGV0J3MgY2hlY2sgd2hhdCBgQ09ORklHX1NMQUJfQlVDS0VUU2AgZGVwZW5kcyBvbiwgdG8gc2VlIGlmIHdlIG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTM6NDQuNDc2NzQxNjkxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk5Mjc4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTEFCX0JVQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxuLS1cXG5tbS9LY29uZmlnLTIyMC1cXG5tbS9LY29uZmlnOjIyMTpjb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzo0Ny4yNzYwMzA1ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0ODQ1NTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgU0xBQl9CVUNLRVRTKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgc29tZXRoaW5nLCBhbmQgdGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBmaXJzdCBzdG9wLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgU0xBQl9CVUNLRVRTYC4gSXQncyBhIGtleSB2YXJpYWJsZSBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbi4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgaXRzIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBTTEFCIGFsbG9jYXRvciBhcmNoaXRlY3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjUwLjUyNDQ4ODUwNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTU6XFx0XFx0aGVscFxcbiAyMTY6XFx0XFx0ICBNYW55IGtlcm5lbCBoZWFwIGF0dGFja3MgdHJ5IHRvIHRhcmdldCBzbGFiIGNhY2hlIG1ldGFkYXRhIGFuZFxcbiAyMTc6XFx0XFx0ICBvdGhlciBpbmZyYXN0cnVjdHVyZS4gVGhpcyBvcHRpb25zIG1ha2VzIG1pbm9yIHBlcmZvcm1hbmNlXFxuIDIxODpcXHRcXHQgIHNhY3JpZmljZXMgdG8gaGFyZGVuIHRoZSBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgYWdhaW5zdCBjb21tb25cXG4gMjE5OlxcdFxcdCAgZnJlZWxpc3QgZXhwbG9pdCBtZXRob2RzLlxcbiAyMjA6XFx0XFxuIDIyMTpcXHRjb25maWcgU0xBQl9CVUNLRVRTXFxuIDIyMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGFsbG9jYXRpb24gZnJvbSBzZXBhcmF0ZSBrbWFsbG9jIGJ1Y2tldHNcXFwiXFxuIDIyMzpcXHRcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG4gMjI0OlxcdFxcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbiAyMjU6XFx0XFx0aGVscFxcbiAyMjY6XFx0XFx0ICBLZXJuZWwgaGVhcCBhdHRhY2tzIGZyZXF1ZW50bHkgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gY3JlYXRlXFxuIDIyNzpcXHRcXHQgIHNwZWNpZmljYWxseS1zaXplZCBhbGxvY2F0aW9ucyB3aXRoIHVzZXItY29udHJvbGxlZCBjb250ZW50c1xcbiAyMjg6XFx0XFx0ICB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGludG8gdGhlIHNhbWUga21hbGxvYyBidWNrZXQgYXMgYVxcbiAyMjk6XFx0XFx0ICB0YXJnZXQgb2JqZWN0LiBUbyBhdm9pZCBzaGFyaW5nIHRoZXNlIGFsbG9jYXRpb24gYnVja2V0cyxcXG4gMjMwOlxcdFxcdCAgcHJvdmlkZSBhbiBleHBsaWNpdGx5IHNlcGFyYXRlZCBzZXQgb2YgYnVja2V0cyB0byBiZSB1c2VkIGZvclxcbiAyMzE6XFx0XFx0ICB1c2VyLWNvbnRyb2xsZWQgYWxsb2NhdGlvbnMuIFRoaXMgbWF5IHZlcnkgc2xpZ2h0bHkgaW5jcmVhc2VcXG4gMjMyOlxcdFxcdCAgbWVtb3J5IGZyYWdtZW50YXRpb24sIHRob3VnaCBpbiBwcmFjdGljZSBpdCdzIG9ubHkgYSBoYW5kZnVsXFxuIDIzMzpcXHRcXHQgIG9mIGV4dHJhIHBhZ2VzIHNpbmNlIHRoZSBidWxrIG9mIHVzZXItY29udHJvbGxlZCBhbGxvY2F0aW9uc1xcbiAyMzQ6XFx0XFx0ICBhcmUgcmVsYXRpdmVseSBsb25nLWxpdmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzo1MC41MjQ2NDg1MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NzEzMDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBGdXp6aW5nIHRoZSBTS0IgRGF0YSBBbGxvY2F0b3IgQ2hhbmdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjb25kaXRpb25hbGx5IGRlcGVuZGVudCBvbiBgIVNMVUJfVElOWWAsIG1lYW5pbmcgd2UgbmVlZCBgU0xBQl9CVUNLRVRTYCBlbmFibGVkIGluIHRoZSBjb25maWcuIFRoYXQncyB0aGUga2V5IHRvIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhpcyBuZXcgY29kZSBwYXRoIHdoZXJlIHRoZSBjaGFuZ2UgZnJvbSBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaXMgbWFkZSB0byB1c2luZyBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCwgYW5kIHRoZXJlZm9yZSBga21lbV9idWNrZXRzX2NyZWF0ZWAuIElmIGBTTEFCX0JVQ0tFVFNgIGlzbid0IHNldCwgdGhlbiBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCBzaW1wbHkgZmFsbHMgYmFjayB0byBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAsIHNvIGVuYWJsaW5nIGBTTEFCX0JVQ0tFVFNgIGlzIGNyaXRpY2FsIGZvciB0ZXN0aW5nIHRoZSBwYXRjaC4gSXQncyBhbHdheXMgY29tcGlsZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgcmVsYXRpdmVseSBzaW1wbGU6IGl0IHN3YXBzIG91dCB0aGUgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIHRoZSBjYWxsIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGZyb20gdGhlIG9sZCBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgY2FsbCB0byB1c2UgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaW5zdGVhZCwgcGFzc2luZyBpbiBgc2tiX2RhdGFfYnVja2V0c2AuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjaGFuZ2UgZnV6emFibGU/IEFic29sdXRlbHkuIEl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sncyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgU0tCIGRhdGEsIG1lYW5pbmcgaXQncyB3b3J0aCBmdXp6aW5nISBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3Igb2YgU0tCIGRhdGEgYnVmZmVycy4gQW55IGJ1Z3MgaW4gdGhpcyAqbmV3KiBhbGxvY2F0b3Igb3IgaXRzIGludGVyYWN0aW9uIHdpdGggU0tCIGFsbG9jYXRpb24gY291bGQgYmUgZXhwb3NlZCB0aHJvdWdoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyBob3cgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBTS0IgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IHRoZSByZWFsbG9jYXRpb24gYW5kIGV4dHJhY3Rpb24gcGF0aHMsIGxpa2UgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9leHRyYWN0YCwgYXMgdGhleSBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIHdoaWNoIGV4ZXJjaXNlIHRoZSBkYXRhIGJ1ZmZlci4gSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5UaGUgaW1wb3J0YW50IHRoaW5ncyB0byByZW1lbWJlciBhcmU6XG5cbiogICBGb2N1cyBzaG91bGQgYmUgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuXG4qICAgVGhlIGVzc2VudGlhbCBjb25maWcgbmVlZGVkIGlzIGBTTEFCX0JVQ0tFVFNgLlxuKiAgIFRoZSBjaGFuZ2UgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBpcyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTM6NTguNjgxNzgwODQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgxMjU3NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA1MT12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTk6I2RlZmluZSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoX2IsIF9zaXplLCBfZmxhZ3MsIF9ub2RlKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTYwLVxcdGFsbG9jX2hvb2tzKF9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcl9ub3Byb2YoUEFTU19LTUFMTE9DX1BBUkFNUyhfc2l6ZSwgX2IsIF9fa21hbGxvY190b2tlbihfc2l6ZSkpLCBfZmxhZ3MsIF9ub2RlLCBfUkVUX0lQXykpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTYyLSNkZWZpbmUga21lbV9idWNrZXRzX2FsbG9jX3RyYWNrX2NhbGxlcihfYiwgX3NpemUsIF9mbGFncykgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNjM6XFx0a21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKF9iLCBfc2l6ZSwgX2ZsYWdzLCBOVU1BX05PX05PREUpXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE2NC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU5MT1zdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTk3LVxcdFxcdFxcdFxcdFxcdCAgICAgZmxhZ3MsIG5vZGUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjU5ODpcXHRyZXR1cm4ga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNrYl9kYXRhX2J1Y2tldHMsIG9ial9zaXplLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTU5OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIG5vZGUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MzktXFx0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjQwOlxcdG9iaiA9IGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSxcXG5uZXQvY29yZS9za2J1ZmYuYy02NDEtXFx0XFx0XFx0XFx0XFx0ZmxhZ3MgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxNDowMS43NjMwNDc0MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MzcxODEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgTGludXggTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhpcyBjcnVjaWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGRlZmluZWQuIEhtbSwgSSB2YWd1ZWx5IHJlY2FsbCBpdCBiZWluZyBhIGNvcmUgTGludXggY29uc3RydWN0Li4uIFllcywgaXQgY2xpY2tzISBJdCdzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc2xhYi5oYC4gVGhhdCdzIHRoZSBnby10byBoZWFkZXIgZm9yIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgd2hhdCBJJ20gYWxtb3N0IGNlcnRhaW5seSBkZWFsaW5nIHdpdGggaGVyZS4gT2theSwgZ29vZC4gSGF2aW5nIHRoZSBsb2NhdGlvbiBoZWxwcyBlbm9ybW91c2x5OyBpdCBhdm9pZHMgd2FzdGluZyB0aW1lIGNoYXNpbmcgZmFsc2UgbGVhZHMuXG5cbk5vdywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgd291bGQgYmUgdG8gYXBwbHkgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhpcyB0b29sLCBJIGJlbGlldmUsIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgcmVxdWlyZSBmcm9tIHRoZSBoZWFkZXIgZmlsZSwgYW5kIHdpbGwgYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIG91dHB1dCBpbiBhIHdheSB0aGF0IEkgY2FuIGZ1cnRoZXIgYW5hbHlzZS4gSSdsbCB1dGlsaXplIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBmdW5jdGlvbnMgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNiwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxNDowNS4zNDY3NjkwMDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAxNzU0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMQUJfQlVDS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaydzIG1lbW9yeSBtYW5hZ2VtZW50LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBTS0IgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvci4gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgc2VwYXJhdGUgYnVja2V0IGFsbG9jYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xBQl9CVUNLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRvciB1c2VkIGZvciBTS0IgZGF0YSBidWZmZXJzIHRvIHVzZSBhIGRlZGljYXRlZCBrbWVtIGJ1Y2tldCAoYHNrYl9kYXRhX2J1Y2tldHNgKSBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIGttYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIFNLQiByZWFsbG9jYXRpb24gYW5kIGV4dHJhY3Rpb24gcGF0aHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBhbGxvY2F0aW9uIGJlaGF2aW9yLiBgQ09ORklHX1NMQUJfQlVDS0VUU2AgaXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZW5hYmxlIHRoZSBzZXBhcmF0ZSBidWNrZXQgYWxsb2NhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 19:00:49 +0000 UTC FinishedAt: 2026-07-02 19:14:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLAB_BUCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLAB_BUCKETS" ], "series_id": "efeab196-ca15-4961-93f0-417e73a0baff" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pskb_expand_head", "pskb_extract" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMQUJfQlVDS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgdGhlIHNlcGFyYXRlIGJ1Y2tldCBhbGxvY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDcwOWRkYjQ0YjVjODBjOTkwZTEwODk5MzA3NTdhOWE3ZWU1MjQ5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTk6MTI6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggMThkYWJiNGU5Y2ZhMGUuLjlkYzVhODU0ODY4MTJkIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtNTg2LDYgJiM0Mzs1ODYsOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChuYXBpX2J1aWxkX3NrYik7XG4gXG4mIzQzO3N0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuIHtcbiBcdGlmICghZ2ZwX3BmbWVtYWxsb2NfYWxsb3dlZChmbGFncykpXG5AQCAtNTkzLDcgJiM0Mzs1OTUsOCBAQCBzdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuIFx0aWYgKCFvYmpfc2l6ZSlcbiBcdFx0cmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShuZXRfaG90ZGF0YS5za2Jfc21hbGxfaGVhZF9jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBmbGFncywgbm9kZSk7XG4tXHRyZXR1cm4ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSwgZmxhZ3MsIG5vZGUpO1xuJiM0MztcdHJldHVybiBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBmbGFncywgbm9kZSk7XG4gfVxuIFxuIC8qXG5AQCAtNjM0LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuIFx0ICogVHJ5IGEgcmVndWxhciBhbGxvY2F0aW9uLCB3aGVuIHRoYXQgZmFpbHMgYW5kIHdlJiMzOTtyZSBub3QgZW50aXRsZWRcbiBcdCAqIHRvIHRoZSByZXNlcnZlcywgZmFpbC5cbiBcdCAqL1xuLVx0b2JqID0ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSxcbiYjNDM7XHRvYmogPSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXG4gXHRcdFx0XHRcdGZsYWdzIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTixcbiBcdFx0XHRcdFx0bm9kZSk7XG4gXHRpZiAobGlrZWx5KG9iaikpXG5AQCAtNTIxNSw2ICYjNDM7NTIxOCw3IEBAIHZvaWQgX19pbml0IHNrYl9pbml0KHZvaWQpXG4gXHRcdFx0XHRcdFx0MCxcbiBcdFx0XHRcdFx0XHRTS0JfU01BTExfSEVBRF9IRUFEUk9PTSxcbiBcdFx0XHRcdFx0XHROVUxMKTtcbiYjNDM7XHRza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcJiMzNDtza2JfZGF0YVwmIzM0OywgU0xBQl9QQU5JQywgMCwgSU5UX01BWCwgTlVMTCk7XG4gXHRza2JfZXh0ZW5zaW9uc19pbml0KCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMQUJfQlVDS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgdGhlIHNlcGFyYXRlIGJ1Y2tldCBhbGxvY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNzA5ZGRiNDRiNWM4MGM5OTBlMTA4OTkzMDc1N2E5YTdlZTUyNDlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxOToxMjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMThkYWJiNGU5Y2ZhMGUuLjlkYzVhODU0ODY4MTJkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNTg2LDYgJiM0Mzs1ODYsOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSkKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9idWlsZF9za2IpOwogCiYjNDM7c3RhdGljIGttZW1fYnVja2V0cyAqc2tiX2RhdGFfYnVja2V0cyBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBzdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCWlmICghZ2ZwX3BmbWVtYWxsb2NfYWxsb3dlZChmbGFncykpCkBAIC01OTMsNyAmIzQzOzU5NSw4IEBAIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiAJaWYgKCFvYmpfc2l6ZSkKIAkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShuZXRfaG90ZGF0YS5za2Jfc21hbGxfaGVhZF9jYWNoZSwKIAkJCQkJICAgICBmbGFncywgbm9kZSk7Ci0JcmV0dXJuIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIob2JqX3NpemUsIGZsYWdzLCBub2RlKTsKJiM0MzsJcmV0dXJuIGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSwKJiM0MzsJCQkJCQkgICAgZmxhZ3MsIG5vZGUpOwogfQogCiAvKgpAQCAtNjM0LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLAogCSAqIFRyeSBhIHJlZ3VsYXIgYWxsb2NhdGlvbiwgd2hlbiB0aGF0IGZhaWxzIGFuZCB3ZSYjMzk7cmUgbm90IGVudGl0bGVkCiAJICogdG8gdGhlIHJlc2VydmVzLCBmYWlsLgogCSAqLwotCW9iaiA9IGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIob2JqX3NpemUsCiYjNDM7CW9iaiA9IGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSwKIAkJCQkJZmxhZ3MgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOLAogCQkJCQlub2RlKTsKIAlpZiAobGlrZWx5KG9iaikpCkBAIC01MjE1LDYgJiM0Mzs1MjE4LDcgQEAgdm9pZCBfX2luaXQgc2tiX2luaXQodm9pZCkKIAkJCQkJCTAsCiAJCQkJCQlTS0JfU01BTExfSEVBRF9IRUFEUk9PTSwKIAkJCQkJCU5VTEwpOwomIzQzOwlza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZSgmIzM0O3NrYl9kYXRhJiMzNDssIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpOwogCXNrYl9leHRlbnNpb25zX2luaXQoKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0aW5rZXJpbmcgd2l0aCBgbmV0L2NvcmUvc2tidWZmLmNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgYmVjYXVzZSB3ZSYjMzk7cmUgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBza2JfZGF0YV9idWNrZXRzYCwgd2hpY2ggaXMgYSBga21lbV9idWNrZXRzICpgLCBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYGttZW1fYnVja2V0c19jcmVhdGVgIHdpdGhpbiBgc2tiX2luaXRgLiBUaGlzIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmQgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgc3RyYXRlZ3kgZm9yIFNLQiBkYXRhLCByZXBsYWNpbmcgdGhlIGdlbmVyaWMgYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIGNhbGxzIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCB3aXRoIGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlIGltcGFjdGluZyBob3cgd2UgaGFuZGxlIFNLQiBkYXRhLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEFic29sdXRlbHksIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEFueSBjaGFuZ2UgYXQgdGhpcyBsZXZlbCBpcyBhIHBvdGVudGlhbCB2ZWN0b3IuIE15IGluaXRpYWwgZm9jdXMgZ29lcyB0byBga21hbGxvY19wZm1lbWFsbG9jYCBhbmQgYGttYWxsb2NfcmVzZXJ2ZWAg4oCTIHRoZXkgc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBXYWl0LCB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyEgT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0LiBZZXAsIHRoZXkgYXJlLiBTbywgd2hpbGUgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCB0YXJnZXRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8mIzM5O3MgY2FsbGluZyAqdGhlbSouIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgd2hhdCYjMzk7cyB1bHRpbWF0ZWx5IHRyaWdnZXJpbmcgdGhlc2UgYWxsb2NhdGlvbiByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBgX19hbGxvY19za2JgLCBgYnVpbGRfc2tiYCwgZXRjLiwgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgdGhhdCB1bHRpbWF0ZWx5IGNhbGwgdGhlc2Ugc3RhdGljIGFsbG9jYXRpb24gcm91dGluZXMuIExldCYjMzk7cyBzZWUgd2hvIHRoZSBjYWxsZXJzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21hbGxvY19wZm1lbWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NTg5PXN0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xubmV0L2NvcmUvc2tidWZmLmMtNTkwLVxubmV0L2NvcmUvc2tidWZmLmM6NTkxOnN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXG5uZXQvY29yZS9za2J1ZmYuYy01OTIte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYwOT1zdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYyNi1cdFx0XHRza2ItXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XG5uZXQvY29yZS9za2J1ZmYuYzo2Mjc6XHRcdHJldHVybiBrbWFsbG9jX3BmbWVtYWxsb2MoMCwgZmxhZ3MsIG5vZGUpO1xubmV0L2NvcmUvc2tidWZmLmMtNjI4LVx0fVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0OC1cdFx0c2tiLVx1MDAzZXBmbWVtYWxsb2MgPSB0cnVlO1xubmV0L2NvcmUvc2tidWZmLmM6NjQ5Olx0b2JqID0ga21hbGxvY19wZm1lbWFsbG9jKG9ial9zaXplLCBmbGFncywgbm9kZSk7XG5uZXQvY29yZS9za2J1ZmYuYy02NTAtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWUsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgYGttYWxsb2NfcmVzZXJ2ZWAgQ2FsbGVyczogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhlc2UgYGttYWxsb2NfcmVzZXJ2ZWAgY2FsbGVycy4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgc2VlIGl0LCBpcyByZXNvdXJjZSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGtlcm5lbCBtZW1vcnkgc3BhY2UuIGBrbWFsbG9jX3Jlc2VydmVgIGlzbiYjMzk7dCBhIGZ1bmN0aW9uIEkgdHlwaWNhbGx5IHNlZSB1c2VkIGluIGV2ZXJ5ZGF5IGNvZGUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7d2h5IGhlcmU/JiMzNDsgYW5kICYjMzQ7d2hhdCYjMzk7cyB0aGUgY29udGV4dD8mIzM0Oy4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGtlcm5lbCByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMuIElzIHRoaXMgZm9yIGhpZ2gtYXZhaWxhYmlsaXR5PyBQZXJoYXBzIGl0IGlzIGEgcHJlLWVtcHRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneT8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdyb3VwIHRoZXNlIGNhbGxlcnMgYmFzZWQgb24gdGhlaXIgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIHN1YnN5c3RlbXMgdGhleSBiZWxvbmcgdG8uIEFyZSB3ZSBsb29raW5nIGF0IGRyaXZlciBjb2RlLCBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMsIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlLCBvciBzb21ldGhpbmcgbW9yZSBlc290ZXJpYz8gRWFjaCBhcmVhIGdpdmVzIG1lIGEgZGlmZmVyZW50IGxlbnMgdG8gdmlldyB0aGUgdXNhZ2UgdGhyb3VnaC4KCklmIEkgd2VyZSB0byBsb29rIGludG8gYSBwcm9ibGVtYXRpYyBhcmVhLCBJIHdvdWxkIGxvb2sgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cy4gSXMgdGhlcmUgYSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgaXMgYmVpbmcgcmVzZXJ2ZWQgZm9yIGEgc2luZ2xlIHB1cnBvc2U/IElmIHNvLCBkb2VzIGl0IGhhdmUgYSBoaWdoIGNvbnRlbnRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXNlcnZlZCBtZW1vcnkgYmVpbmcgaGVsZCwgYW5kIGZvciBob3cgbG9uZz8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGZyYWdtZW50YXRpb24/CgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgc2l6ZSBhbmQgcXVhbnRpdHkgb2YgdGhlc2UgcmVzZXJ2YXRpb25zLiBMYXJnZSBhbGxvY2F0aW9ucyBhcmUgb2Z0ZW4gaW5kaWNhdGl2ZSBvZiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBzdHJ1Y3R1cmUgKGFuIGlub2RlIHBlcmhhcHMpIG9yIHRlbXBvcmFyeSBidWZmZXIuIFNtYWxsIGFsbG9jYXRpb25zIG1pZ2h0IGJlIGZvciBjb250cm9sIHN0cnVjdHVyZXMuIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGNhbGxzIHdpbGwgYmUgaW1wb3J0YW50LiBGcmVxdWVudCByZXNlcnZhdGlvbnMsIGV2ZW4gc21hbGwgb25lcywgY291bGQgc2lnbmFsIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4KCkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHJlc2VydmF0aW9ucyBhcmUgaGFwcGVuaW5nIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHRydWx5IG5lY2Vzc2FyeS4gSXMgdGhpcyBhIHByZWVtcHRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgcGVyZm9ybWFuY2UsIG9yIGEgd29ya2Fyb3VuZCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IEFyZSB0aGV5IGd1YXJkaW5nIGFnYWluc3QgYSBrbm93biBwb3RlbnRpYWwgRG9TIHZlY3Rvcj8gT2Z0ZW4sIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBpbXBsZW1lbnQgdGhlIHJlcXVpcmVtZW50LCBJJiMzOTttIHN1cmUgSSYjMzk7ZCBmaW5kIGl0LgoKVWx0aW1hdGVseSwgSSYjMzk7bSBkaWdnaW5nIGZvciBpbmVmZmljaWVuY2llcywgcG90ZW50aWFsIGJ1Z3MsIG9yIGRlc2lnbiBmbGF3cyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIHRvIG9wdGltaXplLCByZWZhY3Rvciwgb3IgcGVyaGFwcyBldmVuIHJld3JpdGUgdGhlc2UgYXJlYXMgdG8gdXNlIG1vcmUgbW9kZXJuIGtlcm5lbCBtZWNoYW5pc21zLCByZWR1Y2luZyBvdmVyaGVhZCBhbmQgaW1wcm92aW5nIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlc2UgdXNlcyBhcmUgbGVnaXRpbWF0ZSBvciBhcmUgaGlkaW5nIGEgbGFyZ2VyIGlzc3VlIHRoYXQgd2lsbCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttYWxsb2NfcmVzZXJ2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTU5MT1zdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYwMi0vKlxubmV0L2NvcmUvc2tidWZmLmM6NjAzOiAqIGttYWxsb2NfcmVzZXJ2ZSBpcyBhIHdyYXBwZXIgYXJvdW5kIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIgdGhhdCB0ZWxsc1xubmV0L2NvcmUvc2tidWZmLmMtNjA0LSAqIHRoZSBjYWxsZXIgaWYgZW1lcmdlbmN5IHBmbWVtYWxsb2MgcmVzZXJ2ZXMgYXJlIGJlaW5nIHVzZWQuIElmIGl0IGlzIGFuZFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYwOC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjYwOTpzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxubmV0L2NvcmUvc2tidWZmLmMtNjEwLVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02Nzc9c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTctXHQgKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjcxODpcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIG5vZGUsIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MTktXHRpZiAodW5saWtlbHkoIWRhdGEpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyOTE9aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjMwOC1cbm5ldC9jb3JlL3NrYnVmZi5jOjIzMDk6XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtMjMxMC1cdGlmICghZGF0YSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02ODEzPXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjgyMy1cbm5ldC9jb3JlL3NrYnVmZi5jOjY4MjQ6XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtNjgyNS1cdGlmICghZGF0YSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02OTM0PXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjk0NS1cbm5ldC9jb3JlL3NrYnVmZi5jOjY5NDY6XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtNjk0Ny1cdGlmICghZGF0YSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzY2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdHdlYWtpbmcgaG93IGBza2JgIGRhdGEgbWVtb3J5IGlzIGFsbG9jYXRlZCwgc3BlY2lmaWNhbGx5IHN3aXRjaGluZyBpdCBvdmVyIHRvIHVzZSBhIGRlZGljYXRlZCBga21lbWAgYnVja2V0LiBGdW5jdGlvbmFsbHksIHRoaXMgKmlzKiBhIGNoYW5nZSDigJMgd2UmIzM5O3JlIGFsdGVyaW5nIHRoZSBhbGxvY2F0b3IgaXRzZWxmLCBub3QganVzdCBzdGlja2luZyB3aXRoIHRoZSBnZW5lcmFsIGBrbWFsbG9jYCBtZXRob2QuIEJ1dCwgaXQgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IGFsbG9jYXRpb24gZGV0YWlsLiBJdCBkb2VzbiYjMzk7dCBhY3R1YWxseSB0b3VjaCBhbnkgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgbG9naWMuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0ICpkb24mIzM5O3QqIGFsdGVyIGV4ZWN1dGlvbi4gRG9lcyB0aGlzIGNvdW50PyBJdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGFsbG9jYXRvciBmdW5jdGlvbiBiZWluZyBjYWxsZWQuCgpXYWl0LCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludDogdGhpcyBpcyBhIHNlY3VyaXR5IG1pdGlnYXRpb24uIGBrbWVtX2J1Y2tldHNgIGFyZSB1c2VkIGZvciBoZWFwIGlzb2xhdGlvbiwgc28gdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHdheSB3ZSBhcHByb2FjaCBmdXp6aW5nIHRoaXMgY29kZS4gSXQgcHJvYmFibHkgd29u4oCZdCBiZSB0aGF0IGZydWl0ZnVsIGZvciBnZW5lcmFsIGZ1enppbmcuIFVubGVzcyB3ZSYjMzk7cmUgc3BlY2lmaWNhbGx5IGh1bnRpbmcgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB0aGlzIG5ldyBhbGxvY2F0aW9uIG1ldGhvZCBtaWdodCBub3cgbWl0aWdhdGUgb3IgY2F1c2UgdG8gYmVoYXZlIGRpZmZlcmVudGx5LgoKTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgcmVsYXRlZCBjb25maWdzLiBDb3VsZCBgQ09ORklHX1NMQUJfQlVDS0VUU2AgYmUgaW52b2x2ZWQgaGVyZT8gSSYjMzk7bGwgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2J1Y2tldHNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTg2OT12b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqcCk7XG5pbmNsdWRlL2xpbnV4L3NsYWIuaC04NzAtXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4NzE6a21lbV9idWNrZXRzICprbWVtX2J1Y2tldHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg3Mi1cdFx0XHRcdCAgdW5zaWduZWQgaW50IHVzZXJvZmZzZXQsIHVuc2lnbmVkIGludCB1c2Vyc2l6ZSxcbi0tXG5pcGMvbXNndXRpbC5jPTQ0PXN0YXRpYyBpbnQgX19pbml0IGluaXRfbXNnX2J1Y2tldHModm9pZClcbmlwYy9tc2d1dGlsLmMtNDUte1xuaXBjL21zZ3V0aWwuYzo0NjpcdG1zZ19idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcJiMzNDttc2dfbXNnXCYjMzQ7LCBTTEFCX0FDQ09VTlQsXG5pcGMvbXNndXRpbC5jLTQ3LVx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgbXNnX21zZyksXG4tLVxubW0vc2xhYl9jb21tb24uYz00MDQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2J1Y2tldHNfY2FjaGUgX19yb19hZnRlcl9pbml0O1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDA2LS8qKlxubW0vc2xhYl9jb21tb24uYzo0MDc6ICoga21lbV9idWNrZXRzX2NyZWF0ZSAtIENyZWF0ZSBhIHNldCBvZiBjYWNoZXMgdGhhdCBoYW5kbGUgZHluYW1pYyBzaXplZFxubW0vc2xhYl9jb21tb24uYy00MDgtICpcdFx0XHQgYWxsb2NhdGlvbnMgdmlhIGttZW1fYnVja2V0c19hbGxvYygpXG4tLVxubW0vc2xhYl9jb21tb24uYy00MjQtICovXG5tbS9zbGFiX2NvbW1vbi5jOjQyNTprbWVtX2J1Y2tldHMgKmttZW1fYnVja2V0c19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc2xhYl9mbGFnc190IGZsYWdzLFxubW0vc2xhYl9jb21tb24uYy00MjYtXHRcdFx0XHQgIHVuc2lnbmVkIGludCB1c2Vyb2Zmc2V0LFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNTAyLX1cbm1tL3NsYWJfY29tbW9uLmM6NTAzOkVYUE9SVF9TWU1CT0woa21lbV9idWNrZXRzX2NyZWF0ZSk7XG5tbS9zbGFiX2NvbW1vbi5jLTUwNC1cbi0tXG5tbS91dGlsLmM9MjAwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfdXNlcl9idWNrZXRzKHZvaWQpXG5tbS91dGlsLmMtMjAxLXtcbm1tL3V0aWwuYzoyMDI6XHR1c2VyX2J1Y2tldHMgPSBrbWVtX2J1Y2tldHNfY3JlYXRlKFwmIzM0O21lbWR1cF91c2VyXCYjMzQ7LCAwLCAwLCBJTlRfTUFYLCBOVUxMKTtcbm1tL3V0aWwuYy0yMDMtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTE5Mz12b2lkIF9faW5pdCBza2JfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUyMjAtXHRcdFx0XHRcdFx0TlVMTCk7XG5uZXQvY29yZS9za2J1ZmYuYzo1MjIxOlx0c2tiX2RhdGFfYnVja2V0cyA9IGttZW1fYnVja2V0c19jcmVhdGUoXCYjMzQ7c2tiX2RhdGFcJiMzNDssIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpO1xubmV0L2NvcmUvc2tidWZmLmMtNTIyMi1cdHNrYl9leHRlbnNpb25zX2luaXQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBrbWVtX2J1Y2tldHNfY3JlYXRlYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGttZW1fYnVja2V0c19jcmVhdGVgIGZ1bmN0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGtub2IsIHNvbWV0aGluZyBJIG1pZ2h0IGJlIGFibGUgdG8gdHdlYWssIHRoYXQgZGlyZWN0bHkgY29udHJvbHMgaXRzIGJlaGF2aW9yIG9yIHBhcmFtZXRlcnMuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBzbyBmaW5kaW5nIHRoZSByaWdodCBjb25maWcgd291bGQgZ2l2ZSBtZSBzZXJpb3VzIGNvbnRyb2wgb3ZlciBpdHMgcGVyZm9ybWFuY2UuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYnVja2V0IHNpemVzLCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBvdmVyYWxsIG1lbW9yeSBsaW1pdHMg4oCTIHRoaW5ncyBJJiMzOTt2ZSB0d2Vha2VkIGJlZm9yZSB3aXRoIG90aGVyIG1lbW9yeSBhbGxvY2F0b3JzLiBTbywgSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgdGhlIGxvdy1oYW5naW5nIGZydWl0IHdoZW4gaXQgY29tZXMgdG8gaW5mbHVlbmNpbmcgaG93IGBrbWVtX2J1Y2tldHNfY3JlYXRlYCBvcGVyYXRlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgaW4gdGhlIGtlcm5lbCBjb25maWcgdGhhdCBJIGNhbiBtb2RpZnkgd2l0aG91dCB0b28gbXVjaCByaXNrPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2J1Y2tldHNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQwNi0vKipcbm1tL3NsYWJfY29tbW9uLmM6NDA3OiAqIGttZW1fYnVja2V0c19jcmVhdGUgLSBDcmVhdGUgYSBzZXQgb2YgY2FjaGVzIHRoYXQgaGFuZGxlIGR5bmFtaWMgc2l6ZWRcbm1tL3NsYWJfY29tbW9uLmMtNDA4LSAqXHRcdFx0IGFsbG9jYXRpb25zIHZpYSBrbWVtX2J1Y2tldHNfYWxsb2MoKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDI0LSAqL1xubW0vc2xhYl9jb21tb24uYzo0MjU6a21lbV9idWNrZXRzICprbWVtX2J1Y2tldHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcbm1tL3NsYWJfY29tbW9uLmMtNDI2LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgdXNlcm9mZnNldCxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTUwMi19XG5tbS9zbGFiX2NvbW1vbi5jOjUwMzpFWFBPUlRfU1lNQk9MKGttZW1fYnVja2V0c19jcmVhdGUpO1xubW0vc2xhYl9jb21tb24uYy01MDQtXG4tLVxubW0vdXRpbC5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3VzZXJfYnVja2V0cyh2b2lkKVxubW0vdXRpbC5jLTIwMS17XG5tbS91dGlsLmM6MjAyOlx0dXNlcl9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcJiMzNDttZW1kdXBfdXNlclwmIzM0OywgMCwgMCwgSU5UX01BWCwgTlVMTCk7XG5tbS91dGlsLmMtMjAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDkwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6CgoqKkNoZWNraW5nIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBga21lbV9idWNrZXRzX2NyZWF0ZWAgaXMgY29uZGl0aW9uYWwgb24gYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgbWUgdHJvdWJsZXNob290IHBvdGVudGlhbCBpc3N1ZXMsIHVuZGVyc3RhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBtYXliZSBldmVuIG9wdGltaXplIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TTEFCX0JVQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTEwMT1DT05GSUdfWlNNQUxMT0NfU1RBVD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTAyOkNPTkZJR19TTEFCX0JVQ0tFVFM9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTEwMy1DT05GSUdfU0xVQl9TVEFUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTk1PUNPTkZJR19aU01BTExPQ19TVEFUPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo5NjpDT05GSUdfU0xBQl9CVUNLRVRTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy05Ny0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD05MTI9dW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxNS0gKiBUaGVzZSBtYWNyb3MgYWxsb3cgZGVjbGFyaW5nIGEga21lbV9idWNrZXRzICogcGFyYW1ldGVyIGFsb25nc2lkZSBzaXplLCB3aGljaFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE2OiAqIGNhbiBiZSBjb21waWxlZCBvdXQgd2l0aCBDT05GSUdfU0xBQl9CVUNLRVRTPW4gc28gdGhhdCBhIGxhcmdlIG51bWJlciBvZiBjYWxsXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MTctICogc2l0ZXMgZG9uJiMzOTt0IGhhdmUgdG8gcGFzcyBOVUxMLlxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTE4LSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE5OiNpZmRlZiBDT05GSUdfU0xBQl9CVUNLRVRTXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MjAtI2RlZmluZSBERUNMX0JVQ0tFVF9QQVJBTVMoX3NpemUsIF9iKVx0c2l6ZV90IChfc2l6ZSksIGttZW1fYnVja2V0cyAqKF9iKVxuLS1cbmtlcm5lbC9jb25maWdzL2hhcmRlbmluZy5jb25maWc9MjI9Q09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORUQ9eVxua2VybmVsL2NvbmZpZ3MvaGFyZGVuaW5nLmNvbmZpZzoyMzpDT05GSUdfU0xBQl9CVUNLRVRTPXlcbmtlcm5lbC9jb25maWdzL2hhcmRlbmluZy5jb25maWctMjQtQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1I9eVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQyMC0gKiBSZXR1cm46IGEgcG9pbnRlciB0byB0aGUgY2FjaGUgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLiBXaGVuXG5tbS9zbGFiX2NvbW1vbi5jOjQyMTogKiBDT05GSUdfU0xBQl9CVUNLRVRTIGlzIG5vdCBlbmFibGVkLCBaRVJPX1NJWkVfUFRSIGlzIHJldHVybmVkLCBhbmRcbm1tL3NsYWJfY29tbW9uLmMtNDIyLSAqIHN1YnNlcXVlbnQgY2FsbHMgdG8ga21lbV9idWNrZXRzX2FsbG9jKCkgd2lsbCBmYWxsIGJhY2sgdG8ga21hbGxvYygpLlxuLS1cbm1tL3NsYWJfY29tbW9uLmM9NDI1PWttZW1fYnVja2V0cyAqa21lbV9idWNrZXRzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXG4tLVxubW0vc2xhYl9jb21tb24uYy00NDAtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6NDQxOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTEFCX0JVQ0tFVFMpKVxubW0vc2xhYl9jb21tb24uYy00NDItXHRcdHJldHVybiBaRVJPX1NJWkVfUFRSO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9OTk0PXZvaWQgX19pbml0IGNyZWF0ZV9rbWFsbG9jX2NhY2hlcyh2b2lkKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTAxOS1cbm1tL3NsYWJfY29tbW9uLmM6MTAyMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTEFCX0JVQ0tFVFMpKVxubW0vc2xhYl9jb21tb24uYy0xMDIxLVx0XHRrbWVtX2J1Y2tldHNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtrbWFsbG9jX2J1Y2tldHNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgQ09ORklHX1NMQUJfQlVDS0VUU2AgSW1wYWN0IG9uIE5ldHdvcmtpbmcqKgoKT2theSwgc28gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIGBrbWVtX2J1Y2tldHNfY3JlYXRlYCByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYCwgYW5kIGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIHJldmVydHMgdG8gYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLiBUbyB0ZXN0IHRoZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyBlbmFibGVkIGR1cmluZyB0ZXN0aW5nLgoKTm93LCBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCBpcyB1c2VkIGJ5IGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCwgYm90aCBvZiB3aGljaCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGZpbmQgdGhlIGV4cG9ydGVkIG9yIGdsb2JhbCBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBjYWxsIHRoZXNlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZSBgX19hbGxvY19za2JgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgLCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zLiBHaXZlbiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgZnV6emluZyBzZWVtcyBsaWtlIGEgdmFsaWQgYXBwcm9hY2ggdG8gc3RyZXNzLXRlc3QgaXQuCgpGb2N1c2luZyBvbiBzcGVjaWZpYyBzeW1ib2xzIGZvciBmdXp6aW5nLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBfX2FsbG9jX3NrYmAgYW5kIGBwc2tiX2V4cGFuZF9oZWFkYC4gSG93ZXZlciwgYF9fYWxsb2Nfc2tiYCBpcyBhICp2ZXJ5KiBob3QtcGF0aCBmdW5jdGlvbiwgYW5kIHRoZSBkaXJlY3Rpb25zIHN1Z2dlc3QgYXZvaWRpbmcgdGhvc2UuIGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbHNvIHF1aXRlIGNvbW1vbi4gTWF5YmUgSSBzaG91bGQgaG9sZCBvZmYgb24gbGlzdGluZyBhbnkgaWYgdGhleSBhcmUgYWxsIGhvdCBwYXRocz8gTGV0JiMzOTtzIHNlZSBpZiB0aGUgb3RoZXIgdHdvIGFyZSBsZXNzIGNvbW1vbi4KCmBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYCBzZWVtIGxlc3MgZnJlcXVlbnRseSBjYWxsZWQuIEkgc2hvdWxkIGxvb2sgaW50byB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02ODEwPUVYUE9SVF9TWU1CT0woYWxsb2Nfc2tiX3dpdGhfZnJhZ3MpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXHUwMDNjIGhlYWRsZW4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4MTM6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXHRcdFx0XHQgICAgY29uc3QgaW50IGhlYWRsZW4sIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDIyLVx0aWYgKGxlbiBcdTAwM2MgaGVhZGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMjM6XHRcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MDI0LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqUG90ZW50aWFsIERhdGEgQ2FydmluZyBGdW5jdGlvbnMgYW5kIFRoZWlyIENhbGxlcnMqKgoKSG1tLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgZGF0YSBpcyBoYW5kbGVkIHdoZW4gYSBwYWNrZXQgaXMgY29waWVkIG9uIHdyaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IEkgYmVsaWV2ZSBgcHNrYl9jYXJ2ZWAgbWlnaHQgYmUgaW52b2tlZCBieSBgc2tiX2Nvd19kYXRhYCB3aGVuIGEgcGFja2V0IG5lZWRzIGl0cyBkYXRhIGNhcnZlZCBvciBtYXliZSBpdCYjMzk7cyBgcHNrYl9leHRyYWN0YCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBmdW5jdGlvbiBjYWxscyBmb3IgdGhlIENvcHktT24tV3JpdGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bza2JfY2FydmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02ODEwPUVYUE9SVF9TWU1CT0woYWxsb2Nfc2tiX3dpdGhfZnJhZ3MpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXHUwMDNjIGhlYWRsZW4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4MTM6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXHRcdFx0XHQgICAgY29uc3QgaW50IGhlYWRsZW4sIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzUtXG5uZXQvY29yZS9za2J1ZmYuYzo2ODc2OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLCBnZnBfdCBnZnApO1xubmV0L2NvcmUvc2tidWZmLmMtNjg3Ny1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzgtLyogY2FydmUgb3V0IHRoZSBmaXJzdCBlYXQgYnl0ZXMgZnJvbSBza2ImIzM5O3MgZnJhZ19saXN0LiBNYXkgcmVjdXJzZSBpbnRvXG5uZXQvY29yZS9za2J1ZmYuYzo2ODc5OiAqIHBza2JfY2FydmUoKVxubmV0L2NvcmUvc2tidWZmLmMtNjg4MC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4ODE6c3RhdGljIGludCBwc2tiX2NhcnZlX2ZyYWdfbGlzdChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8sIGludCBlYXQsXG5uZXQvY29yZS9za2J1ZmYuYy02ODgyLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjkwOS1cdFx0XHR9XG5uZXQvY29yZS9za2J1ZmYuYzo2OTEwOlx0XHRcdGlmIChwc2tiX2NhcnZlKGxpc3QsIGVhdCwgZ2ZwX21hc2spIFx1MDAzYyAwKSB7XG5uZXQvY29yZS9za2J1ZmYuYy02OTExLVx0XHRcdFx0a2ZyZWVfc2tiKGNsb25lKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02OTMzLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjkzNDpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNjkzNS1cdFx0XHRcdCAgICAgICBpbnQgcG9zLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02OTkwLVx0Lyogc3BsaXQgbGluZSBpcyBpbiBmcmFnIGxpc3QgKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY5OTE6XHRpZiAoayA9PSAwIFx1MDAyNlx1MDAyNiBwc2tiX2NhcnZlX2ZyYWdfbGlzdChzaGluZm8sIG9mZiAtIHBvcywgZ2ZwX21hc2spKSB7XG5uZXQvY29yZS9za2J1ZmYuYy02OTkyLVx0XHQvKiBza2JfZnJhZ191bnJlZigpIGlzIG5vdCBuZWVkZWQgaGVyZSBhcyBzaGluZm8tXHUwMDNlbnJfZnJhZ3MgPSAwLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMTctLyogcmVtb3ZlIGxlbiBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNrYiAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzAxODpzdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxubmV0L2NvcmUvc2tidWZmLmMtNzAxOS17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzAyMi1cdGlmIChsZW4gXHUwMDNjIGhlYWRsZW4pXG5uZXQvY29yZS9za2J1ZmYuYzo3MDIzOlx0XHRyZXR1cm4gcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHNrYiwgbGVuLCBoZWFkbGVuLCBnZnApO1xubmV0L2NvcmUvc2tidWZmLmMtNzAyNC1cdGVsc2Vcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMjU6XHRcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MDI2LX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDMxPXN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDM4LVxubmV0L2NvcmUvc2tidWZmLmM6NzAzOTpcdGlmIChwc2tiX2NhcnZlKGNsb25lLCBvZmYsIGdmcCkgXHUwMDNjIDAgfHxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDAtXHQgICAgcHNrYl90cmltKGNsb25lLCB0b19jb3B5KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjkzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgU3RhY2s6IEEgUmVjdXJzaXZlIERpdmUqKgoKT2theSwgc28gYHBza2JfZXh0cmFjdGAgaXMgY2FsbGluZyBpdHNlbGYuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IHRoZSByZWN1cnNpb24/JiMzNDsgSXMgdGhpcyBpbnRlbnRpb25hbCwgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIG9yIGEgcG90ZW50aWFsIGJ1ZyB0aGF0JiMzOTtzIGNyZWF0aW5nIGFuIGluZmluaXRlIGxvb3A/IEdpdmVuIHRoYXQgYHBza2JfZXh0cmFjdGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGl0c2VsZiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHRyYWNlIGl0IGFuZCBkZXRlcm1pbmUgd2hlcmUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlIOKAkyBJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYHBza2JfZXh0cmFjdGAgaXMgYmVpbmcgY2FsbGVkIGluIHRoZSBjb2RlYmFzZSB0byBwcm9wZXJseSBhbmFseXplIHRoaXMgYW5kLCBwZXJoYXBzLCByZWZpbmUgdGhpcyBjcml0aWNhbCBmdW5jdGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGNvZGUsIGdpdmVuIHRoZSBjYWxsIHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2V4dHJhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPWludCBza2JfbXBsc19kZWNfdHRsKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk0OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IHRvX2NvcHksXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyOTUtXHRcdFx0ICAgICBnZnBfdCBnZnApO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDMwLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzAzMTpzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9leHRyYWN0KHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsXG5uZXQvY29yZS9za2J1ZmYuYy03MDMyLVx0XHRcdCAgICAgaW50IHRvX2NvcHksIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcwNDY6RVhQT1JUX1NZTUJPTChwc2tiX2V4dHJhY3QpO1xubmV0L2NvcmUvc2tidWZmLmMtNzA0Ny1cbi0tXG5uZXQvcmRzL3RjcF9yZWN2LmM9MTU1PXN0YXRpYyBpbnQgcmRzX3RjcF9kYXRhX3JlY3YocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jLTIxOC1cbm5ldC9yZHMvdGNwX3JlY3YuYzoyMTk6XHRcdFx0Y2xvbmUgPSBwc2tiX2V4dHJhY3Qoc2tiLCBvZmZzZXQsIHRvX2NvcHksIGFyZy1cdTAwM2VnZnApO1xubmV0L3Jkcy90Y3BfcmVjdi5jLTIyMC1cdFx0XHRpZiAoIWNsb25lKSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTUzMj1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYwLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU2MTogKiBpcHRmc19wc2tiX2V4dHJhY3Rfc2VxKCkgLSBDcmVhdGUgYW5kIGxvYWQgZGF0YSBpbnRvIGEgbmV3IHNrX2J1ZmYuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYyLSAqIEBza2JsZW46IHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIGBza2JgLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NzY9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Nzc6aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTc4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTQyPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzMC1cdFx0XHRcdFx0XHRcdCBza2JzZXEsIGlwaGxlbikpKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTEzMTpcdFx0XHRcdHNrYiA9IGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoaXBsZW4sIHNrYnNlcSwgZGF0YSwgY2FwdHVyZWxlbik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzMi1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTS0IgQWxsb2NhdGlvbiBQb2ludHMgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgZnV6emluZyBlZmZvcnRzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCBjaGFuZ2luZyB0aGUgU0tCIGRhdGEgYWxsb2NhdG9yLiBJbml0aWFsbHksIEkgd2FzIGNvbnNpZGVyaW5nIGBwc2tiX2V4dHJhY3RgLCBzaW5jZSBpdCYjMzk7cyB1c2VkIGluIFJEUyBhbmQgWEZSTSwgYW5kIEkga25vdyBpdCBsZXZlcmFnZXMgYHBza2JfY2FydmVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBrbWFsbG9jX3Jlc2VydmVgLiBBbHNvLCBJJiMzOTtkIG5vdGVkIHRoYXQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgIGFyZSBhbHNvIGluIHBsYXkgaGVyZS4KClRoZW4sIEkgd2FzIGNvbnNpZGVyaW5nIGBwc2tiX2V4cGFuZF9oZWFkYCwgYmVjYXVzZSB0aGF0IGFuZCBgX19hbGxvY19za2JgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIFNLQiBhbGxvY2F0aW9uLCBhbmQgdGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBfX2FsbG9jX3NrYmAgYXJlIGxpa2VseSB0byBiZSBob3Qgc3BvdHMuIEJ1dCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IHRoZSBzY29wZSBvZiB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgdGhlIGFsbG9jYXRpb24gY2hhbmdlIHdpbGwgYmUgaGl0IGJ5ICphbnkqIFNLQiBhbGxvY2F0aW9uLiBTbywgdGFyZ2V0aW5nIHNwZWNpZmljIG9ic2N1cmUgZnVuY3Rpb25zIG1pZ2h0IGJlIGxlc3MgaW1wb3J0YW50IHRoYW4ganVzdCBlbnN1cmluZyBnZW5lcmFsIFNLQiBhbGxvY2F0aW9uIGhhcHBlbnMgZHVyaW5nIHRlc3RpbmcuCgpCdXQsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBMaXN0aW5nIGBfX2FsbG9jX3NrYmAgd291bGQgZGVmaW5pdGVseSBza2V3IHRoaW5ncywgc28gSSBzaG91bGQgb21pdCB0aGF0LgoKT2theSwgbGV0JiMzOTtzIHJldmlzaXQgYHBza2JfZXhwYW5kX2hlYWRgLiBJdCYjMzk7cyBsZXNzIGhvdCB0aGFuIGBfX2FsbG9jX3NrYmAsIGJ1dCBzdGlsbCB1c2VkIGEgbG90LiBUaGVuIHRoZXJlJiMzOTtzIGBwc2tiX2V4dHJhY3RgLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCBhIGhvdCBmdW5jdGlvbi4gSXQgYWxzbyBjYWxscyBga21hbGxvY19yZXNlcnZlYC4gSSBjb3VsZCBmdXp6IHRob3NlLiBHaXZlbiB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9ucywgSSB0aGluayB0aGF0IGxpc3RpbmcgYHBza2JfZXh0cmFjdGAgYW5kIGBwc2tiX2V4cGFuZF9oZWFkYCB3aWxsIHByb3ZpZGUgYSBnb29kIGJhbGFuY2Ugb2YgY292ZXJhZ2Ugd2l0aG91dCBvdmVyLWVtcGhhc2l6aW5nIHRoZSBtb3N0IGNvbW1vbiBhbGxvY2F0aW9uIHBhdGhzLiBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIGJlc3Qgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX3BmbWVtYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz01ODk9c3RhdGljIGttZW1fYnVja2V0cyAqc2tiX2RhdGFfYnVja2V0cyBfX3JvX2FmdGVyX2luaXQ7XG5uZXQvY29yZS9za2J1ZmYuYy01OTAtXG5uZXQvY29yZS9za2J1ZmYuYzo1OTE6c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbm5ldC9jb3JlL3NrYnVmZi5jLTU5Mi17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjI2LVx0XHRcdHNrYi1cdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcbm5ldC9jb3JlL3NrYnVmZi5jOjYyNzpcdFx0cmV0dXJuIGttYWxsb2NfcGZtZW1hbGxvYygwLCBmbGFncywgbm9kZSk7XG5uZXQvY29yZS9za2J1ZmYuYy02MjgtXHR9XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQ4LVx0XHRza2ItXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XG5uZXQvY29yZS9za2J1ZmYuYzo2NDk6XHRvYmogPSBrbWFsbG9jX3BmbWVtYWxsb2Mob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTY1MC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBga21hbGxvY19yZXNlcnZlYCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFJpZ2h0LCBhbmQgYGttYWxsb2NfcmVzZXJ2ZWAgaXMgaW52b2tlZCBieSBgX19hbGxvY19za2JgLCBhbmQgdGhlbiBieSBhIGNsdXN0ZXIgb2YgcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgcHNrYl9leHBhbmRfaGVhZGAsIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgLCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAuICBUaGVyZWZvcmUsIGlmIEkmIzM5O20gdHJ5aW5nIHRvIG5hcnJvdyBkb3duIGludGVyZXN0aW5nIHN5bWJvbHMsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHBza2JfZXh0cmFjdGAgKGJlY2F1c2UgaXQgY2FsbHMgYHBza2JfY2FydmVgKSwgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYCBzZWVtIHRvIGJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLgoKSG1tLCBidXQgd2FpdC4gYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgIGFyZSAqc3RhdGljKiBmdW5jdGlvbnMuICBEb2VzIHRoYXQgcG9zZSBhIHByb2JsZW0gZm9yIGZ1enppbmc/ICBDYW4gd2UgaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0PyAgWWVzLCBzeXprYWxsZXIgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgaXQgc2hvdWxkIGJlIGZpbmUuIFRoYXQmIzM5O3MgZ29vZC4KClNvIHRoZW4sIGBwc2tiX2V4dHJhY3RgIGFuZCBgcHNrYl9leHBhbmRfaGVhZGAgYXJlIGV4cG9ydGVkIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBsaXN0aW5nLiAgTGV0JiMzOTtzIGFkZCB0aG9zZSB0byB0aGUgbGlzdC4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zPyBgQ09ORklHX1NMQUJfQlVDS0VUU2Agc2VlbXMgcmVsZXZhbnQgaGVyZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHRvIGV2ZW4gZXhpc3QuIFllcCwgdGhhdCYjMzk7cyByZXF1aXJlZC4gIEdvb2QsIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLiAgQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSBkZXBlbmRlbmNpZXM/IE5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdC4gIExldCYjMzk7cyBjaGVjayB3aGF0IGBDT05GSUdfU0xBQl9CVUNLRVRTYCBkZXBlbmRzIG9uLCB0byBzZWUgaWYgd2UgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0xBQl9CVUNLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG4tLVxubW0vS2NvbmZpZy0yMjAtXG5tbS9LY29uZmlnOjIyMTpjb25maWcgU0xBQl9CVUNLRVRTXG5tbS9LY29uZmlnLTIyMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBTTEFCX0JVQ0tFVFMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIHNvbWV0aGluZywgYW5kIHRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWZ0ZXIgYFNMQUJfQlVDS0VUU2AuIEl0JiMzOTtzIGEga2V5IHZhcmlhYmxlIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLiBXaGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgaXRzIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBTTEFCIGFsbG9jYXRvciBhcmNoaXRlY3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFx0aGVscFxuIDIxNjpcdFx0ICBNYW55IGtlcm5lbCBoZWFwIGF0dGFja3MgdHJ5IHRvIHRhcmdldCBzbGFiIGNhY2hlIG1ldGFkYXRhIGFuZFxuIDIxNzpcdFx0ICBvdGhlciBpbmZyYXN0cnVjdHVyZS4gVGhpcyBvcHRpb25zIG1ha2VzIG1pbm9yIHBlcmZvcm1hbmNlXG4gMjE4Olx0XHQgIHNhY3JpZmljZXMgdG8gaGFyZGVuIHRoZSBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgYWdhaW5zdCBjb21tb25cbiAyMTk6XHRcdCAgZnJlZWxpc3QgZXhwbG9pdCBtZXRob2RzLlxuIDIyMDpcdFxuIDIyMTpcdGNvbmZpZyBTTEFCX0JVQ0tFVFNcbiAyMjI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG4gMjIzOlx0XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbiAyMjQ6XHRcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxuIDIyNTpcdFx0aGVscFxuIDIyNjpcdFx0ICBLZXJuZWwgaGVhcCBhdHRhY2tzIGZyZXF1ZW50bHkgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gY3JlYXRlXG4gMjI3Olx0XHQgIHNwZWNpZmljYWxseS1zaXplZCBhbGxvY2F0aW9ucyB3aXRoIHVzZXItY29udHJvbGxlZCBjb250ZW50c1xuIDIyODpcdFx0ICB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGludG8gdGhlIHNhbWUga21hbGxvYyBidWNrZXQgYXMgYVxuIDIyOTpcdFx0ICB0YXJnZXQgb2JqZWN0LiBUbyBhdm9pZCBzaGFyaW5nIHRoZXNlIGFsbG9jYXRpb24gYnVja2V0cyxcbiAyMzA6XHRcdCAgcHJvdmlkZSBhbiBleHBsaWNpdGx5IHNlcGFyYXRlZCBzZXQgb2YgYnVja2V0cyB0byBiZSB1c2VkIGZvclxuIDIzMTpcdFx0ICB1c2VyLWNvbnRyb2xsZWQgYWxsb2NhdGlvbnMuIFRoaXMgbWF5IHZlcnkgc2xpZ2h0bHkgaW5jcmVhc2VcbiAyMzI6XHRcdCAgbWVtb3J5IGZyYWdtZW50YXRpb24sIHRob3VnaCBpbiBwcmFjdGljZSBpdCYjMzk7cyBvbmx5IGEgaGFuZGZ1bFxuIDIzMzpcdFx0ICBvZiBleHRyYSBwYWdlcyBzaW5jZSB0aGUgYnVsayBvZiB1c2VyLWNvbnRyb2xsZWQgYWxsb2NhdGlvbnNcbiAyMzQ6XHRcdCAgYXJlIHJlbGF0aXZlbHkgbG9uZy1saXZlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogRnV6emluZyB0aGUgU0tCIERhdGEgQWxsb2NhdG9yIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIGAhU0xVQl9USU5ZYCwgbWVhbmluZyB3ZSBuZWVkIGBTTEFCX0JVQ0tFVFNgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhpcyBuZXcgY29kZSBwYXRoIHdoZXJlIHRoZSBjaGFuZ2UgZnJvbSBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaXMgbWFkZSB0byB1c2luZyBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCwgYW5kIHRoZXJlZm9yZSBga21lbV9idWNrZXRzX2NyZWF0ZWAuIElmIGBTTEFCX0JVQ0tFVFNgIGlzbiYjMzk7dCBzZXQsIHRoZW4gYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgc2ltcGx5IGZhbGxzIGJhY2sgdG8gYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLCBzbyBlbmFibGluZyBgU0xBQl9CVUNLRVRTYCBpcyBjcml0aWNhbCBmb3IgdGVzdGluZyB0aGUgcGF0Y2guIEl0JiMzOTtzIGFsd2F5cyBjb21waWxlZC4KClRoZSBwYXRjaCBpdHNlbGYgaXMgcmVsYXRpdmVseSBzaW1wbGU6IGl0IHN3YXBzIG91dCB0aGUgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIHRoZSBjYWxsIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGZyb20gdGhlIG9sZCBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgY2FsbCB0byB1c2UgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaW5zdGVhZCwgcGFzc2luZyBpbiBgc2tiX2RhdGFfYnVja2V0c2AuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY2hhbmdlIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBTS0IgZGF0YSwgbWVhbmluZyBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nISBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3Igb2YgU0tCIGRhdGEgYnVmZmVycy4gQW55IGJ1Z3MgaW4gdGhpcyAqbmV3KiBhbGxvY2F0b3Igb3IgaXRzIGludGVyYWN0aW9uIHdpdGggU0tCIGFsbG9jYXRpb24gY291bGQgYmUgZXhwb3NlZCB0aHJvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgaG93IGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgU0tCIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSB0aGUgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzLCBsaWtlIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfZXh0cmFjdGAsIGFzIHRoZXkgYXJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB3aGljaCBleGVyY2lzZSB0aGUgZGF0YSBidWZmZXIuIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBpbXBvcnRhbnQgdGhpbmdzIHRvIHJlbWVtYmVyIGFyZToKCiogICBGb2N1cyBzaG91bGQgYmUgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuCiogICBUaGUgZXNzZW50aWFsIGNvbmZpZyBuZWVkZWQgaXMgYFNMQUJfQlVDS0VUU2AuCiogICBUaGUgY2hhbmdlIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9MTA1MT12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1OC1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTk6I2RlZmluZSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoX2IsIF9zaXplLCBfZmxhZ3MsIF9ub2RlKVx0XFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNjAtXHRhbGxvY19ob29rcyhfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJfbm9wcm9mKFBBU1NfS01BTExPQ19QQVJBTVMoX3NpemUsIF9iLCBfX2ttYWxsb2NfdG9rZW4oX3NpemUpKSwgX2ZsYWdzLCBfbm9kZSwgX1JFVF9JUF8pKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNjItI2RlZmluZSBrbWVtX2J1Y2tldHNfYWxsb2NfdHJhY2tfY2FsbGVyKF9iLCBfc2l6ZSwgX2ZsYWdzKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE2MzpcdGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihfYiwgX3NpemUsIF9mbGFncywgTlVNQV9OT19OT0RFKVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE2NC1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01OTE9c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01OTctXHRcdFx0XHRcdCAgICAgZmxhZ3MsIG5vZGUpO1xubmV0L2NvcmUvc2tidWZmLmM6NTk4Olx0cmV0dXJuIGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSxcbm5ldC9jb3JlL3NrYnVmZi5jLTU5OS1cdFx0XHRcdFx0XHQgICAgZmxhZ3MsIG5vZGUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYwOT1zdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYzOS1cdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjQwOlx0b2JqID0ga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNrYl9kYXRhX2J1Y2tldHMsIG9ial9zaXplLFxubmV0L2NvcmUvc2tidWZmLmMtNjQxLVx0XHRcdFx0XHRmbGFncyB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDA2CgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTGFieXJpbnRoIG9mIExpbnV4IE1lbW9yeSBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGlzIGNydWNpYWwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgZGVmaW5lZC4gSG1tLCBJIHZhZ3VlbHkgcmVjYWxsIGl0IGJlaW5nIGEgY29yZSBMaW51eCBjb25zdHJ1Y3QuLi4gWWVzLCBpdCBjbGlja3MhIEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc2xhYi5oYC4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gaGVhZGVyIGZvciB0aGUgc2xhYiBhbGxvY2F0b3IsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBhbG1vc3QgY2VydGFpbmx5IGRlYWxpbmcgd2l0aCBoZXJlLiBPa2F5LCBnb29kLiBIYXZpbmcgdGhlIGxvY2F0aW9uIGhlbHBzIGVub3Jtb3VzbHk7IGl0IGF2b2lkcyB3YXN0aW5nIHRpbWUgY2hhc2luZyBmYWxzZSBsZWFkcy4KCk5vdywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgd291bGQgYmUgdG8gYXBwbHkgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhpcyB0b29sLCBJIGJlbGlldmUsIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgcmVxdWlyZSBmcm9tIHRoZSBoZWFkZXIgZmlsZSwgYW5kIHdpbGwgYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIG91dHB1dCBpbiBhIHdheSB0aGF0IEkgY2FuIGZ1cnRoZXIgYW5hbHlzZS4gSSYjMzk7bGwgdXRpbGl6ZSB0aGlzIHRvIGRldGVybWluZSB0aGUgZnVuY3Rpb25zIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMQUJfQlVDS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuIGBDT05GSUdfU0xBQl9CVUNLRVRTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgdGhlIHNlcGFyYXRlIGJ1Y2tldCBhbGxvY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTEFCX0JVQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3Bza2JfZXh0cmFjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdG9yIHVzZWQgZm9yIFNLQiBkYXRhIGJ1ZmZlcnMgdG8gdXNlIGEgZGVkaWNhdGVkIGttZW0gYnVja2V0IChgc2tiX2RhdGFfYnVja2V0c2ApIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMga21hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIFNLQiByZWFsbG9jYXRpb24gYW5kIGV4dHJhY3Rpb24gcGF0aHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBhbGxvY2F0aW9uIGJlaGF2aW9yLiBgQ09ORklHX1NMQUJfQlVDS0VUU2AgaXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZW5hYmxlIHRoZSBzZXBhcmF0ZSBidWNrZXQgYWxsb2NhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEyOjQ1LjY4NDE5ODA5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODEyNzYxMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMQUJfQlVDS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaydzIG1lbW9yeSBtYW5hZ2VtZW50LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBTS0IgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvci4gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgc2VwYXJhdGUgYnVja2V0IGFsbG9jYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEyOjQ1LjY4NDIxMTMwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzMzI5NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDcwOWRkYjQ0YjVjODBjOTkwZTEwODk5MzA3NTdhOWE3ZWU1MjQ5YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE5OjEyOjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCAxOGRhYmI0ZTljZmEwZS4uOWRjNWE4NTQ4NjgxMmQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC01ODYsNiArNTg2LDggQEAgc3RydWN0IHNrX2J1ZmYgKm5hcGlfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuYXBpX2J1aWxkX3NrYik7XFxuIFxcbitzdGF0aWMga21lbV9idWNrZXRzICpza2JfZGF0YV9idWNrZXRzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuIHtcXG4gXFx0aWYgKCFnZnBfcGZtZW1hbGxvY19hbGxvd2VkKGZsYWdzKSlcXG5AQCAtNTkzLDcgKzU5NSw4IEBAIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuIFxcdGlmICghb2JqX3NpemUpXFxuIFxcdFxcdHJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUobmV0X2hvdGRhdGEuc2tiX3NtYWxsX2hlYWRfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgZmxhZ3MsIG5vZGUpO1xcbi1cXHRyZXR1cm4ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSwgZmxhZ3MsIG5vZGUpO1xcbitcXHRyZXR1cm4ga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNrYl9kYXRhX2J1Y2tldHMsIG9ial9zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIG5vZGUpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC02MzQsNyArNjM3LDcgQEAgc3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4gXFx0ICogVHJ5IGEgcmVndWxhciBhbGxvY2F0aW9uLCB3aGVuIHRoYXQgZmFpbHMgYW5kIHdlJ3JlIG5vdCBlbnRpdGxlZFxcbiBcXHQgKiB0byB0aGUgcmVzZXJ2ZXMsIGZhaWwuXFxuIFxcdCAqL1xcbi1cXHRvYmogPSBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKG9ial9zaXplLFxcbitcXHRvYmogPSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXFxuIFxcdFxcdFxcdFxcdFxcdGZsYWdzIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTixcXG4gXFx0XFx0XFx0XFx0XFx0bm9kZSk7XFxuIFxcdGlmIChsaWtlbHkob2JqKSlcXG5AQCAtNTIxNSw2ICs1MjE4LDcgQEAgdm9pZCBfX2luaXQgc2tiX2luaXQodm9pZClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0MCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0U0tCX1NNQUxMX0hFQURfSEVBRFJPT00sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbitcXHRza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwic2tiX2RhdGFcXFwiLCBTTEFCX1BBTklDLCAwLCBJTlRfTUFYLCBOVUxMKTtcXG4gXFx0c2tiX2V4dGVuc2lvbnNfaW5pdCgpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo0Ni4zMzg1NzE1MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MTU4Mzc4MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMQUJfQlVDS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaydzIG1lbW9yeSBtYW5hZ2VtZW50LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBTS0IgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvci4gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgc2VwYXJhdGUgYnVja2V0IGFsbG9jYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDcwOWRkYjQ0YjVjODBjOTkwZTEwODk5MzA3NTdhOWE3ZWU1MjQ5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTk6MTI6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCAxOGRhYmI0ZTljZmEwZS4uOWRjNWE4NTQ4NjgxMmQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC01ODYsNiArNTg2LDggQEAgc3RydWN0IHNrX2J1ZmYgKm5hcGlfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmFwaV9idWlsZF9za2IpO1xuIFxuK3N0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xuK1xuIHN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXG4ge1xuIFx0aWYgKCFnZnBfcGZtZW1hbGxvY19hbGxvd2VkKGZsYWdzKSlcbkBAIC01OTMsNyArNTk1LDggQEAgc3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbiBcdGlmICghb2JqX3NpemUpXG4gXHRcdHJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUobmV0X2hvdGRhdGEuc2tiX3NtYWxsX2hlYWRfY2FjaGUsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MsIG5vZGUpO1xuLVx0cmV0dXJuIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcbitcdHJldHVybiBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2tiX2RhdGFfYnVja2V0cywgb2JqX3NpemUsXG4rXHRcdFx0XHRcdFx0ICAgIGZsYWdzLCBub2RlKTtcbiB9XG4gXG4gLypcbkBAIC02MzQsNyArNjM3LDcgQEAgc3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbiBcdCAqIFRyeSBhIHJlZ3VsYXIgYWxsb2NhdGlvbiwgd2hlbiB0aGF0IGZhaWxzIGFuZCB3ZSdyZSBub3QgZW50aXRsZWRcbiBcdCAqIHRvIHRoZSByZXNlcnZlcywgZmFpbC5cbiBcdCAqL1xuLVx0b2JqID0ga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihvYmpfc2l6ZSxcbitcdG9iaiA9IGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSxcbiBcdFx0XHRcdFx0ZmxhZ3MgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOLFxuIFx0XHRcdFx0XHRub2RlKTtcbiBcdGlmIChsaWtlbHkob2JqKSlcbkBAIC01MjE1LDYgKzUyMTgsNyBAQCB2b2lkIF9faW5pdCBza2JfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHRcdDAsXG4gXHRcdFx0XHRcdFx0U0tCX1NNQUxMX0hFQURfSEVBRFJPT00sXG4gXHRcdFx0XHRcdFx0TlVMTCk7XG4rXHRza2JfZGF0YV9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcInNrYl9kYXRhXCIsIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpO1xuIFx0c2tiX2V4dGVuc2lvbnNfaW5pdCgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEyOjQ2LjMzODU3MzY0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzkyNDkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRpbmtlcmluZyB3aXRoIGBuZXQvY29yZS9za2J1ZmYuY2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyBiZWNhdXNlIHdlJ3JlIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGBza2JfZGF0YV9idWNrZXRzYCwgd2hpY2ggaXMgYSBga21lbV9idWNrZXRzICpgLCBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYGttZW1fYnVja2V0c19jcmVhdGVgIHdpdGhpbiBgc2tiX2luaXRgLiBUaGlzIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmQgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgc3RyYXRlZ3kgZm9yIFNLQiBkYXRhLCByZXBsYWNpbmcgdGhlIGdlbmVyaWMgYGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgIGNhbGxzIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCB3aXRoIGBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXJgLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtZW1vcnkgYWxsb2NhdGlvbiBjaGFuZ2UgaW1wYWN0aW5nIGhvdyB3ZSBoYW5kbGUgU0tCIGRhdGEsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4gQW55IGNoYW5nZSBhdCB0aGlzIGxldmVsIGlzIGEgcG90ZW50aWFsIHZlY3Rvci4gTXkgaW5pdGlhbCBmb2N1cyBnb2VzIHRvIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGFuZCBga21hbGxvY19yZXNlcnZlYCDigJMgdGhleSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIFdhaXQsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljISBPa2F5LCBsZXQncyB2ZXJpZnkgdGhhdC4gWWVwLCB0aGV5IGFyZS4gU28sIHdoaWxlIHRoZXkncmUgdGhlIGRpcmVjdCB0YXJnZXRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8ncyBjYWxsaW5nICp0aGVtKi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSB3aGF0J3MgdWx0aW1hdGVseSB0cmlnZ2VyaW5nIHRoZXNlIGFsbG9jYXRpb24gcm91dGluZXMuIFNwZWNpZmljYWxseSwgYF9fYWxsb2Nfc2tiYCwgYGJ1aWxkX3NrYmAsIGV0Yy4sIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIHRoYXQgdWx0aW1hdGVseSBjYWxsIHRoZXNlIHN0YXRpYyBhbGxvY2F0aW9uIHJvdXRpbmVzLiBMZXQncyBzZWUgd2hvIHRoZSBjYWxsZXJzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo1MS44Nzc4MjU3ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNTAxNDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jX3BmbWVtYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTg5PXN0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU5MC1cXG5uZXQvY29yZS9za2J1ZmYuYzo1OTE6c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcXG5uZXQvY29yZS9za2J1ZmYuYy01OTIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MjYtXFx0XFx0XFx0c2tiLVxcdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcXG5uZXQvY29yZS9za2J1ZmYuYzo2Mjc6XFx0XFx0cmV0dXJuIGttYWxsb2NfcGZtZW1hbGxvYygwLCBmbGFncywgbm9kZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjI4LVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OC1cXHRcXHRza2ItXFx1MDAzZXBmbWVtYWxsb2MgPSB0cnVlO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY0OTpcXHRvYmogPSBrbWFsbG9jX3BmbWVtYWxsb2Mob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02NTAtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo1My40ODI4NDQwNzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE4MzQ0NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIG1vbm9sb2d1ZSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgYGttYWxsb2NfcmVzZXJ2ZWAgQ2FsbGVyczogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoZXNlIGBrbWFsbG9jX3Jlc2VydmVgIGNhbGxlcnMuIFRoZSBjb3JlIGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgcmVzb3VyY2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBrZXJuZWwgbWVtb3J5IHNwYWNlLiBga21hbGxvY19yZXNlcnZlYCBpc24ndCBhIGZ1bmN0aW9uIEkgdHlwaWNhbGx5IHNlZSB1c2VkIGluIGV2ZXJ5ZGF5IGNvZGUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIFwid2h5IGhlcmU/XCIgYW5kIFwid2hhdCdzIHRoZSBjb250ZXh0P1wiLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwga2VybmVsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ2llcy4gSXMgdGhpcyBmb3IgaGlnaC1hdmFpbGFiaWxpdHk/IFBlcmhhcHMgaXQgaXMgYSBwcmUtZW1wdGl2ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5P1xuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBncm91cCB0aGVzZSBjYWxsZXJzIGJhc2VkIG9uIHRoZWlyIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBzdWJzeXN0ZW1zIHRoZXkgYmVsb25nIHRvLiBBcmUgd2UgbG9va2luZyBhdCBkcml2ZXIgY29kZSwgbmV0d29yayBzdGFjayBjb21wb25lbnRzLCBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIG1vcmUgZXNvdGVyaWM/IEVhY2ggYXJlYSBnaXZlcyBtZSBhIGRpZmZlcmVudCBsZW5zIHRvIHZpZXcgdGhlIHVzYWdlIHRocm91Z2guXG5cbklmIEkgd2VyZSB0byBsb29rIGludG8gYSBwcm9ibGVtYXRpYyBhcmVhLCBJIHdvdWxkIGxvb2sgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cy4gSXMgdGhlcmUgYSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgaXMgYmVpbmcgcmVzZXJ2ZWQgZm9yIGEgc2luZ2xlIHB1cnBvc2U/IElmIHNvLCBkb2VzIGl0IGhhdmUgYSBoaWdoIGNvbnRlbnRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXNlcnZlZCBtZW1vcnkgYmVpbmcgaGVsZCwgYW5kIGZvciBob3cgbG9uZz8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGZyYWdtZW50YXRpb24/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNpemUgYW5kIHF1YW50aXR5IG9mIHRoZXNlIHJlc2VydmF0aW9ucy4gTGFyZ2UgYWxsb2NhdGlvbnMgYXJlIG9mdGVuIGluZGljYXRpdmUgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgb2Ygc3RydWN0dXJlIChhbiBpbm9kZSBwZXJoYXBzKSBvciB0ZW1wb3JhcnkgYnVmZmVyLiBTbWFsbCBhbGxvY2F0aW9ucyBtaWdodCBiZSBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzLiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjYWxscyB3aWxsIGJlIGltcG9ydGFudC4gRnJlcXVlbnQgcmVzZXJ2YXRpb25zLCBldmVuIHNtYWxsIG9uZXMsIGNvdWxkIHNpZ25hbCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHJlc2VydmF0aW9ucyBhcmUgaGFwcGVuaW5nIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHRydWx5IG5lY2Vzc2FyeS4gSXMgdGhpcyBhIHByZWVtcHRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgcGVyZm9ybWFuY2UsIG9yIGEgd29ya2Fyb3VuZCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IEFyZSB0aGV5IGd1YXJkaW5nIGFnYWluc3QgYSBrbm93biBwb3RlbnRpYWwgRG9TIHZlY3Rvcj8gT2Z0ZW4sIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBpbXBsZW1lbnQgdGhlIHJlcXVpcmVtZW50LCBJJ20gc3VyZSBJJ2QgZmluZCBpdC5cblxuVWx0aW1hdGVseSwgSSdtIGRpZ2dpbmcgZm9yIGluZWZmaWNpZW5jaWVzLCBwb3RlbnRpYWwgYnVncywgb3IgZGVzaWduIGZsYXdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEknbSBsb29raW5nIGZvciBjbHVlcyB0byBvcHRpbWl6ZSwgcmVmYWN0b3IsIG9yIHBlcmhhcHMgZXZlbiByZXdyaXRlIHRoZXNlIGFyZWFzIHRvIHVzZSBtb3JlIG1vZGVybiBrZXJuZWwgbWVjaGFuaXNtcywgcmVkdWNpbmcgb3ZlcmhlYWQgYW5kIGltcHJvdmluZyBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIHVzZXMgYXJlIGxlZ2l0aW1hdGUgb3IgYXJlIGhpZGluZyBhIGxhcmdlciBpc3N1ZSB0aGF0IHdpbGwgY2F1c2UgcHJvYmxlbXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTI6NTguMDAxMTkwNDk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzEzNTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jX3Jlc2VydmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTkxPXN0YXRpYyB2b2lkICprbWFsbG9jX3BmbWVtYWxsb2Moc2l6ZV90IG9ial9zaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MDItLypcXG5uZXQvY29yZS9za2J1ZmYuYzo2MDM6ICoga21hbGxvY19yZXNlcnZlIGlzIGEgd3JhcHBlciBhcm91bmQga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlciB0aGF0IHRlbGxzXFxubmV0L2NvcmUvc2tidWZmLmMtNjA0LSAqIHRoZSBjYWxsZXIgaWYgZW1lcmdlbmN5IHBmbWVtYWxsb2MgcmVzZXJ2ZXMgYXJlIGJlaW5nIHVzZWQuIElmIGl0IGlzIGFuZFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjA4LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjYwOTpzdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTYxMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02Nzc9c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNy1cXHQgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MTg6XFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIG5vZGUsIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzE5LVxcdGlmICh1bmxpa2VseSghZGF0YSkpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjkxPWludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjMwOC1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMzA5OlxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMTAtXFx0aWYgKCFkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjgxMz1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjgyMy1cXG5uZXQvY29yZS9za2J1ZmYuYzo2ODI0OlxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MjUtXFx0aWYgKCFkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjkzND1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjk0NS1cXG5uZXQvY29yZS9za2J1ZmYuYzo2OTQ2OlxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY5NDctXFx0aWYgKCFkYXRhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMjo1OC4zODgzMzAzNDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU4NDIyMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0d2Vha2luZyBob3cgYHNrYmAgZGF0YSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgc3dpdGNoaW5nIGl0IG92ZXIgdG8gdXNlIGEgZGVkaWNhdGVkIGBrbWVtYCBidWNrZXQuIEZ1bmN0aW9uYWxseSwgdGhpcyAqaXMqIGEgY2hhbmdlIOKAkyB3ZSdyZSBhbHRlcmluZyB0aGUgYWxsb2NhdG9yIGl0c2VsZiwgbm90IGp1c3Qgc3RpY2tpbmcgd2l0aCB0aGUgZ2VuZXJhbCBga21hbGxvY2AgbWV0aG9kLiBCdXQsIGl0IGlzIGFuIGludGVybmFsIG1lbW9yeSBhbGxvY2F0aW9uIGRldGFpbC4gSXQgZG9lc24ndCBhY3R1YWxseSB0b3VjaCBhbnkgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sncyBsb2dpYy5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCAqZG9uJ3QqIGFsdGVyIGV4ZWN1dGlvbi4gRG9lcyB0aGlzIGNvdW50PyBJdCdzIG1vZGlmeWluZyB0aGUgYWxsb2NhdG9yIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC5cblxuV2FpdCwgaGVyZSdzIGEgY3J1Y2lhbCBwb2ludDogdGhpcyBpcyBhIHNlY3VyaXR5IG1pdGlnYXRpb24uIGBrbWVtX2J1Y2tldHNgIGFyZSB1c2VkIGZvciBoZWFwIGlzb2xhdGlvbiwgc28gdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHdheSB3ZSBhcHByb2FjaCBmdXp6aW5nIHRoaXMgY29kZS4gSXQgcHJvYmFibHkgd29u4oCZdCBiZSB0aGF0IGZydWl0ZnVsIGZvciBnZW5lcmFsIGZ1enppbmcuIFVubGVzcyB3ZSdyZSBzcGVjaWZpY2FsbHkgaHVudGluZyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyB0aGF0IHRoaXMgbmV3IGFsbG9jYXRpb24gbWV0aG9kIG1pZ2h0IG5vdyBtaXRpZ2F0ZSBvciBjYXVzZSB0byBiZWhhdmUgZGlmZmVyZW50bHkuXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgcmVsYXRlZCBjb25maWdzLiBDb3VsZCBgQ09ORklHX1NMQUJfQlVDS0VUU2AgYmUgaW52b2x2ZWQgaGVyZT8gSSdsbCBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjA0LjE0Njc1NTA1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ5MzQ0NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fYnVja2V0c19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTg2OT12b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqcCk7XFxuaW5jbHVkZS9saW51eC9zbGFiLmgtODcwLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjg3MTprbWVtX2J1Y2tldHMgKmttZW1fYnVja2V0c19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc2xhYl9mbGFnc190IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg3Mi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCB1c2Vyb2Zmc2V0LCB1bnNpZ25lZCBpbnQgdXNlcnNpemUsXFxuLS1cXG5pcGMvbXNndXRpbC5jPTQ0PXN0YXRpYyBpbnQgX19pbml0IGluaXRfbXNnX2J1Y2tldHModm9pZClcXG5pcGMvbXNndXRpbC5jLTQ1LXtcXG5pcGMvbXNndXRpbC5jOjQ2OlxcdG1zZ19idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwibXNnX21zZ1xcXCIsIFNMQUJfQUNDT1VOVCxcXG5pcGMvbXNndXRpbC5jLTQ3LVxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBtc2dfbXNnKSxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDA2LS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6NDA3OiAqIGttZW1fYnVja2V0c19jcmVhdGUgLSBDcmVhdGUgYSBzZXQgb2YgY2FjaGVzIHRoYXQgaGFuZGxlIGR5bmFtaWMgc2l6ZWRcXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC0gKlxcdFxcdFxcdCBhbGxvY2F0aW9ucyB2aWEga21lbV9idWNrZXRzX2FsbG9jKClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDI0LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NDI1OmttZW1fYnVja2V0cyAqa21lbV9idWNrZXRzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXFxubW0vc2xhYl9jb21tb24uYy00MjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgdXNlcm9mZnNldCxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTAyLX1cXG5tbS9zbGFiX2NvbW1vbi5jOjUwMzpFWFBPUlRfU1lNQk9MKGttZW1fYnVja2V0c19jcmVhdGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtNTA0LVxcbi0tXFxubW0vdXRpbC5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3VzZXJfYnVja2V0cyh2b2lkKVxcbm1tL3V0aWwuYy0yMDEte1xcbm1tL3V0aWwuYzoyMDI6XFx0dXNlcl9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwibWVtZHVwX3VzZXJcXFwiLCAwLCAwLCBJTlRfTUFYLCBOVUxMKTtcXG5tbS91dGlsLmMtMjAzLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE5Mz12b2lkIF9faW5pdCBza2JfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTIyMC1cXHRcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo1MjIxOlxcdHNrYl9kYXRhX2J1Y2tldHMgPSBrbWVtX2J1Y2tldHNfY3JlYXRlKFxcXCJza2JfZGF0YVxcXCIsIFNMQUJfUEFOSUMsIDAsIElOVF9NQVgsIE5VTEwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMjItXFx0c2tiX2V4dGVuc2lvbnNfaW5pdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzowNy4xOTYxMTY0NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQyODAwMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBga21lbV9idWNrZXRzX2NyZWF0ZWAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBga21lbV9idWNrZXRzX2NyZWF0ZWAgZnVuY3Rpb24sIGFuZCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgd2hldGhlciB0aGVyZSdzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBrbm9iLCBzb21ldGhpbmcgSSBtaWdodCBiZSBhYmxlIHRvIHR3ZWFrLCB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIGl0cyBiZWhhdmlvciBvciBwYXJhbWV0ZXJzLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCwgc28gZmluZGluZyB0aGUgcmlnaHQgY29uZmlnIHdvdWxkIGdpdmUgbWUgc2VyaW91cyBjb250cm9sIG92ZXIgaXRzIHBlcmZvcm1hbmNlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYnVja2V0IHNpemVzLCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBvdmVyYWxsIG1lbW9yeSBsaW1pdHMg4oCTIHRoaW5ncyBJJ3ZlIHR3ZWFrZWQgYmVmb3JlIHdpdGggb3RoZXIgbWVtb3J5IGFsbG9jYXRvcnMuIFNvLCBJIG5lZWQgdG8ga25vdzogd2hhdCdzIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCB3aGVuIGl0IGNvbWVzIHRvIGluZmx1ZW5jaW5nIGhvdyBga21lbV9idWNrZXRzX2NyZWF0ZWAgb3BlcmF0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGluIHRoZSBrZXJuZWwgY29uZmlnIHRoYXQgSSBjYW4gbW9kaWZ5IHdpdGhvdXQgdG9vIG11Y2ggcmlzaz8gSSBuZWVkIHRvIGtub3cgd2hlcmUgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjEwLjEzODkxODY0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDE5MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fYnVja2V0c19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWJfY29tbW9uLmM9NDA0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9idWNrZXRzX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDA2LS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6NDA3OiAqIGttZW1fYnVja2V0c19jcmVhdGUgLSBDcmVhdGUgYSBzZXQgb2YgY2FjaGVzIHRoYXQgaGFuZGxlIGR5bmFtaWMgc2l6ZWRcXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC0gKlxcdFxcdFxcdCBhbGxvY2F0aW9ucyB2aWEga21lbV9idWNrZXRzX2FsbG9jKClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDI0LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NDI1OmttZW1fYnVja2V0cyAqa21lbV9idWNrZXRzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXFxubW0vc2xhYl9jb21tb24uYy00MjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgdXNlcm9mZnNldCxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTAyLX1cXG5tbS9zbGFiX2NvbW1vbi5jOjUwMzpFWFBPUlRfU1lNQk9MKGttZW1fYnVja2V0c19jcmVhdGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtNTA0LVxcbi0tXFxubW0vdXRpbC5jPTIwMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3VzZXJfYnVja2V0cyh2b2lkKVxcbm1tL3V0aWwuYy0yMDEte1xcbm1tL3V0aWwuYzoyMDI6XFx0dXNlcl9idWNrZXRzID0ga21lbV9idWNrZXRzX2NyZWF0ZShcXFwibWVtZHVwX3VzZXJcXFwiLCAwLCAwLCBJTlRfTUFYLCBOVUxMKTtcXG5tbS91dGlsLmMtMjAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoxMC4yOTk5NDM1NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1NjE2MDUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBrbWVtX2J1Y2tldHNfY3JlYXRlYCBpcyBjb25kaXRpb25hbCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBjcnVjaWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkLiBLbm93aW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgbWUgdHJvdWJsZXNob290IHBvdGVudGlhbCBpc3N1ZXMsIHVuZGVyc3RhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBtYXliZSBldmVuIG9wdGltaXplIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcyBvciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoxMi44NTYxMDY4M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMDk4MTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0xBQl9CVUNLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTAxPUNPTkZJR19aU01BTExPQ19TVEFUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTAyOkNPTkZJR19TTEFCX0JVQ0tFVFM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xMDMtQ09ORklHX1NMVUJfU1RBVFM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTk1PUNPTkZJR19aU01BTExPQ19TVEFUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6OTY6Q09ORklHX1NMQUJfQlVDS0VUUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTk3LSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldFxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9OTEyPXVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxNS0gKiBUaGVzZSBtYWNyb3MgYWxsb3cgZGVjbGFyaW5nIGEga21lbV9idWNrZXRzICogcGFyYW1ldGVyIGFsb25nc2lkZSBzaXplLCB3aGljaFxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjkxNjogKiBjYW4gYmUgY29tcGlsZWQgb3V0IHdpdGggQ09ORklHX1NMQUJfQlVDS0VUUz1uIHNvIHRoYXQgYSBsYXJnZSBudW1iZXIgb2YgY2FsbFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxNy0gKiBzaXRlcyBkb24ndCBoYXZlIHRvIHBhc3MgTlVMTC5cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MTgtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE5OiNpZmRlZiBDT05GSUdfU0xBQl9CVUNLRVRTXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTIwLSNkZWZpbmUgREVDTF9CVUNLRVRfUEFSQU1TKF9zaXplLCBfYilcXHRzaXplX3QgKF9zaXplKSwga21lbV9idWNrZXRzICooX2IpXFxuLS1cXG5rZXJuZWwvY29uZmlncy9oYXJkZW5pbmcuY29uZmlnPTIyPUNPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEPXlcXG5rZXJuZWwvY29uZmlncy9oYXJkZW5pbmcuY29uZmlnOjIzOkNPTkZJR19TTEFCX0JVQ0tFVFM9eVxcbmtlcm5lbC9jb25maWdzL2hhcmRlbmluZy5jb25maWctMjQtQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1I9eVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz00MDQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2J1Y2tldHNfY2FjaGUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy00MjAtICogUmV0dXJuOiBhIHBvaW50ZXIgdG8gdGhlIGNhY2hlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4gV2hlblxcbm1tL3NsYWJfY29tbW9uLmM6NDIxOiAqIENPTkZJR19TTEFCX0JVQ0tFVFMgaXMgbm90IGVuYWJsZWQsIFpFUk9fU0laRV9QVFIgaXMgcmV0dXJuZWQsIGFuZFxcbm1tL3NsYWJfY29tbW9uLmMtNDIyLSAqIHN1YnNlcXVlbnQgY2FsbHMgdG8ga21lbV9idWNrZXRzX2FsbG9jKCkgd2lsbCBmYWxsIGJhY2sgdG8ga21hbGxvYygpLlxcbi0tXFxubW0vc2xhYl9jb21tb24uYz00MjU9a21lbV9idWNrZXRzICprbWVtX2J1Y2tldHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDQwLVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NDQxOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU0xBQl9CVUNLRVRTKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTQ0Mi1cXHRcXHRyZXR1cm4gWkVST19TSVpFX1BUUjtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9OTk0PXZvaWQgX19pbml0IGNyZWF0ZV9rbWFsbG9jX2NhY2hlcyh2b2lkKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMDE5LVxcbm1tL3NsYWJfY29tbW9uLmM6MTAyMDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xBQl9CVUNLRVRTKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTEwMjEtXFx0XFx0a21lbV9idWNrZXRzX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImttYWxsb2NfYnVja2V0c1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjE1LjQ4NzA5MTc3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjY5MTA0MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENPTkZJR19TTEFCX0JVQ0tFVFNgIEltcGFjdCBvbiBOZXR3b3JraW5nKipcblxuT2theSwgc28gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gSWYgaXQncyBkaXNhYmxlZCwgYGttZW1fYnVja2V0c19jcmVhdGVgIHJldHVybnMgYFpFUk9fU0laRV9QVFJgLCBhbmQgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgcmV2ZXJ0cyB0byBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAuIFRvIHRlc3QgdGhlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIGVuYWJsZWQgZHVyaW5nIHRlc3RpbmcuXG5cbk5vdywgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaXMgdXNlZCBieSBga21hbGxvY19wZm1lbWFsbG9jYCBhbmQgYGttYWxsb2NfcmVzZXJ2ZWAsIGJvdGggb2Ygd2hpY2ggYXJlIHN0YXRpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaW5kIHRoZSBleHBvcnRlZCBvciBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgY2FsbCB0aGVzZS4gTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWUgYF9fYWxsb2Nfc2tiYCwgYHBza2JfZXhwYW5kX2hlYWRgLCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCwgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gR2l2ZW4gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGZ1enppbmcgc2VlbXMgbGlrZSBhIHZhbGlkIGFwcHJvYWNoIHRvIHN0cmVzcy10ZXN0IGl0LlxuXG5Gb2N1c2luZyBvbiBzcGVjaWZpYyBzeW1ib2xzIGZvciBmdXp6aW5nLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBfX2FsbG9jX3NrYmAgYW5kIGBwc2tiX2V4cGFuZF9oZWFkYC4gSG93ZXZlciwgYF9fYWxsb2Nfc2tiYCBpcyBhICp2ZXJ5KiBob3QtcGF0aCBmdW5jdGlvbiwgYW5kIHRoZSBkaXJlY3Rpb25zIHN1Z2dlc3QgYXZvaWRpbmcgdGhvc2UuIGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbHNvIHF1aXRlIGNvbW1vbi4gTWF5YmUgSSBzaG91bGQgaG9sZCBvZmYgb24gbGlzdGluZyBhbnkgaWYgdGhleSBhcmUgYWxsIGhvdCBwYXRocz8gTGV0J3Mgc2VlIGlmIHRoZSBvdGhlciB0d28gYXJlIGxlc3MgY29tbW9uLlxuXG5gcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAgc2VlbSBsZXNzIGZyZXF1ZW50bHkgY2FsbGVkLiBJIHNob3VsZCBsb29rIGludG8gd2hlcmUgdGhleSBhcmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoyMi4xNTYxOTgxMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTQ1MzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NjgxMD1FWFBPUlRfU1lNQk9MKGFsbG9jX3NrYl93aXRoX2ZyYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXFx1MDAzYyBoZWFkbGVuICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjgxMzpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBoZWFkbGVuLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjItXFx0aWYgKGxlbiBcXHUwMDNjIGhlYWRsZW4pXFxubmV0L2NvcmUvc2tidWZmLmM6NzAyMzpcXHRcXHRyZXR1cm4gcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHNrYiwgbGVuLCBoZWFkbGVuLCBnZnApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjQtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoyMi41MDc2NTY3MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNzg4NjczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqUG90ZW50aWFsIERhdGEgQ2FydmluZyBGdW5jdGlvbnMgYW5kIFRoZWlyIENhbGxlcnMqKlxuXG5IbW0sIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgZGF0YSBpcyBoYW5kbGVkIHdoZW4gYSBwYWNrZXQgaXMgY29waWVkIG9uIHdyaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IEkgYmVsaWV2ZSBgcHNrYl9jYXJ2ZWAgbWlnaHQgYmUgaW52b2tlZCBieSBgc2tiX2Nvd19kYXRhYCB3aGVuIGEgcGFja2V0IG5lZWRzIGl0cyBkYXRhIGNhcnZlZCBvciBtYXliZSBpdCdzIGBwc2tiX2V4dHJhY3RgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGZ1bmN0aW9uIGNhbGxzIGZvciB0aGUgQ29weS1Pbi1Xcml0ZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjI2LjA0NTU0NTkzNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDY3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfY2FydmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NjgxMD1FWFBPUlRfU1lNQk9MKGFsbG9jX3NrYl93aXRoX2ZyYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTItLyogY2FydmUgb3V0IHRoZSBmaXJzdCBvZmYgYnl0ZXMgZnJvbSBza2Igd2hlbiBvZmYgXFx1MDAzYyBoZWFkbGVuICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjgxMzpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4MTQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBoZWFkbGVuLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzUtXFxubmV0L2NvcmUvc2tidWZmLmM6Njg3NjpzdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZiwgZ2ZwX3QgZ2ZwKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02ODc3LVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4NzgtLyogY2FydmUgb3V0IHRoZSBmaXJzdCBlYXQgYnl0ZXMgZnJvbSBza2IncyBmcmFnX2xpc3QuIE1heSByZWN1cnNlIGludG9cXG5uZXQvY29yZS9za2J1ZmYuYzo2ODc5OiAqIHBza2JfY2FydmUoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4ODAtICovXFxubmV0L2NvcmUvc2tidWZmLmM6Njg4MTpzdGF0aWMgaW50IHBza2JfY2FydmVfZnJhZ19saXN0KHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbywgaW50IGVhdCxcXG5uZXQvY29yZS9za2J1ZmYuYy02ODgyLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjkwOS1cXHRcXHRcXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6NjkxMDpcXHRcXHRcXHRpZiAocHNrYl9jYXJ2ZShsaXN0LCBlYXQsIGdmcF9tYXNrKSBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9za2J1ZmYuYy02OTExLVxcdFxcdFxcdFxcdGtmcmVlX3NrYihjbG9uZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02OTMzLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY5MzQ6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy02OTM1LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgcG9zLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY5OTAtXFx0Lyogc3BsaXQgbGluZSBpcyBpbiBmcmFnIGxpc3QgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2OTkxOlxcdGlmIChrID09IDAgXFx1MDAyNlxcdTAwMjYgcHNrYl9jYXJ2ZV9mcmFnX2xpc3Qoc2hpbmZvLCBvZmYgLSBwb3MsIGdmcF9tYXNrKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY5OTItXFx0XFx0Lyogc2tiX2ZyYWdfdW5yZWYoKSBpcyBub3QgbmVlZGVkIGhlcmUgYXMgc2hpbmZvLVxcdTAwM2Vucl9mcmFncyA9IDAuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDE3LS8qIHJlbW92ZSBsZW4gYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBza2IgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDE4OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbGVuLCBnZnBfdCBnZnApXFxubmV0L2NvcmUvc2tidWZmLmMtNzAxOS17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDIyLVxcdGlmIChsZW4gXFx1MDAzYyBoZWFkbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMjM6XFx0XFx0cmV0dXJuIHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihza2IsIGxlbiwgaGVhZGxlbiwgZ2ZwKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDI0LVxcdGVsc2VcXG5uZXQvY29yZS9za2J1ZmYuYzo3MDI1OlxcdFxcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzAyNi19XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MDMxPXN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzgtXFxubmV0L2NvcmUvc2tidWZmLmM6NzAzOTpcXHRpZiAocHNrYl9jYXJ2ZShjbG9uZSwgb2ZmLCBnZnApIFxcdTAwM2MgMCB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDAtXFx0ICAgIHBza2JfdHJpbShjbG9uZSwgdG9fY29weSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTM6MjYuMTY5MDE5MDk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjczMzAyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFN0YWNrOiBBIFJlY3Vyc2l2ZSBEaXZlKipcblxuT2theSwgc28gYHBza2JfZXh0cmFjdGAgaXMgY2FsbGluZyBpdHNlbGYuIFRoYXQncyBhIGJpdCBvZiBhIGhlYWQtc2NyYXRjaGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHkgdGhlIHJlY3Vyc2lvbj9cIiBJcyB0aGlzIGludGVudGlvbmFsLCBhIGRlbGliZXJhdGUgZGVzaWduIGNob2ljZSwgb3IgYSBwb3RlbnRpYWwgYnVnIHRoYXQncyBjcmVhdGluZyBhbiBpbmZpbml0ZSBsb29wPyBHaXZlbiB0aGF0IGBwc2tiX2V4dHJhY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBpdHNlbGYsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIExldCdzIHRyYWNlIGl0IGFuZCBkZXRlcm1pbmUgd2hlcmUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlIOKAkyBJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYHBza2JfZXh0cmFjdGAgaXMgYmVpbmcgY2FsbGVkIGluIHRoZSBjb2RlYmFzZSB0byBwcm9wZXJseSBhbmFseXplIHRoaXMgYW5kLCBwZXJoYXBzLCByZWZpbmUgdGhpcyBjcml0aWNhbCBmdW5jdGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGNvZGUsIGdpdmVuIHRoZSBjYWxsIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyOTMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzoyOS4yMzYzNTE4MjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjA3MjA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9leHRyYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyOTM9aW50IHNrYl9tcGxzX2RlY190dGwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk0OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IHRvX2NvcHksXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Mjk1LVxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwMTg9c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBsZW4sIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzAtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzAzMTpzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9leHRyYWN0KHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzMi1cXHRcXHRcXHQgICAgIGludCB0b19jb3B5LCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ2OkVYUE9SVF9TWU1CT0wocHNrYl9leHRyYWN0KTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ3LVxcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jPTE1NT1zdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jLTIxOC1cXG5uZXQvcmRzL3RjcF9yZWN2LmM6MjE5OlxcdFxcdFxcdGNsb25lID0gcHNrYl9leHRyYWN0KHNrYiwgb2Zmc2V0LCB0b19jb3B5LCBhcmctXFx1MDAzZWdmcCk7XFxubmV0L3Jkcy90Y3BfcmVjdi5jLTIyMC1cXHRcXHRcXHRpZiAoIWNsb25lKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTMyPWlwdGZzX3Bza2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICp0cGwsIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2MC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTYxOiAqIGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoKSAtIENyZWF0ZSBhbmQgbG9hZCBkYXRhIGludG8gYSBuZXcgc2tfYnVmZi5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYyLSAqIEBza2JsZW46IHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIGBza2JgLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU3Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Nzc6aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTQyPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTMwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBza2JzZXEsIGlwaGxlbikpKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjExMzE6XFx0XFx0XFx0XFx0c2tiID0gaXB0ZnNfcHNrYl9leHRyYWN0X3NlcShpcGxlbiwgc2tic2VxLCBkYXRhLCBjYXB0dXJlbGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzMi1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjMxLjg1NzA4MDcxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQxODIyNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTS0IgQWxsb2NhdGlvbiBQb2ludHMgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IGZ1enppbmcgZWZmb3J0cyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggY2hhbmdpbmcgdGhlIFNLQiBkYXRhIGFsbG9jYXRvci4gSW5pdGlhbGx5LCBJIHdhcyBjb25zaWRlcmluZyBgcHNrYl9leHRyYWN0YCwgc2luY2UgaXQncyB1c2VkIGluIFJEUyBhbmQgWEZSTSwgYW5kIEkga25vdyBpdCBsZXZlcmFnZXMgYHBza2JfY2FydmVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBrbWFsbG9jX3Jlc2VydmVgLiBBbHNvLCBJJ2Qgbm90ZWQgdGhhdCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAgYXJlIGFsc28gaW4gcGxheSBoZXJlLlxuXG5UaGVuLCBJIHdhcyBjb25zaWRlcmluZyBgcHNrYl9leHBhbmRfaGVhZGAsIGJlY2F1c2UgdGhhdCBhbmQgYF9fYWxsb2Nfc2tiYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciBTS0IgYWxsb2NhdGlvbiwgYW5kIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCBgX19hbGxvY19za2JgIGFyZSBsaWtlbHkgdG8gYmUgaG90IHNwb3RzLiBCdXQgbm93IHRoYXQgSSB0aGluayBhYm91dCB0aGUgc2NvcGUgb2YgdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHRoZSBhbGxvY2F0aW9uIGNoYW5nZSB3aWxsIGJlIGhpdCBieSAqYW55KiBTS0IgYWxsb2NhdGlvbi4gU28sIHRhcmdldGluZyBzcGVjaWZpYyBvYnNjdXJlIGZ1bmN0aW9ucyBtaWdodCBiZSBsZXNzIGltcG9ydGFudCB0aGFuIGp1c3QgZW5zdXJpbmcgZ2VuZXJhbCBTS0IgYWxsb2NhdGlvbiBoYXBwZW5zIGR1cmluZyB0ZXN0aW5nLlxuXG5CdXQsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBMaXN0aW5nIGBfX2FsbG9jX3NrYmAgd291bGQgZGVmaW5pdGVseSBza2V3IHRoaW5ncywgc28gSSBzaG91bGQgb21pdCB0aGF0LlxuXG5Pa2F5LCBsZXQncyByZXZpc2l0IGBwc2tiX2V4cGFuZF9oZWFkYC4gSXQncyBsZXNzIGhvdCB0aGFuIGBfX2FsbG9jX3NrYmAsIGJ1dCBzdGlsbCB1c2VkIGEgbG90LiBUaGVuIHRoZXJlJ3MgYHBza2JfZXh0cmFjdGAsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IGEgaG90IGZ1bmN0aW9uLiBJdCBhbHNvIGNhbGxzIGBrbWFsbG9jX3Jlc2VydmVgLiBJIGNvdWxkIGZ1enogdGhvc2UuIEdpdmVuIHRoZSBwcm9tcHQncyBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgdGhhdCBsaXN0aW5nIGBwc2tiX2V4dHJhY3RgIGFuZCBgcHNrYl9leHBhbmRfaGVhZGAgd2lsbCBwcm92aWRlIGEgZ29vZCBiYWxhbmNlIG9mIGNvdmVyYWdlIHdpdGhvdXQgb3Zlci1lbXBoYXNpemluZyB0aGUgbW9zdCBjb21tb24gYWxsb2NhdGlvbiBwYXRocy4gSSB0aGluayB0aGF0J3MgdGhlIGJlc3Qgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzozOC42OTg5MDUzMjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA5MzY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jX3BmbWVtYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTg5PXN0YXRpYyBrbWVtX2J1Y2tldHMgKnNrYl9kYXRhX2J1Y2tldHMgX19yb19hZnRlcl9pbml0O1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU5MC1cXG5uZXQvY29yZS9za2J1ZmYuYzo1OTE6c3RhdGljIHZvaWQgKmttYWxsb2NfcGZtZW1hbGxvYyhzaXplX3Qgb2JqX3NpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcXG5uZXQvY29yZS9za2J1ZmYuYy01OTIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MjYtXFx0XFx0XFx0c2tiLVxcdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcXG5uZXQvY29yZS9za2J1ZmYuYzo2Mjc6XFx0XFx0cmV0dXJuIGttYWxsb2NfcGZtZW1hbGxvYygwLCBmbGFncywgbm9kZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjI4LVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OC1cXHRcXHRza2ItXFx1MDAzZXBmbWVtYWxsb2MgPSB0cnVlO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY0OTpcXHRvYmogPSBrbWFsbG9jX3BmbWVtYWxsb2Mob2JqX3NpemUsIGZsYWdzLCBub2RlKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02NTAtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzozOC44NDQwMDQxMzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMjczMzg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBga21hbGxvY19yZXNlcnZlYCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gUmlnaHQsIGFuZCBga21hbGxvY19yZXNlcnZlYCBpcyBpbnZva2VkIGJ5IGBfX2FsbG9jX3NrYmAsIGFuZCB0aGVuIGJ5IGEgY2x1c3RlciBvZiBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnM6IGBwc2tiX2V4cGFuZF9oZWFkYCwgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYC4gIFRoZXJlZm9yZSwgaWYgSSdtIHRyeWluZyB0byBuYXJyb3cgZG93biBpbnRlcmVzdGluZyBzeW1ib2xzLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBwc2tiX2V4dHJhY3RgIChiZWNhdXNlIGl0IGNhbGxzIGBwc2tiX2NhcnZlYCksIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgLCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcmAgc2VlbSB0byBiZSB0aGUgcHJpbWUgY2FuZGlkYXRlcy5cblxuSG1tLCBidXQgd2FpdC4gYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgIGFyZSAqc3RhdGljKiBmdW5jdGlvbnMuICBEb2VzIHRoYXQgcG9zZSBhIHByb2JsZW0gZm9yIGZ1enppbmc/ICBDYW4gd2UgaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0PyAgWWVzLCBzeXprYWxsZXIgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgaXQgc2hvdWxkIGJlIGZpbmUuIFRoYXQncyBnb29kLlxuXG5TbyB0aGVuLCBgcHNrYl9leHRyYWN0YCBhbmQgYHBza2JfZXhwYW5kX2hlYWRgIGFyZSBleHBvcnRlZCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggbGlzdGluZy4gIExldCdzIGFkZCB0aG9zZSB0byB0aGUgbGlzdC5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/IGBDT05GSUdfU0xBQl9CVUNLRVRTYCBzZWVtcyByZWxldmFudCBoZXJlLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIHRoaXMgcGFydCBvZiB0aGUgY29kZSB0byBldmVuIGV4aXN0LiBZZXAsIHRoYXQncyByZXF1aXJlZC4gIEdvb2QsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuICBBcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlncyB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVuY2llcz8gTmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0LiAgTGV0J3MgY2hlY2sgd2hhdCBgQ09ORklHX1NMQUJfQlVDS0VUU2AgZGVwZW5kcyBvbiwgdG8gc2VlIGlmIHdlIG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTM6NDQuNDc2NzQxNjkxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk5Mjc4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTEFCX0JVQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxuLS1cXG5tbS9LY29uZmlnLTIyMC1cXG5tbS9LY29uZmlnOjIyMTpjb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzo0Ny4yNzYwMzA1ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0ODQ1NTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgU0xBQl9CVUNLRVRTKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgc29tZXRoaW5nLCBhbmQgdGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBmaXJzdCBzdG9wLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgU0xBQl9CVUNLRVRTYC4gSXQncyBhIGtleSB2YXJpYWJsZSBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbi4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgaXRzIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBTTEFCIGFsbG9jYXRvciBhcmNoaXRlY3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjEzOjUwLjUyNDQ4ODUwNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTU6XFx0XFx0aGVscFxcbiAyMTY6XFx0XFx0ICBNYW55IGtlcm5lbCBoZWFwIGF0dGFja3MgdHJ5IHRvIHRhcmdldCBzbGFiIGNhY2hlIG1ldGFkYXRhIGFuZFxcbiAyMTc6XFx0XFx0ICBvdGhlciBpbmZyYXN0cnVjdHVyZS4gVGhpcyBvcHRpb25zIG1ha2VzIG1pbm9yIHBlcmZvcm1hbmNlXFxuIDIxODpcXHRcXHQgIHNhY3JpZmljZXMgdG8gaGFyZGVuIHRoZSBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgYWdhaW5zdCBjb21tb25cXG4gMjE5OlxcdFxcdCAgZnJlZWxpc3QgZXhwbG9pdCBtZXRob2RzLlxcbiAyMjA6XFx0XFxuIDIyMTpcXHRjb25maWcgU0xBQl9CVUNLRVRTXFxuIDIyMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGFsbG9jYXRpb24gZnJvbSBzZXBhcmF0ZSBrbWFsbG9jIGJ1Y2tldHNcXFwiXFxuIDIyMzpcXHRcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG4gMjI0OlxcdFxcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbiAyMjU6XFx0XFx0aGVscFxcbiAyMjY6XFx0XFx0ICBLZXJuZWwgaGVhcCBhdHRhY2tzIGZyZXF1ZW50bHkgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gY3JlYXRlXFxuIDIyNzpcXHRcXHQgIHNwZWNpZmljYWxseS1zaXplZCBhbGxvY2F0aW9ucyB3aXRoIHVzZXItY29udHJvbGxlZCBjb250ZW50c1xcbiAyMjg6XFx0XFx0ICB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGludG8gdGhlIHNhbWUga21hbGxvYyBidWNrZXQgYXMgYVxcbiAyMjk6XFx0XFx0ICB0YXJnZXQgb2JqZWN0LiBUbyBhdm9pZCBzaGFyaW5nIHRoZXNlIGFsbG9jYXRpb24gYnVja2V0cyxcXG4gMjMwOlxcdFxcdCAgcHJvdmlkZSBhbiBleHBsaWNpdGx5IHNlcGFyYXRlZCBzZXQgb2YgYnVja2V0cyB0byBiZSB1c2VkIGZvclxcbiAyMzE6XFx0XFx0ICB1c2VyLWNvbnRyb2xsZWQgYWxsb2NhdGlvbnMuIFRoaXMgbWF5IHZlcnkgc2xpZ2h0bHkgaW5jcmVhc2VcXG4gMjMyOlxcdFxcdCAgbWVtb3J5IGZyYWdtZW50YXRpb24sIHRob3VnaCBpbiBwcmFjdGljZSBpdCdzIG9ubHkgYSBoYW5kZnVsXFxuIDIzMzpcXHRcXHQgIG9mIGV4dHJhIHBhZ2VzIHNpbmNlIHRoZSBidWxrIG9mIHVzZXItY29udHJvbGxlZCBhbGxvY2F0aW9uc1xcbiAyMzQ6XFx0XFx0ICBhcmUgcmVsYXRpdmVseSBsb25nLWxpdmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxMzo1MC41MjQ2NDg1MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NzEzMDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBGdXp6aW5nIHRoZSBTS0IgRGF0YSBBbGxvY2F0b3IgQ2hhbmdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjb25kaXRpb25hbGx5IGRlcGVuZGVudCBvbiBgIVNMVUJfVElOWWAsIG1lYW5pbmcgd2UgbmVlZCBgU0xBQl9CVUNLRVRTYCBlbmFibGVkIGluIHRoZSBjb25maWcuIFRoYXQncyB0aGUga2V5IHRvIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhpcyBuZXcgY29kZSBwYXRoIHdoZXJlIHRoZSBjaGFuZ2UgZnJvbSBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaXMgbWFkZSB0byB1c2luZyBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCwgYW5kIHRoZXJlZm9yZSBga21lbV9idWNrZXRzX2NyZWF0ZWAuIElmIGBTTEFCX0JVQ0tFVFNgIGlzbid0IHNldCwgdGhlbiBga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyYCBzaW1wbHkgZmFsbHMgYmFjayB0byBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAsIHNvIGVuYWJsaW5nIGBTTEFCX0JVQ0tFVFNgIGlzIGNyaXRpY2FsIGZvciB0ZXN0aW5nIHRoZSBwYXRjaC4gSXQncyBhbHdheXMgY29tcGlsZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgcmVsYXRpdmVseSBzaW1wbGU6IGl0IHN3YXBzIG91dCB0aGUgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIHRoZSBjYWxsIGluIGBrbWFsbG9jX3BmbWVtYWxsb2NgIGZyb20gdGhlIG9sZCBga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgY2FsbCB0byB1c2UgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaW5zdGVhZCwgcGFzc2luZyBpbiBgc2tiX2RhdGFfYnVja2V0c2AuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjaGFuZ2UgZnV6emFibGU/IEFic29sdXRlbHkuIEl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sncyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgU0tCIGRhdGEsIG1lYW5pbmcgaXQncyB3b3J0aCBmdXp6aW5nISBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3Igb2YgU0tCIGRhdGEgYnVmZmVycy4gQW55IGJ1Z3MgaW4gdGhpcyAqbmV3KiBhbGxvY2F0b3Igb3IgaXRzIGludGVyYWN0aW9uIHdpdGggU0tCIGFsbG9jYXRpb24gY291bGQgYmUgZXhwb3NlZCB0aHJvdWdoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyBob3cgYGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcmAgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBTS0IgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IHRoZSByZWFsbG9jYXRpb24gYW5kIGV4dHJhY3Rpb24gcGF0aHMsIGxpa2UgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9leHRyYWN0YCwgYXMgdGhleSBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIHdoaWNoIGV4ZXJjaXNlIHRoZSBkYXRhIGJ1ZmZlci4gSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5UaGUgaW1wb3J0YW50IHRoaW5ncyB0byByZW1lbWJlciBhcmU6XG5cbiogICBGb2N1cyBzaG91bGQgYmUgb24gU0tCIHJlYWxsb2NhdGlvbiBhbmQgZXh0cmFjdGlvbiBwYXRocyB0byBleGVyY2lzZSB0aGUgbmV3IGFsbG9jYXRpb24gYmVoYXZpb3IuXG4qICAgVGhlIGVzc2VudGlhbCBjb25maWcgbmVlZGVkIGlzIGBTTEFCX0JVQ0tFVFNgLlxuKiAgIFRoZSBjaGFuZ2UgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBpcyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6MTM6NTguNjgxNzgwODQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgxMjU3NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA1MT12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTk6I2RlZmluZSBrbWVtX2J1Y2tldHNfYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoX2IsIF9zaXplLCBfZmxhZ3MsIF9ub2RlKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTYwLVxcdGFsbG9jX2hvb2tzKF9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcl9ub3Byb2YoUEFTU19LTUFMTE9DX1BBUkFNUyhfc2l6ZSwgX2IsIF9fa21hbGxvY190b2tlbihfc2l6ZSkpLCBfZmxhZ3MsIF9ub2RlLCBfUkVUX0lQXykpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTYyLSNkZWZpbmUga21lbV9idWNrZXRzX2FsbG9jX3RyYWNrX2NhbGxlcihfYiwgX3NpemUsIF9mbGFncykgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNjM6XFx0a21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKF9iLCBfc2l6ZSwgX2ZsYWdzLCBOVU1BX05PX05PREUpXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE2NC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU5MT1zdGF0aWMgdm9pZCAqa21hbGxvY19wZm1lbWFsbG9jKHNpemVfdCBvYmpfc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTk3LVxcdFxcdFxcdFxcdFxcdCAgICAgZmxhZ3MsIG5vZGUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjU5ODpcXHRyZXR1cm4ga21lbV9idWNrZXRzX2FsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNrYl9kYXRhX2J1Y2tldHMsIG9ial9zaXplLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTU5OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIG5vZGUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjA5PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MzktXFx0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjQwOlxcdG9iaiA9IGttZW1fYnVja2V0c19hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihza2JfZGF0YV9idWNrZXRzLCBvYmpfc2l6ZSxcXG5uZXQvY29yZS9za2J1ZmYuYy02NDEtXFx0XFx0XFx0XFx0XFx0ZmxhZ3MgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxNDowMS43NjMwNDc0MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MzcxODEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgTGludXggTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhpcyBjcnVjaWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGRlZmluZWQuIEhtbSwgSSB2YWd1ZWx5IHJlY2FsbCBpdCBiZWluZyBhIGNvcmUgTGludXggY29uc3RydWN0Li4uIFllcywgaXQgY2xpY2tzISBJdCdzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc2xhYi5oYC4gVGhhdCdzIHRoZSBnby10byBoZWFkZXIgZm9yIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgd2hhdCBJJ20gYWxtb3N0IGNlcnRhaW5seSBkZWFsaW5nIHdpdGggaGVyZS4gT2theSwgZ29vZC4gSGF2aW5nIHRoZSBsb2NhdGlvbiBoZWxwcyBlbm9ybW91c2x5OyBpdCBhdm9pZHMgd2FzdGluZyB0aW1lIGNoYXNpbmcgZmFsc2UgbGVhZHMuXG5cbk5vdywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgd291bGQgYmUgdG8gYXBwbHkgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhpcyB0b29sLCBJIGJlbGlldmUsIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgcmVxdWlyZSBmcm9tIHRoZSBoZWFkZXIgZmlsZSwgYW5kIHdpbGwgYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIG91dHB1dCBpbiBhIHdheSB0aGF0IEkgY2FuIGZ1cnRoZXIgYW5hbHlzZS4gSSdsbCB1dGlsaXplIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBmdW5jdGlvbnMgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNiwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOToxNDowNS4zNDY3NjkwMDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAxNzU0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMQUJfQlVDS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0b3IgdXNlZCBmb3IgU0tCIGRhdGEgYnVmZmVycyB0byB1c2UgYSBkZWRpY2F0ZWQga21lbSBidWNrZXQgKGBza2JfZGF0YV9idWNrZXRzYCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBrbWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaydzIG1lbW9yeSBtYW5hZ2VtZW50LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBTS0IgcmVhbGxvY2F0aW9uIGFuZCBleHRyYWN0aW9uIHBhdGhzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvci4gYENPTkZJR19TTEFCX0JVQ0tFVFNgIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgc2VwYXJhdGUgYnVja2V0IGFsbG9jYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xBQl9CVUNLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRvciB1c2VkIGZvciBTS0IgZGF0YSBidWZmZXJzIHRvIHVzZSBhIGRlZGljYXRlZCBrbWVtIGJ1Y2tldCAoYHNrYl9kYXRhX2J1Y2tldHNgKSBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIGttYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIFNLQiByZWFsbG9jYXRpb24gYW5kIGV4dHJhY3Rpb24gcGF0aHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBhbGxvY2F0aW9uIGJlaGF2aW9yLiBgQ09ORklHX1NMQUJfQlVDS0VUU2AgaXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZW5hYmxlIHRoZSBzZXBhcmF0ZSBidWNrZXQgYWxsb2NhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[1] Phase: Succeeded StartedAt: 2026-07-02 19:14:14 +0000 UTC FinishedAt: 2026-07-02 19:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 19:14:14 +0000 UTC FinishedAt: 2026-07-02 19:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2] Phase: Succeeded StartedAt: 2026-07-02 19:14:14 +0000 UTC FinishedAt: 2026-07-02 23:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 19:14:14 +0000 UTC FinishedAt: 2026-07-02 23:33:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 19:14:14 +0000 UTC FinishedAt: 2026-07-02 19:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 19:14:14 +0000 UTC FinishedAt: 2026-07-02 19:14:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowbhkw8/series-workflowbhkw8-convert-artifact-718654213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 19:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 19:47:26 +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:*c03dec29-bd14-4e9b-9120-808c8d311f78,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-workflowbhkw8/series-workflowbhkw8-convert-artifact-718654213/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": "1e178162-00f5-48ca-a015-f5abe948e167", "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-workflowbhkw8/series-workflowbhkw8-build-action-462718635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 19:47:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c03dec29-bd14-4e9b-9120-808c8d311f78,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-workflowbhkw8/series-workflowbhkw8-convert-artifact-718654213/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": "1e178162-00f5-48ca-a015-f5abe948e167", "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-workflowbhkw8/series-workflowbhkw8-build-action-462718635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 19:47:26 +0000 UTC FinishedAt: 2026-07-02 19:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 19:47:26 +0000 UTC FinishedAt: 2026-07-02 19:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 19:47:26 +0000 UTC FinishedAt: 2026-07-02 19:47:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 19:47:26 +0000 UTC FinishedAt: 2026-07-02 19:47:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowbhkw8/series-workflowbhkw8-convert-artifact-2185333472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 19:47:36 +0000 UTC FinishedAt: 2026-07-02 19:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 19:47:36 +0000 UTC FinishedAt: 2026-07-02 19:49:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e178162-00f5-48ca-a015-f5abe948e167,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-workflowbhkw8/series-workflowbhkw8-build-action-462718635/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-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 19:49:43 +0000 UTC FinishedAt: 2026-07-02 19:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 19:49:43 +0000 UTC FinishedAt: 2026-07-02 19:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 19:49:43 +0000 UTC FinishedAt: 2026-07-02 20:16:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 19:49:43 +0000 UTC FinishedAt: 2026-07-02 20:16: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:*c03dec29-bd14-4e9b-9120-808c8d311f78,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-workflowbhkw8/series-workflowbhkw8-convert-artifact-2185333472/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": "0b2b7a2f-ac12-4396-a08a-a41b98ed243b", "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-workflowbhkw8/series-workflowbhkw8-build-action-3702781852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 19:49:43 +0000 UTC FinishedAt: 2026-07-02 20:16:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c03dec29-bd14-4e9b-9120-808c8d311f78,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-workflowbhkw8/series-workflowbhkw8-convert-artifact-2185333472/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": "0b2b7a2f-ac12-4396-a08a-a41b98ed243b", "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-workflowbhkw8/series-workflowbhkw8-build-action-3702781852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 20:16:49 +0000 UTC FinishedAt: 2026-07-02 20:16:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 20:16:49 +0000 UTC FinishedAt: 2026-07-02 20:16:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 20:16:49 +0000 UTC FinishedAt: 2026-07-02 20:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 20:16:49 +0000 UTC FinishedAt: 2026-07-02 20:18:38 +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:*0b2b7a2f-ac12-4396-a08a-a41b98ed243b,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-workflowbhkw8/series-workflowbhkw8-build-action-3702781852/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-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 23:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 23:33:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"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:*1e178162-00f5-48ca-a015-f5abe948e167,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b2b7a2f-ac12-4396-a08a-a41b98ed243b,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-workflowbhkw8/series-workflowbhkw8-build-action-462718635/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-workflowbhkw8/series-workflowbhkw8-build-action-3702781852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 20:18:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 20:18:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"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-workflowbhkw8/series-workflowbhkw8-convert-artifact-2597844537/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 20:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 20:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 20:18:48 +0000 UTC FinishedAt: 2026-07-02 20:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 20:18:58 +0000 UTC FinishedAt: 2026-07-02 23:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhkw8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLAB_BUCKETS"],"series_id":"efeab196-ca15-4961-93f0-417e73a0baff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 20:18:58 +0000 UTC FinishedAt: 2026-07-02 23:32:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e178162-00f5-48ca-a015-f5abe948e167,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b2b7a2f-ac12-4396-a08a-a41b98ed243b,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-workflowbhkw8/series-workflowbhkw8-build-action-462718635/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-workflowbhkw8/series-workflowbhkw8-build-action-3702781852/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-workflowbhkw8/series-workflowbhkw8-convert-artifact-2597844537/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,}